-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlang.flex
More file actions
78 lines (72 loc) · 1.98 KB
/
lang.flex
File metadata and controls
78 lines (72 loc) · 1.98 KB
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
%{
#include <stdio.h>
#include "analis.tab.h"
%}
%option noyywrap
%option yylineno
%option stack
DIGIT [0-9]
NAME [a-zA-Z][a-zA-Z0-9]*
QUOTE [\"]
STRINGCONST [a-zA-Z0-9]*
WS [ \t\n]+
WSN [ \t\n]*
%%
<INITIAL>
{
{DIGIT}+{WSN} { yylval.number = atoi(yytext); return NUMBER; }
{QUOTE}{STRINGCONST}{QUOTE}{WSN} { yylval.string = strdup(yytext); return STRINGCONST; }
"if"{WS} { return IF; }
"==>"{WS} { return THEN; }
"!=>"{WS} { return ELSE; }
"while"{WS} { return WHILE; }
"loop"{WS} { return LOOP; }
"pool"{WS} { return POOL; }
"block"{WS} { return BLOCK; }
"kcolb"{WS} { return KCOLB; }
"goto"{WS} { return GOTO; }
"write"{WSN}/"(" { return WRITE; }
"read"{WSN}/"(" { return READ; }
"string"{WSN} { return STRING; }
"integer"{WSN} { /*printf("INTEGER");*/ return INTEGER; }
"label"{WS} { return LABEL; }
"return"{WS} { return RETURN; }
"["{WSN} { return RECOPENBRACE; }
"]"{WSN} { return RECCLOSEBRACE; }
"<"{WSN} { return LT; }
"<="{WSN} { return LE; }
">"{WSN} { return GT; }
">="{WSN} { return GE; }
"=="{WSN} { return EQ; }
"!="{WSN} { return NE; }
"&&"{WSN} { return AND; }
"||"{WSN} { return OR; }
"!"{WSN} { return NOT; }
"+"{WSN} { return ADD; }
"-"{WSN} { return SUB; }
"*"{WSN} { return MUL; }
"/"{WSN} { return DIV; }
"->"{WSN} { return REF; }
":="{WSN} { /*printf("ASSIGN");*/ return ASSIGN; }
","{WSN} { /*printf("COMA");*/ return COMA; }
":"{WSN} { /*printf("COLON");*/ return COLON; }
";"{WSN} { /*printf("SEMICOLON");*/ return SEMICOLON; }
"("{WSN} { return OBRACE; }
")"{WSN} { return CBRACE; }
{NAME}{WSN} {
char *s = yytext;
while (1) {
if ((*yytext == ' ') || (*yytext == 0)) { break; }
yytext++;
}
*yytext = 0; yytext = s;
yylval.string = strdup(yytext); /*printf(yytext);*/ return NAME;
}
/*<<EOF>> { printf("EOF\n"); return EOFF; }*/
}
%%
/*int main()
{
yylex();
return 0;
}*/