%option noinput %option nounput %{ #include #include "ast.h" #include "y.tab.h" extern YYSTYPE yylval; %} %% if return IF; else return ELSE; while return WHILE; var return VAR; true { yylval.expr = expr_bool(true); return BOOL; } false { yylval.expr = expr_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 DOT; , return COMMA; '([^']|\\[abtnvfr]|\\x[0-9a-fA-F]{2})' { yylval.expr = expr_char(yytext); return CHAR; } [0-9]+ { yylval.expr = expr_int(atoi(yytext)); return INTEGER; } [_a-zA-Z][_a-zA-Z0-9]* { yylval.ident = safe_strdup(yytext); return IDENT; } [ \n\t] ; %%