diff --git a/poincare/src/expression_lexer.l b/poincare/src/expression_lexer.l index 365c82203..30b8db9d1 100644 --- a/poincare/src/expression_lexer.l +++ b/poincare/src/expression_lexer.l @@ -77,24 +77,25 @@ */ [0-9]+ { poincare_expression_yylval.string = yytext; return DIGITS; } +E { return EE; } [A-Zxntab] { poincare_expression_yylval.character = yytext[0]; return SYMBOL; } ans { poincare_expression_yylval.character = Symbol::Ans; return SYMBOL; } sin { poincare_expression_yylval.expression = new Sine(); return FUNCTION; } cos { poincare_expression_yylval.expression = new Cosine(); return FUNCTION; } tan { poincare_expression_yylval.expression = new Tangent(); return FUNCTION; } log { poincare_expression_yylval.expression = new Logarithm(); return FUNCTION; } -\+ { return(PLUS); } -\- { return(MINUS); } -\* { return(MULTIPLY); } -\/ { return(DIVIDE); } -\^ { return(POW); } -\( { return(LEFT_PARENTHESIS); } -\) { return(RIGHT_PARENTHESIS); } -\{ { return(LEFT_BRACE); } -\} { return(RIGHT_BRACE); } -\[ { return(LEFT_BRACKET); } -\] { return(RIGHT_BRACKET); } -\, { return(COMMA); } +\+ { return PLUS; } +\- { return MINUS; } +\* { return MULTIPLY; } +\/ { return DIVIDE; } +\^ { return POW; } +\( { return LEFT_PARENTHESIS; } +\) { return RIGHT_PARENTHESIS; } +\{ { return LEFT_BRACE; } +\} { return RIGHT_BRACE; } +\[ { return LEFT_BRACKET; } +\] { return RIGHT_BRACKET; } +\, { return COMMA; } \. { return DOT; } %% diff --git a/poincare/src/expression_parser.y b/poincare/src/expression_parser.y index 1e9eab8ce..c5d04185e 100644 --- a/poincare/src/expression_parser.y +++ b/poincare/src/expression_parser.y @@ -43,7 +43,6 @@ void poincare_expression_yyerror(Expression ** expressionOutput, char const *msg %token FUNCTION /* Operator tokens */ -%token DOT %token PLUS %token MINUS %token MULTIPLY @@ -56,6 +55,8 @@ void poincare_expression_yyerror(Expression ** expressionOutput, char const *msg %token LEFT_BRACKET %token RIGHT_BRACKET %token COMMA +%token DOT +%token EE /* Make the operators left associative. * This makes 1 - 2 - 5’ be ‘(1 - 2) - 5’ instead of ‘1 - (2 - 5)’. @@ -105,6 +106,10 @@ number: | MINUS DIGITS { $$ = new Integer($2, true); } | DIGITS DOT DIGITS { $$ = new Float($1, false, $3, nullptr, false); } | MINUS DIGITS DOT DIGITS { $$ = new Float($2, true, $4, nullptr, false); } + | DIGITS DOT DIGITS EE DIGITS { $$ = new Float($1, false, $3, $5, false); } + | MINUS DIGITS DOT DIGITS EE DIGITS { $$ = new Float($2, true, $4, $6, false); } + | DIGITS DOT DIGITS EE MINUS DIGITS { $$ = new Float($1, false, $3, $6, true); } + | MINUS DIGITS DOT DIGITS EE MINUS DIGITS { $$ = new Float($2, true, $4, $7, true); } exp: number { $$ = $1; }