-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflex.lex
82 lines (68 loc) · 1.56 KB
/
flex.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
%{
#include <stdio.h>
#include <string.h>
#include "util.h"
#include "bison.tab.h"
int numOfLines = 1;
%}
%option noyywrap
ID [a-zA-Z][a-zA-Z_0-9]*
NUM [0-9]+
COMENTARIO_BLOCO "{"[^\}]*"}"
COMENTARIO_LINHA "//"[^"\n"]*"\n"
NEWLINE [\n]
SPACE [\t ]+
%%
{COMENTARIO_BLOCO} { }
{COMENTARIO_LINHA} { }
{NEWLINE} {
numOfLines++;
}
{SPACE} {}
"program" return TK_PROGRAM;
"var" return TK_VAR;
"procedure" return TK_PROCEDURE;
"function" return TK_FUNCTION;
"begin" return TK_BEGIN;
"end" return TK_END;
"false" return TK_FALSE;
"true" return TK_TRUE;
"if" return TK_IF;
"then" return TK_THEN;
"else" return TK_ELSE;
"while" return TK_WHILE;
"do" return TK_DO;
"read" return TK_READ;
"write" return TK_WRITE;
"and" return TK_AND;
"or" return TK_OR;
"not" return TK_NOT;
"div" return TK_DIV;
"(" return TK_LPAREN;
")" return TK_RPAREN;
"." return TK_PONTO;
"," return TK_VIRGULA;
";" return TK_PONTVIRG;
"+" return TK_MAIS;
"-" return TK_MENOS;
"*" return TK_MULT;
"=" return TK_IGUAL;
"<>" return TK_DIFERENTE;
">" return TK_MAIOR;
"<" return TK_MENOR;
">=" return TK_MAIORIGUAL;
"<=" return TK_MENORIGUAL;
":" return TK_DOISPONTOS;
":=" return TK_ATRIBUICAO;
{ID} {
yylval.str = string(yytext);
return TK_IDENT;
}
{NUM} {
yylval.num = atoi(yytext);
return TK_NUM;
}
. {
printf("Error: Token ' %s ' unkwown.\n", yytext);
}
%%