From ebb9b040a06c2a458c2945111e3d1180a017331d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Tue, 23 Oct 2018 14:03:29 +0200 Subject: [PATCH] [poincare] Parser error on "2->f(3)" --- poincare/src/expression_parser.y | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/poincare/src/expression_parser.y b/poincare/src/expression_parser.y index e04253ff5..cb334faaf 100644 --- a/poincare/src/expression_parser.y +++ b/poincare/src/expression_parser.y @@ -115,11 +115,14 @@ number : DIGITS { $$ = $1; } | DIGITS DIGITS { YYERROR; } ; -symb : SYMBOL LEFT_PARENTHESIS lstData RIGHT_PARENTHESIS %prec SYMBOL_TO_FUNCTION { if ($3.numberOfChildren() != 1) { YYERROR; } ; $$ = Function(static_cast($1).name(), $3.childAtIndex(0)); } - | SYMBOL { $$ = $1; } +func : SYMBOL LEFT_PARENTHESIS lstData RIGHT_PARENTHESIS %prec SYMBOL_TO_FUNCTION { if ($3.numberOfChildren() != 1) { YYERROR; } ; $$ = Function(static_cast($1).name(), $3.childAtIndex(0)); } + ; + +symb : SYMBOL { $$ = $1; } ; term : TERM { $$ = $1; } + | func { $$ = $1; } | symb { $$ = $1; } | FINAL_SYMBOL { $$ = $1; } | number { $$ = $1; } @@ -157,6 +160,7 @@ exp : pow { $$ = $1; } final_exp : exp { $$ = $1; } | exp STO symb { if (static_cast($3).name() == Symbol::k_ans) { YYERROR; } ; $$ = Store($1, static_cast($3)); } + | exp STO func { if ($3.childAtIndex(0).type() != ExpressionNode::Type::Symbol) { YYERROR; } ; $$ = Store($1, static_cast($3)); } | exp EQUAL exp { $$ = Equal($1, $3); } ; %%