[poincare/parser] Store only in user-defined variables and functions

This commit is contained in:
Léa Saviot
2018-09-27 13:26:20 +02:00
committed by Émilie Feral
parent 46427c59dd
commit a49e5801c3
2 changed files with 6 additions and 6 deletions

View File

@@ -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; }

View File

@@ -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<Symbol&>($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<Symbol&>($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; } ; }