-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflex.l
55 lines (51 loc) · 1.16 KB
/
flex.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
%{
#include <stdio.h>
#include <stdlib.h>
#include "epic_bison.tab.h"
extern YYSTYPE yylval;
int linenumber = 1;
%}
digit [0-9]
number [0-9]+
floating [0-9]+\.[0-9]+
letter [a-zA-Z]
letter2 [a-zA-Z_]
id [a-zA-Z][a-zA-Z_0-9]*
%%
"int" {return(INT); }
"float" {return(FLOAT); }
"while" {return(WHILE); }
"do" {return(DO); }
"if" {return(IF); }
"else" {return(ELSE); }
"for" {return(FOR); }
"return" { return(RETURN); }
{number} { yylval.ivalue = atoi(yytext); return(INTNUM); }
{floating} { yylval.fvalue = atoi(yytext); return(FLOATNUM); }
{id} {yylval.string = strdup(yytext); return(ID); }
"*" {return(MULT); }
"/" {return(DIV); }
"+" {return(PLUS); }
"-" {return(MINUS); }
"<" {return(LT); }
"<=" {return(LE); }
">" {return(GT); }
">=" {return(GE); }
"==" {return(EQ); }
"!=" {return(NE); }
"=" {return(ASSIGN); }
"(" {return(LPARENT); }
")" {return(RPARENT); }
"{" {return(LFANCYBRACKET); }
"}" {return(RFANCYBRACKET); }
"[" {return(LBRACKET); }
"]" {return(RBRACKET); }
";" {return(SEMICOLON); }
"," {return(COLON); }
[ \t\r] {/* skip whitespace*/ }
[\n] { linenumber++; }
%%
void yyerror(char * str)
{
fprintf(stderr, "%s in line %d\n", str, linenumber);
}