[poincare] Some level of 1.2E3 support

Change-Id: I9618967de161a553ae35ec6dbcf1486c16dadb0d
This commit is contained in:
Romain Goyet
2016-12-20 17:45:46 +01:00
parent 47b16a06dc
commit 86e33b8fdb
2 changed files with 19 additions and 13 deletions

View File

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

View File

@@ -43,7 +43,6 @@ void poincare_expression_yyerror(Expression ** expressionOutput, char const *msg
%token <function> 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; }