diff --git a/poincare/src/parsing/parser.cpp b/poincare/src/parsing/parser.cpp index 0deb8082e..6f23389a5 100644 --- a/poincare/src/parsing/parser.cpp +++ b/poincare/src/parsing/parser.cpp @@ -160,7 +160,12 @@ void Parser::parseNumber(Expression & leftHandSide, Token::Type stoppingType) { void Parser::parsePlus(Expression & leftHandSide, Token::Type stoppingType) { Expression rightHandSide; if (parseBinaryOperator(leftHandSide, rightHandSide, Token::Plus)) { - leftHandSide = Addition::Builder(leftHandSide, rightHandSide); + if (leftHandSide.type() == ExpressionNode::Type::Addition) { + int childrenCount = leftHandSide.numberOfChildren(); + static_cast(leftHandSide).addChildAtIndexInPlace(rightHandSide, childrenCount, childrenCount); + } else { + leftHandSide = Addition::Builder(leftHandSide, rightHandSide); + } } } @@ -191,7 +196,12 @@ void Parser::parseMinus(Expression & leftHandSide, Token::Type stoppingType) { void Parser::parseTimes(Expression & leftHandSide, Token::Type stoppingType) { Expression rightHandSide; if (parseBinaryOperator(leftHandSide, rightHandSide, Token::Times)) { - leftHandSide = MultiplicationExplicite::Builder(leftHandSide, rightHandSide); + if (leftHandSide.type() == ExpressionNode::Type::MultiplicationExplicite) { + int childrenCount = leftHandSide.numberOfChildren(); + static_cast(leftHandSide).addChildAtIndexInPlace(rightHandSide, childrenCount, childrenCount); + } else { + leftHandSide = MultiplicationExplicite::Builder(leftHandSide, rightHandSide); + } } }