Improve minus operator
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ class Factor(Valuable):
|
||||
class NotOperator(UnaryOperator):
|
||||
pass
|
||||
|
||||
|
||||
class Loop(BinaryOperator):
|
||||
pass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user