%option noinput %option nounput %{ #include #define YY_USER_ACTION \ yylloc.first_line = yylloc.last_line; \ yylloc.first_column = yylloc.last_column; \ for(int i = 0; yytext[i] != '\0'; i++) { \ if(yytext[i] == '\n') { \ yylloc.last_line++; \ yylloc.last_column = 0; \ } \ else { \ yylloc.last_column++; \ } \ } #include "ast.h" #include "y.tab.h" %} %start IN_COMMENT %% { \/\* BEGIN(IN_COMMENT); [ \n\t] ; \/\/.*\n? ; 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; Int return TINT; Bool return TBOOL; Char return TCHAR; Void return TVOID; -> return ARROW; = 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 SOPEN; \] return SCLOSE; \[\] return NIL; \. return DOT; , return COMMA; \"([^\\"]|\\[\"0\\abtnvfr]|\\x[0-9a-fA-F][0-9a-fA-F])*\" { yylval.expr = expr_string(trimquotes(yytext)); return STRING; } '([^\\']|\\['0\\abtnvfr]|\\x[0-9a-fA-F][0-9a-fA-F])' { yylval.expr = expr_char(trimquotes(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; } } { \*\/ BEGIN(INITIAL); . ; } %%