From 1ee6c58a97470ac71f0aed21a0b9696ad0c7a378 Mon Sep 17 00:00:00 2001 From: Felix Raimundo Date: Fri, 18 Mar 2016 15:46:08 +0100 Subject: [PATCH] Add associativity rules to the lexer Change-Id: I684264a4bec04567a2edc9fcb1b418d517a552a2 --- poincare/src/expression_parser.y | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/poincare/src/expression_parser.y b/poincare/src/expression_parser.y index 78470dc45..6727e860d 100644 --- a/poincare/src/expression_parser.y +++ b/poincare/src/expression_parser.y @@ -49,15 +49,22 @@ void poincare_expression_yyerror(yyscan_t scanner, Expression ** expressionOutpu %token INTEGER %token SYMBOL +/* Operator tokens */ %token PLUS %token MINUS %token MULTIPLY %token DIVIDE %token POW - %token LEFT_PARENTHESIS %token RIGHT_PARENTHESIS +/* Make the operators left associative. + * This makes 1 - 2 - 5’ be ‘(1 - 2) - 5’ instead of ‘1 - (2 - 5)’. + * This makes 1 / 2 / 5’ be ‘(1 / 2) / 5’ instead of ‘1 / (2 / 5)’. + */ +%left '-' '+' +%left '*' '/' + /* The "exp" symbol uses the "expression" part of the union. */ %type exp;