+D [0-9]
+H [0-9a-fA-F]
+E ([0\\abtnvfr]|x{H}?{H}|0[0-3]?{O}?{O})
+I [a-zA-Z_]
+O [0-7]
+
%option noinput
%option nounput
%{
}
#include "ast.h"
-#include "y.tab.h"
+#include "parse.h"
%}
+%start IN_COMMENT
+
%%
+<INITIAL>{
+\/\* BEGIN(IN_COMMENT);
+[ \n\t] ;
+\/\/.*\n? ;
if return IF;
else return ELSE;
while return WHILE;
true { yylval.expr = expr_bool(true); return BOOL; }
false { yylval.expr = expr_bool(false); return BOOL; }
return return RETURN;
+Int return TINT;
+Bool return TBOOL;
+Char return TCHAR;
+Void return TVOID;
-> return ARROW;
= return ASSIGN;
! return INVERSE;
\[\] return NIL;
\. return DOT;
, return COMMA;
-'([^']|\\[abtnvfr]|\\x[0-9a-fA-F]{2})' {
- yylval.expr = expr_char(yytext); return CHAR; }
-[0-9]+ {
+\"([^\\"]|\\(\"|{E}))*\" {
+ yylval.expr = expr_string(trimquotes(yytext)); return STRING; }
+'([^\\']|\\('|{E}))' {
+ yylval.expr = expr_char(trimquotes(yytext)); return CHAR; }
+{D}+ {
yylval.expr = expr_int(atoi(yytext)); return INTEGER; }
-[_a-zA-Z][_a-zA-Z0-9]* {
+{I}({I}|{D})* {
yylval.ident = safe_strdup(yytext); return IDENT; }
-[ \n\t] ;
+}
+<IN_COMMENT>{
+\*\/ BEGIN(INITIAL);
+. ;
+}
%%