aboutsummaryrefslogtreecommitdiff
path: root/lexer.l
blob: 4895b2408207909656b8386174b0507b4a1182b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
%option noyywrap yylineno

%{
#include "parser.tab.h"
%}

DIGIT       [0-9]
IDENT       [A-Za-z][A-Za-z0-9]*
WS          [ \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; }

{WS}            { }
.               { fprintf(stderr, "Unknown char: %s\n", yytext); }

%%