|
|
|
@ -8,10 +8,8 @@
|
|
|
|
|
#include "parse_driver.hpp"
|
|
|
|
|
#include "parser.hpp"
|
|
|
|
|
|
|
|
|
|
yy::parser::location_type location;
|
|
|
|
|
|
|
|
|
|
#define YY_EXTRA_TYPE parse_driver*
|
|
|
|
|
#define YY_USER_ACTION location.step(); location.columns(yyleng);
|
|
|
|
|
#define YY_USER_ACTION drv.location.step(); drv.location.columns(yyleng);
|
|
|
|
|
#define YY_INPUT(buf,result,max_size) \
|
|
|
|
|
{ \
|
|
|
|
|
int c = yyextra->get(); \
|
|
|
|
@ -21,30 +19,30 @@ yy::parser::location_type location;
|
|
|
|
|
|
|
|
|
|
%%
|
|
|
|
|
|
|
|
|
|
\n { location.lines(); }
|
|
|
|
|
\n { drv.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); }
|
|
|
|
|
<<EOF>> { return yy::parser::make_YYEOF(location); }
|
|
|
|
|
\\ { return yy::parser::make_BACKSLASH(drv.location); }
|
|
|
|
|
\+ { return yy::parser::make_PLUS(drv.location); }
|
|
|
|
|
\* { return yy::parser::make_TIMES(drv.location); }
|
|
|
|
|
- { return yy::parser::make_MINUS(drv.location); }
|
|
|
|
|
\/ { return yy::parser::make_DIVIDE(drv.location); }
|
|
|
|
|
[0-9]+ { return yy::parser::make_INT(atoi(yytext), drv.location); }
|
|
|
|
|
defn { return yy::parser::make_DEFN(drv.location); }
|
|
|
|
|
data { return yy::parser::make_DATA(drv.location); }
|
|
|
|
|
case { return yy::parser::make_CASE(drv.location); }
|
|
|
|
|
of { return yy::parser::make_OF(drv.location); }
|
|
|
|
|
let { return yy::parser::make_LET(drv.location); }
|
|
|
|
|
in { return yy::parser::make_IN(drv.location); }
|
|
|
|
|
\{ { return yy::parser::make_OCURLY(drv.location); }
|
|
|
|
|
\} { return yy::parser::make_CCURLY(drv.location); }
|
|
|
|
|
\( { return yy::parser::make_OPAREN(drv.location); }
|
|
|
|
|
\) { return yy::parser::make_CPAREN(drv.location); }
|
|
|
|
|
, { return yy::parser::make_COMMA(drv.location); }
|
|
|
|
|
-> { return yy::parser::make_ARROW(drv.location); }
|
|
|
|
|
= { return yy::parser::make_EQUAL(drv.location); }
|
|
|
|
|
[a-z][a-zA-Z]* { return yy::parser::make_LID(std::string(yytext), drv.location); }
|
|
|
|
|
[A-Z][a-zA-Z]* { return yy::parser::make_UID(std::string(yytext), drv.location); }
|
|
|
|
|
<<EOF>> { return yy::parser::make_YYEOF(drv.location); }
|
|
|
|
|
|
|
|
|
|
%%
|
|
|
|
|
|
|
|
|
|