%option noinput %option nounput %{ #include #include "ast.h" #define YYSTYPE struct ast * #include "y.tab.h" extern YYSTYPE yylval; %} %% if return IF; else return ELSE; while return WHILE; var return VAR; true { yylval = ast_bool(true); return BOOL; } false { yylval = ast_bool(false); return BOOL; } return return RETURN; = return ASSIGN; ! return INVERSE; \|\| return BINOR; && return BINAND; == return EQ; != return NEQ; \<= return GEQ; \< return GE; >= return LEQ; > return LE; : return CONS; \+ return PLUS; - return MINUS; \* return TIMES; \/ return DIVIDE; % return MODULO; \^ return POWER; \( return BOPEN; \) return BCLOSE; \{ return COPEN; \} return CCLOSE; \; return SEMICOLON; \[\] return NIL; , return COMMA; '([^']|\\[abtnvfr]|\\x[0-9a-fA-F]{2})' { yylval = ast_char(yytext); return CHAR; } [0-9]+ { yylval = ast_int(atoi(yytext)); return INTEGER; } [_a-zA-Z][_a-zA-Z0-9]* { yylval = ast_ident(yytext); return IDENT; } [ \n\t] ; %%