Improve minus operator

This commit is contained in:
Bartłomiej Pluta
2019-07-12 00:51:37 +02:00
parent 28f32ea3d0
commit 0cefcd282b
2 changed files with 21 additions and 4 deletions

View File

@@ -1,7 +1,7 @@
from smnp.ast.node.atom import AtomParser
from smnp.ast.node.list import ListParser
from smnp.ast.node.map import MapParser
from smnp.ast.node.operator import BinaryOperator
from smnp.ast.node.operator import BinaryOperator, UnaryOperator, Operator
from smnp.ast.node.valuable import Valuable
from smnp.ast.parser import Parser
from smnp.token.type import TokenType
@@ -11,17 +11,33 @@ class Chain(Valuable):
pass
class MinusOperator(UnaryOperator):
pass
def ChainParser(input):
itemParser = Parser.oneOf(
chain1 = Parser.oneOf(
ListParser,
MapParser,
AtomParser,
)
minusOperator = Parser.allOf(
Parser.terminal(TokenType.MINUS, createNode=Operator.withValue),
chain1,
createNode=MinusOperator.withValues,
name="minus"
)
chain2 = Parser.oneOf(
minusOperator,
chain1
)
return Parser.leftAssociativeOperatorParser(
itemParser,
chain2,
[TokenType.DOT],
itemParser,
chain2,
lambda left, op, right: Chain.withValue(BinaryOperator.withValues(left, op, right))
)(input)

View File

@@ -12,6 +12,7 @@ class Factor(Valuable):
class NotOperator(UnaryOperator):
pass
class Loop(BinaryOperator):
pass