-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsyntax.l
78 lines (76 loc) · 1.47 KB
/
syntax.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
%{
#include <stdlib.h>
#include "ast.h"
#include "syntax.tab.h"
%}
%option yylineno
PLUS "+"
ASTR "*"
MINUS "-"
COLON ":"
SEMICOLON ";"
COMMA ","
LP "("
RP ")"
LC "{"
RC "}"
INT [0-9]+
ID [A-Za-z_][A-Za-z0-9_]*
AND "&&"
AMP "&"
OR "||"
BANG "!"
EQUAL "=="
ASSGN "="
COMMENT \/\/[^\n]*\n
RETURN "return"
GOTO "goto"
IF "if"
ELSE "else"
MALLOC "malloc"
FREE "free"
INTTY "int"
BOOLTY "bool"
FUN "fun"
TRUE "true"
FALSE "false"
%%
{AND} { return AND; }
{AMP} { return AMP; }
{OR} { return OR; }
{BANG} { return BANG; }
{IF} { return IF; }
{ELSE} { return ELSE; }
{INTTY} { return INTTY; }
{BOOLTY} { return BOOLTY; }
{FUN} { return FUN; }
{COLON} { return COLON; }
{SEMICOLON} { return SEMICOLON; }
{COMMA} { return COMMA; }
{PLUS} { return PLUS; }
{ASTR} { return ASTR; }
{MINUS} { return MINUS; }
{EQUAL} { return EQUAL; }
{ASSGN} { return ASSGN; }
{LP} { return LP; }
{RP} { return RP; }
{LC} { return LC; }
{RC} { return RC; }
{RETURN} { return RETURN; }
{GOTO} { return GOTO; }
{FREE} { return FREE; }
{MALLOC} { return MALLOC; }
{TRUE} { return TRUE; }
{FALSE} { return FALSE; }
{ID} {
int n = strlen(yytext);
yylval.str = (char*)malloc((n + 1) * sizeof(char));
strncpy(yylval.str, yytext, n + 1);
return ID;
}
{INT} {yylval.num = atof(yytext); return INT;}
[ \t\n]+ ;
{COMMENT} ;
. {return yytext[0];}
%%
int yywrap() {return 1;}