From b84831bf768dd31fd9584df06d62f0e34bf0bcfa Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Wed, 2 Sep 2015 22:03:00 +0200 Subject: [PATCH] [Poincare] Parse exponentiation --- poincare/src/expression_lexer.l | 1 + poincare/src/expression_parser.y | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/poincare/src/expression_lexer.l b/poincare/src/expression_lexer.l index 4bdc4de27..ab5fc8593 100644 --- a/poincare/src/expression_lexer.l +++ b/poincare/src/expression_lexer.l @@ -50,6 +50,7 @@ [0-9]+ { yylval->string = yytext; return(INTEGER); } \/ { return(DIVIDE); } +\^ { return(POW); } %% diff --git a/poincare/src/expression_parser.y b/poincare/src/expression_parser.y index 3ca7b93bb..884fed7d5 100644 --- a/poincare/src/expression_parser.y +++ b/poincare/src/expression_parser.y @@ -56,8 +56,9 @@ void poincare_expression_yyerror(yyscan_t scanner, Expression ** expressionOutpu /* The INTEGER token uses the "string" part of the union to store its value */ %token INTEGER -/* The DIVIDE token uses no value */ +/* The DIVIDE and POW tokens use no value */ %token DIVIDE +%token POW /* The "exp" symbol uses the "expression" part of the union. */ %type exp; @@ -88,8 +89,10 @@ Root: *expressionOutput = $1; } -exp: INTEGER { $$ = new Number($1); } - | exp DIVIDE exp { $$ = new Fraction($1,$3); } +exp: + INTEGER { $$ = new Number($1); } + | exp DIVIDE exp { $$ = new Fraction($1,$3); } + | exp POW exp { $$ = new Power($1,$3); } ; /*