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); } ; /*