From b4c91d2dd4e3ed883c5930fc0ffbb267250f89f5 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Mon, 13 Apr 2020 23:17:34 -0700 Subject: [PATCH] Adjust grammar to allow for broader range of type inputs. --- code/compiler/11/parser.y | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/code/compiler/11/parser.y b/code/compiler/11/parser.y index 81ef4ac..8160358 100644 --- a/code/compiler/11/parser.y +++ b/code/compiler/11/parser.y @@ -41,7 +41,7 @@ extern yy::parser::symbol_type yylex(); %type > branches %type > constructors %type > typeList -%type type nullaryType +%type type nullaryType typeListElement %type aAdd aMul case app appBase %type data %type defn @@ -146,12 +146,18 @@ type ; nullaryType - : OPAREN UID typeList CPAREN { $$ = parsed_type_ptr(new parsed_type_app(std::move($2), std::move($3))); } - | UID { $$ = parsed_type_ptr(new parsed_type_app(std::move($1), { })); } + : UID typeList { $$ = parsed_type_ptr(new parsed_type_app(std::move($1), std::move($2))); } + | LID { $$ = parsed_type_ptr(new parsed_type_var(std::move($1))); } + | OPAREN type CPAREN { $$ = std::move($2); } + ; + +typeListElement + : OPAREN type CPAREN { $$ = std::move($2); } + | UID { $$ = parsed_type_ptr(new parsed_type_app(std::move($1), {})); } | LID { $$ = parsed_type_ptr(new parsed_type_var(std::move($1))); } ; typeList : %empty { $$ = std::vector(); } - | typeList type { $$ = std::move($1); $$.push_back(std::move($2)); } + | typeList typeListElement { $$ = std::move($1); $$.push_back(std::move($2)); } ;