%option noyywrap %{ #include #include "ast.hpp" #include "definition.hpp" #include "parser.hpp" yy::parser::location_type location; #define YY_DECL yy::parser::symbol_type yylex() #define YY_USER_ACTION location.step(); location.columns(yyleng); %} %% \n { location.lines(); } [ ]+ {} \\ { return yy::parser::make_BACKSLASH(location); } \+ { return yy::parser::make_PLUS(location); } \* { return yy::parser::make_TIMES(location); } - { return yy::parser::make_MINUS(location); } \/ { return yy::parser::make_DIVIDE(location); } [0-9]+ { return yy::parser::make_INT(atoi(yytext), location); } defn { return yy::parser::make_DEFN(location); } data { return yy::parser::make_DATA(location); } case { return yy::parser::make_CASE(location); } of { return yy::parser::make_OF(location); } let { return yy::parser::make_LET(location); } in { return yy::parser::make_IN(location); } \{ { return yy::parser::make_OCURLY(location); } \} { return yy::parser::make_CCURLY(location); } \( { return yy::parser::make_OPAREN(location); } \) { return yy::parser::make_CPAREN(location); } , { return yy::parser::make_COMMA(location); } -> { return yy::parser::make_ARROW(location); } = { return yy::parser::make_EQUAL(location); } [a-z][a-zA-Z]* { return yy::parser::make_LID(std::string(yytext), location); } [A-Z][a-zA-Z]* { return yy::parser::make_UID(std::string(yytext), location); } <> { return yy::parser::make_YYEOF(location); } %%