From 59adbfed0dcf57b15d9a48d00e85d15371bf371e Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Mon, 30 Sep 2019 19:28:20 +0200 Subject: [PATCH] Fix grammar for expression_list Grammar was incorrect in the sens that in `` let f : R -> R, x -> (x+3)*2; `` `(x+3)*2` was interpreted as an expression_list multiplied by 2 instead of the single expression `(x+3)*2`. Expression list now requires at least two elements. Also, allow to grammar now support function calls with multiple parameters. --- src/language/PEGGrammar.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/language/PEGGrammar.hpp b/src/language/PEGGrammar.hpp index f45d46ccb..6ab533b41 100644 --- a/src/language/PEGGrammar.hpp +++ b/src/language/PEGGrammar.hpp @@ -131,7 +131,8 @@ struct close_parent : seq< one< ')' >, ignored > {}; struct expression; struct parented_expression : if_must< open_parent, expression, close_parent > {}; -struct function_evaluation : seq< NAME, parented_expression > {}; +struct expression_list; +struct function_evaluation : seq< NAME, sor< expression_list, parented_expression > > {}; struct primary_expression : sor< BOOL, REAL, INTEGER, LITERAL, function_evaluation, NAME, parented_expression > {}; @@ -208,7 +209,7 @@ struct type_expression : list_must< TYPESPECIFIER, one< '*' > >{}; struct type_mapping : seq< type_expression, RIGHT_ARROW, type_expression >{}; struct name_list : seq< open_parent, list_must< NAME, COMMA >, close_parent >{}; -struct expression_list : seq< open_parent, list_must< expression, COMMA >, close_parent >{}; +struct expression_list : seq< open_parent, expression, plus< if_must< COMMA, expression > >, close_parent >{}; struct function_definition : seq< sor< name_list, NAME >, RIGHT_ARROW, sor< expression_list, expression > >{}; -- GitLab