blob: 40f619608b8d984f5291de5e19ee0fc5c8cfc957 (
plain)
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
|
/*** definition section ***/
%{
/* C to be copied verbatim */
#include "parser.h"
%}
/* read only one input file */
%option noyywrap
%option yylineno
DIGIT [0-9]
PREID [a-zA-Z_]
PSTID [a-zA-Z0-9_]
/*** rules section ***/
%%
"(" {return L_PAREN;}
")" {return R_PAREN;}
"{" {return L_BRACK;}
"}" {return R_BRACK;}
";" {return SEMI_COL;}
"~" {return COMP;}
"*" {return MULT;}
"/" {return DIV;}
"%" {return MOD;}
"-" {return MINUS;}
"+" {return PLUS;}
"int" {return INT;}
"void" {return VOID;}
"return" {return RET;}
{PREID}{PSTID}* {
yylval.sval = strdup(yytext);
return WORD;
}
{DIGIT}+ {yylval.ival = atol(yytext); return NUMBER;}
{PSTID}+ {
printf("Error at line %d: invalid identifier \"%s\"\n", yylineno, yytext);
return YYerror;
}
[[:space:]]+ {/* discard */}
. {
printf("Error at line %d: unrecognized symbol \"%s\"\n", yylineno, yytext);
return YYerror;
}
%%
/*** C section ***/
|