%{ #include #include "syntax_tree.h" #include "y.tab.h" /* defined in pc.y (pc.c) */ extern YYSTYPE yylval; /* defined in syntax_tree.c */ extern Tree mkNum(int); extern Tree mkStr(char *); extern Tree mkSym(char *); %} s [ \t\r\n] n [0-9] a [A-Za-z] an ({a}|{n}) %% {s}+ { } var { return VAR; } return { return RETURN; } if { return IF; } else { return ELSE; } while { return WHILE; } "==" { return EQEQ; } "!=" { return EXEQ; } "<=" { return LTEQ; } ">=" { return GTEQ; } {n}+ { yylval = mkNum(atoi(yytext)); return NUM; } (['][^'\n]*['])+ {yylval = mkStr(strdup(yytext)); return STR; } {a}{an}* { yylval = mkSym(strndup(yytext,8)); return SYM; } . { return yytext[0]; } ^"//".*$ { } %% int yywrap() { return 1; }