diff --git a/poincare/src/expression_lexer.l b/poincare/src/expression_lexer.l index 95543a957..f01cb13e8 100644 --- a/poincare/src/expression_lexer.l +++ b/poincare/src/expression_lexer.l @@ -106,7 +106,7 @@ Y3 { *yylval = Poincare::Symbol(yytext, yyleng); return FINAL_SYMBOL; } acos { *yylval = ArcCosine(); return FUNCTION; } acosh { *yylval = HyperbolicArcCosine(); return FUNCTION; } abs { *yylval = AbsoluteValue(); return FUNCTION; } -ans { *yylval = Poincare::Symbol(yytext, yyleng); return SYMBOL; } +ans { *yylval = Poincare::Symbol(yytext, yyleng); return FINAL_SYMBOL; } arg { *yylval = ComplexArgument(); return FUNCTION; } asin { *yylval = ArcSine(); return FUNCTION; } asinh { *yylval = HyperbolicArcSine(); return FUNCTION; } @@ -151,9 +151,9 @@ trace { *yylval = MatrixTrace(); return FUNCTION; } transpose { *yylval = MatrixTranspose(); return FUNCTION; } undef { *yylval = Undefined(); return TERM; } inf { *yylval = Infinity(false); return TERM; } -\x8a { *yylval = Poincare::Symbol(yytext[0]); return SYMBOL; } -\x8c { *yylval = Poincare::Symbol(yytext[0]); return SYMBOL; } -\x8f { *yylval = Poincare::Symbol(yytext[0]); return SYMBOL; } +\x8a { *yylval = Poincare::Symbol(yytext[0]); return FINAL_SYMBOL; } /* Pi */ +\x8c { *yylval = Poincare::Symbol(yytext[0]); return FINAL_SYMBOL; } /* I complex */ +\x8f { *yylval = Poincare::Symbol(yytext[0]); return FINAL_SYMBOL; } /* Exponential */ \x90 { return STO; } \x91 { *yylval = SquareRoot(); return FUNCTION; } = { return EQUAL; } diff --git a/poincare/src/expression_parser.y b/poincare/src/expression_parser.y index fbfe4578e..2d56703be 100644 --- a/poincare/src/expression_parser.y +++ b/poincare/src/expression_parser.y @@ -115,14 +115,14 @@ number : DIGITS { $$ = $1; } ; symb : SYMBOL { $$ = $1; } - | FINAL_SYMBOL { $$ = $1; } + | SYMBOL LEFT_PARENTHESIS lstData RIGHT_PARENTHESIS { if ($3.numberOfChildren() != 1) { YYERROR; } ; $$ = Function(static_cast($1).name(), $3.childAtIndex(0)); } ; term : TERM { $$ = $1; } | symb { $$ = $1; } + | FINAL_SYMBOL { $$ = $1; } | number { $$ = $1; } | LOGFUNCTION UNDERSCORE LEFT_BRACE exp RIGHT_BRACE LEFT_PARENTHESIS exp RIGHT_PARENTHESIS { $$ = Logarithm($7, $4); } - | SYMBOL LEFT_PARENTHESIS lstData RIGHT_PARENTHESIS { if ($3.numberOfChildren() != 1) { YYERROR; } ; $$ = Function(static_cast($1).name(), $3.childAtIndex(0)); } | FUNCTION LEFT_PARENTHESIS lstData RIGHT_PARENTHESIS { $$ = $1; if ($$.numberOfChildren() != ($3.numberOfChildren())) { YYERROR; } ; $$.setChildrenInPlace($3); } /* Special case for logarithm, as we do not at first if it needs 1 or 2 children */ | LOGFUNCTION LEFT_PARENTHESIS lstData RIGHT_PARENTHESIS { if ($3.numberOfChildren() == 1) { $$ = Logarithm($3.childAtIndex(0)); } else if ($3.numberOfChildren() == 2) { $$ = Logarithm($3.childAtIndex(0), $3.childAtIndex(1));} else { YYERROR; } ; }