|
|
|
@ -22,6 +22,9 @@ using yyscan_t = void*; |
|
|
|
|
%token TIMES |
|
|
|
|
%token MINUS |
|
|
|
|
%token DIVIDE |
|
|
|
|
%token MODULO |
|
|
|
|
%token EQUALS |
|
|
|
|
%token LESS_EQUALS |
|
|
|
|
%token <int> INT |
|
|
|
|
%token DEFN |
|
|
|
|
%token DATA |
|
|
|
@ -51,7 +54,7 @@ using yyscan_t = void*; |
|
|
|
|
%type <std::vector<parsed_type_ptr>> typeList |
|
|
|
|
%type <definition_group> definitions |
|
|
|
|
%type <parsed_type_ptr> type nonArrowType typeListElement |
|
|
|
|
%type <ast_ptr> aAdd aMul case let lambda app appBase |
|
|
|
|
%type <ast_ptr> aEq aAdd aMul case let lambda app appBase |
|
|
|
|
%type <definition_data_ptr> data |
|
|
|
|
%type <definition_defn_ptr> defn |
|
|
|
|
%type <branch_ptr> branch |
|
|
|
@ -73,7 +76,7 @@ definitions |
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
defn |
|
|
|
|
: DEFN LID lowercaseParams EQUAL OCURLY aAdd CCURLY |
|
|
|
|
: DEFN LID lowercaseParams EQUAL OCURLY aEq CCURLY |
|
|
|
|
{ $$ = definition_defn_ptr( |
|
|
|
|
new definition_defn(std::move($2), std::move($3), std::move($6), @$)); } |
|
|
|
|
; |
|
|
|
@ -83,6 +86,12 @@ lowercaseParams |
|
|
|
|
| lowercaseParams LID { $$ = std::move($1); $$.push_back(std::move($2)); } |
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
aEq |
|
|
|
|
: aAdd EQUALS aAdd { $$ = ast_ptr(new ast_binop(EQUALS, std::move($1), std::move($3), @$)); } |
|
|
|
|
| aAdd LESS_EQUALS aAdd { $$ = ast_ptr(new ast_binop(LESS_EQUALS, std::move($1), std::move($3), @$)); } |
|
|
|
|
| aAdd { $$ = std::move($1); } |
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
aAdd |
|
|
|
|
: aAdd PLUS aMul { $$ = ast_ptr(new ast_binop(PLUS, std::move($1), std::move($3), @$)); } |
|
|
|
|
| aAdd MINUS aMul { $$ = ast_ptr(new ast_binop(MINUS, std::move($1), std::move($3), @$)); } |
|
|
|
@ -92,6 +101,7 @@ aAdd |
|
|
|
|
aMul |
|
|
|
|
: aMul TIMES app { $$ = ast_ptr(new ast_binop(TIMES, std::move($1), std::move($3), @$)); } |
|
|
|
|
| aMul DIVIDE app { $$ = ast_ptr(new ast_binop(DIVIDE, std::move($1), std::move($3), @$)); } |
|
|
|
|
| aMul MODULO app { $$ = ast_ptr(new ast_binop(MODULO, std::move($1), std::move($3), @$)); } |
|
|
|
|
| app { $$ = std::move($1); } |
|
|
|
|
; |
|
|
|
|
|
|
|
|
@ -104,7 +114,7 @@ appBase |
|
|
|
|
: INT { $$ = ast_ptr(new ast_int($1, @$)); } |
|
|
|
|
| LID { $$ = ast_ptr(new ast_lid(std::move($1), @$)); } |
|
|
|
|
| UID { $$ = ast_ptr(new ast_uid(std::move($1), @$)); } |
|
|
|
|
| OPAREN aAdd CPAREN { $$ = std::move($2); } |
|
|
|
|
| OPAREN aEq CPAREN { $$ = std::move($2); } |
|
|
|
|
| case { $$ = std::move($1); } |
|
|
|
|
| let { $$ = std::move($1); } |
|
|
|
|
| lambda { $$ = std::move($1); } |
|
|
|
|