-
Notifications
You must be signed in to change notification settings - Fork 1
/
lexica.l
117 lines (82 loc) · 2.82 KB
/
lexica.l
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
%{
#include <string>
%}
START_LINE_COMMENT "//"
LINE_COMMENT {START_LINE_COMMENT}.*
START_MULTI_LINE_COMMENT "<!--"
END_MULTI_LINE_COMMENT "-->"
SPACE [ \t]
DIGIT [0-9]
LETTER [A-Za-z_]
BOOL "verdadeiro"|"falso"
DELIM {SPACE}+
NUM {DIGIT}+
REAL {NUM}+("."{NUM}+)?
CHAR \'({LETTER}|{NUM})\'
ID {LETTER}({LETTER}|{NUM})*
%x SINGLE_STRING
%%
\" BEGIN(SINGLE_STRING);
<SINGLE_STRING>{
\n yyerror("the string misses \" to termiate before newline");
<<EOF>> yyerror("the string misses \" to terminate before EOF");
([^\\\"]|\\.)* {yylval.label = yytext; return TK_STRING;}
\" BEGIN(INITIAL);
. ;
}
"\n" {}
{DELIM} {}
[(){}[\]:,.'?] {return *yytext;}
";" {return TK_SEMICOLON;}
"+" {return TK_ADD;}
"-" {return TK_SUBTRACT;}
"*" {return TK_MULTIPLICATION;}
"/" {return TK_DIVISION;}
"%" {return TK_MODULE;}
"++" {return TK_ADD_ADD;}
"--" {return TK_SUBTRACT_SUBTRACT;}
"=" {return TK_ASSIGNMENT;}
"+=" {return TK_ADD_ASSIGNMENT;}
"-=" {return TK_SUBTRACT_ASSIGNMENT;}
"*=" {return TK_MULTIPLICATION_ASSIGNMENT;}
"/=" {return TK_DIVISION_ASSIGNMENT;}
">" {return TK_BIG;}
"<" {return TK_SMALL;}
"!=" {return TK_NOT_EQ;}
">=" {return TK_BIG_EQ;}
"<=" {return TK_SMALL_EQ;}
"==" {return TK_EQ;}
"&&" {return TK_AND;}
"||" {return TK_OR;}
"!" {return TK_NOT;}
"funcao" {return TK_FUNCTION;}
"inteirinho" {return TK_TYPE_INT;}
"flutuante" {return TK_TYPE_FLOAT;}
"caracter" {return TK_TYPE_CHAR;}
"boleano" {return TK_TYPE_BOOL;}
"texto" {return TK_TYPE_STRING;}
"var" {return TK_VAR;}
"como" {return TK_EXPLICIT_CONVERTER;}
"por acaso" {return TK_IF;}
"esquece" {return TK_ELSE;}
"forzinho" {return TK_FOR;}
"enquanto" {return TK_WHILE;}
"fazer" {return TK_DO;}
"break" {return TK_BREAK;}
"continue" {return TK_CONTINUE;}
"switch" {return TK_SWITCH;}
"case" {return TK_CASE;}
"default" {return TK_DEFAULT;}
"mostrar" {return TK_PRINT;}
"ler" {return TK_SCAN;}
"retorne" {return TK_RETURN;}
{LINE_COMMENT} {yylval.label = yytext; return TK_LINE_COMMENT;}
{START_MULTI_LINE_COMMENT} {yylval.label = yytext; return TK_START_MULTI_LINE_COMMENT;}
{END_MULTI_LINE_COMMENT} {yylval.label = yytext; return TK_END_MULTI_LINE_COMMENT;}
{NUM} {yylval.label = yytext; return TK_NUM;}
{REAL} {yylval.label = yytext; return TK_REAL;}
{CHAR} {yylval.label = yytext; return TK_CHAR;}
{BOOL} {yylval.label = yytext; return TK_BOOL;}
{ID} {yylval.label = yytext; return TK_ID;}
. { *yytext; }
%%