-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscanner.lex
58 lines (53 loc) · 2.42 KB
/
scanner.lex
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
48
49
50
51
52
53
54
55
56
57
58
%{
#include <stdio.h>
#include <iostream>
#include "ProgramTypes.hpp"
#include "parser.tab.hpp"
%}
%option noyywrap
%option yylineno
digit ([0-9])
letter ([a-zA-Z])
whitespace ([\t\n\r ])
ID {letter}({letter}|{digit})*
%%
int { yylval= new Node(yytext); return INT; }
byte { yylval= new Node(yytext); return BYTE; }
b { yylval= new Node(yytext); return B; }
bool { yylval= new Node(yytext); return BOOL; }
and { yylval= new Node(yytext); return AND; }
or { yylval= new Node(yytext); return OR; }
not { yylval= new Node(yytext); return NOT; }
true { yylval = new Node(yytext); return TRUE; }
false { yylval = new Node(yytext); return FALSE; }
return { yylval= new Node(yytext); return RETURN; }
if { yylval= new Node(yytext); return IF; }
else { yylval= new Node(yytext); return ELSE; }
while { yylval= new Node(yytext); return WHILE; }
break { yylval= new Node(yytext); return BREAK; }
continue { yylval= new Node(yytext); return CONTINUE; }
(\;) { yylval= new Node(yytext); return SC; }
(\() { yylval= new Node(yytext); return LPAREN; }
(\)) { yylval= new Node(yytext); return RPAREN; }
(\{) { yylval= new Node(yytext); return LBRACE; }
(\}) { yylval= new Node(yytext); return RBRACE; }
(=) { yylval= new Node(yytext); return ASSIGN; }
">=" { yylval= new Node(yytext); return GE;}
"<=" { yylval= new Node(yytext); return LE;}
"<" { yylval= new Node(yytext); return LT;}
">" { yylval= new Node(yytext); return GT;}
"==" { yylval= new Node(yytext); return EQ; }
"!=" { yylval= new Node(yytext); return NE; }
\+ { yylval= new Node(yytext); return ADD; }
\- { yylval= new Node(yytext); return SUB; }
\* { yylval= new Node(yytext); return MULTIPLY; }
\/ { yylval= new Node(yytext); return DIVIDE; }
{ID} { yylval= new Node(yytext); return ID;}
0|[1-9]{digit}* { yylval = new Node(yytext); return NUM;}
\"([^\n\r\"\\]|\\[rnt"\\])+\" { yylval = new Node(yytext); return STRING; }
\/\/[^\r\n]*\r?\n? ;
{whitespace} { /* ignore whitespace */ }
. {
output::errorLex(yylineno);
exit(0);}
%%