-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathproj.l
88 lines (79 loc) · 2.32 KB
/
proj.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
digits [0-9]
num [0-9]+(\.[0-9]+)?([Ee][\+|\-]?[0-9]+)?
integer [0-9]+
string (\".*\"|\'.*\')
divideequal \/=
mulequal \*=
minusequal \-=
equal =
plusequal \+=
plus \+
minus \-
divide \/
mul \*
special_start \(
special_end \)
alpha [a-zA-Z]
%{
#include<stdio.h>
#include"y.tab.h"
#include<string.h>
extern YYSTYPE yylval;
int t = 1;
int n = 0;
%}
%option yylineno
%%
#(.*)(\n)
(''')(.*\n)*(.*)(''')
if {return IF;}
else {return ELSE;}
while {return WHILE;}
True {yylval=strdup(yytext);return T;}
False { yylval=strdup(yytext);return F;}
{plus} { yylval=strdup(yytext);return PLUS;}
{minus} { return MINUS;}
{mul} { return MUL;}
{divide} { return DIVIDE;}
{equal} { return EQUAL;}
{plusequal} { return PLUSEQUAL;}
{divideequal} { return DIVIDEEQUAL;}
{mulequal} { return MULEQUAL;}
{minusequal} { return MINUSEQUAL;}
{special_start} { return SPECIAL_START;}
{special_end} { return SPECIAL_END;}
(\n) { return NL;}
or { return OR;}
and { return AND;}
not { return NOT;}
in { return IN;}
not\ in { return NOTIN;}
\< { return LESSTHAN;}
\<= { return LESSTHANEQUAL;}
\>= { return GREATERTHANEQUAL;}
\> { return GREATERTHAN;}
\== { return DOUBLEEQUAL;}
\!= { return NOTEQUAL;}
: { return COLON;}
\[ { return SQUAREBRACKET_START;}
\] { return SQUAREBRACKET_END;}
\% { return MOD;}
sep { return SEP;}
end {printf("end" );return END;}
print { return PRINT;}
range { return RANGE;}
list { return LIST;}
[a-zA-Z_][_a-zA-Z0-9]* { yylval=strdup(yytext);return ID;}
{string} { yylval=strdup(yytext);return STRING;}
{integer} { yylval=strdup(yytext);return INTEGER;}
{num} { yylval=strdup(yytext);return NUM;}
[0-9;!,@#]*/(({alpha}|"_")({alpha}|{digits}|"_")*)
\' { return SINGLEQUOTE;}
\" { return DOUBLEQUOTE;}
\*\* { return EXPONENTIAL;}
, { return COMMA;}
\t { return INDENT;}
%%
int yywrap() {
return 1;
}