-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscanner.l
93 lines (84 loc) · 1.69 KB
/
scanner.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
%{
/*
*Alunos:
*Bruno Sampaio Leite 120213
*Talita Ludmila de Lima 120895
*/
#include "parser.tab.h"
#include "globals.h"
#include "util.h"
#include "scan.h"
int yywrap(void){
return 1;
}
char tokenString[MAXTOKENLEN+1];
%}
DIGITO [0-9]
LETRA [a-zA-Z]
%%
"/*" {
char c;
char d;
c = input();
if(c!=EOF)
{
do
{
d=c;
c = input();
if(c==EOF) return ERR;
if(c=='\n') lineno++;
}while(!(d == '*' && c == '/'));
}
}
"else" return ELSE;
"if" return IF;
"int" return INT;
"return" return RETURN;
"void" return VOID;
"while" return WHILE;
{DIGITO}+ return NUM;
{LETRA}({LETRA})* return ID;
"+" return SOM;
"-" return SUB;
"*" return MUL;
"/" return DIV;
"<" return MEN;
"<=" return IME;
">" return MAI;
">=" return IMA;
"==" return IGL;
"!=" return DIF;
"=" return ATR;
";" return PEV;
"," return VIR;
"(" return APR;
")" return FPR;
"[" return ACL;
"]" return FCL;
"{" return ACH;
"}" return FCH;
[\n] {lineno++;}
[ \t]+
. return ERR;
%%
TokenType getToken(void)
{
static int firstTime = TRUE;
TokenType currentToken;
if (firstTime)
{
firstTime = FALSE;
lineno++;
yyin = source;
yyout = listing;
}
currentToken = yylex();
strncpy(tokenString,yytext,MAXTOKENLEN);
if (TraceScan)
{
fprintf(listing,"\t%d: ",lineno);
printToken(0, currentToken,tokenString);
}
return currentToken;
}