diff options
author | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2025-05-20 10:29:33 +0200 |
---|---|---|
committer | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2025-05-20 10:29:33 +0200 |
commit | 3829a704150a06b2767d542b39179377a592da0f (patch) | |
tree | 316a1e01f3306d717739e6d73b25f5215c2cf8f0 /src/lexer.l | |
parent | cc383b7b2d89f05b724460b4d5cb385525911671 (diff) | |
download | imp-3829a704150a06b2767d542b39179377a592da0f.tar.gz imp-3829a704150a06b2767d542b39179377a592da0f.zip |
folder structure
Diffstat (limited to 'src/lexer.l')
-rw-r--r-- | src/lexer.l | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/lexer.l b/src/lexer.l new file mode 100644 index 0000000..c9aaff0 --- /dev/null +++ b/src/lexer.l @@ -0,0 +1,47 @@ +%option noyywrap yylineno + +%{ +#include "parser.tab.h" +%} + +DIGIT [0-9] +IDENT [A-Za-z][A-Za-z0-9]* +WHITESPACE [ \t\r\n]+ + +%% + +"skip" { return TOKEN_SKIP; } +"if" { return TOKEN_IF; } +"then" { return TOKEN_THEN; } +"else" { return TOKEN_ELSE; } +"end" { return TOKEN_END; } +"while" { return TOKEN_WHILE; } +"do" { return TOKEN_DO; } + +"(" { return TOKEN_LEFT_PARENTHESIS; } +")" { return TOKEN_RIGHT_PARENTHESIS; } +";" { return TOKEN_SEMICOLON; } +":=" { return TOKEN_ASSIGN; } + +"+" { return TOKEN_PLUS; } +"-" { return TOKEN_MINUS; } +"*" { return TOKEN_MULTIPLY; } + +"or" { return TOKEN_OR; } +"and" { return TOKEN_AND; } +"not" { return TOKEN_NOT; } + +"=" { return TOKEN_EQUALS; } +"#" { return TOKEN_NOT_EQUALS; } +"<=" { return TOKEN_LESS_EQUAL; } +"<" { return TOKEN_LESS_THAN; } +">=" { return TOKEN_GREATER_EQUAL; } +">" { return TOKEN_GREATER_THAN; } + +{DIGIT}+ { yylval.num = atoi(yytext); return TOKEN_NUMERAL; } +{IDENT} { yylval.id = strdup(yytext); return TOKEN_IDENTIFIER; } + +{WHITESPACE} { } +. { fprintf(stderr, "Unknown char: %s\n", yytext); } + +%% |