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.atom import AtomParser
from smnp.ast.node.list import ListParser from smnp.ast.node.list import ListParser
from smnp.ast.node.map import MapParser 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.node.valuable import Valuable
from smnp.ast.parser import Parser from smnp.ast.parser import Parser
from smnp.token.type import TokenType from smnp.token.type import TokenType
@@ -11,17 +11,33 @@ class Chain(Valuable):
pass pass
class MinusOperator(UnaryOperator):
pass
def ChainParser(input): def ChainParser(input):
itemParser = Parser.oneOf( chain1 = Parser.oneOf(
ListParser, ListParser,
MapParser, MapParser,
AtomParser, 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( return Parser.leftAssociativeOperatorParser(
itemParser, chain2,
[TokenType.DOT], [TokenType.DOT],
itemParser, chain2,
lambda left, op, right: Chain.withValue(BinaryOperator.withValues(left, op, right)) lambda left, op, right: Chain.withValue(BinaryOperator.withValues(left, op, right))
)(input) )(input)

View File

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