Do some refactor with multiple left associative operators

This commit is contained in:
Bartłomiej Pluta
2019-07-10 15:25:00 +02:00
parent 0a7d29d4a1
commit e008be7952
6 changed files with 52 additions and 27 deletions

View File

@@ -1,6 +1,7 @@
from smnp.ast.node.ignore import IgnoredNode
from smnp.ast.node.model import ParseResult, Node
from smnp.ast.node.none import NoneNode
from smnp.ast.node.operator import OperatorNode
from smnp.error.syntax import SyntaxException
@@ -99,11 +100,12 @@ class Parser:
left = leftParser(input)
oneAtLeast = False
if left.result:
while Parser.terminalParser(operatorTokenType)(input).result:
operator = Parser.terminalParser(operatorTokenType, lambda val, pos: OperatorNode.withChildren([val], pos))(input)
while operator.result:
oneAtLeast = True
right = rightParser(input)
left = ParseResult.OK(createNode(left.node, right.node))
left = ParseResult.OK(createNode(left.node, operator.node, right.node))
operator = Parser.terminalParser(operatorTokenType)(input)
if oneAtLeast:
return left