Files
smnp-py/smnp/ast/node/unit.py
Bartłomiej Pluta 0435bc776e Rename Chain to Unit
2019-07-12 16:00:39 +02:00

38 lines
927 B
Python

from smnp.ast.node.atom import AtomParser
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
class Unit(Valuable):
pass
class MinusOperator(UnaryOperator):
pass
def UnitParser(input):
minusOperator = Parser.allOf(
Parser.terminal(TokenType.MINUS, createNode=Operator.withValue),
Parser.doAssert(AtomParser, "atom"),
createNode=MinusOperator.withValues,
name="minus"
)
atom2 = Parser.oneOf(
minusOperator,
AtomParser,
name="atom2"
)
return Parser.leftAssociativeOperatorParser(
atom2,
[TokenType.DOT],
Parser.doAssert(atom2, "atom"),
createNode=lambda left, op, right: Unit.withValue(BinaryOperator.withValues(left, op, right)),
name="unit"
)(input)