Move list and map parsers to atom

This commit is contained in:
Bartłomiej Pluta
2019-07-12 15:11:36 +02:00
parent e43b0ad725
commit 916c8c69ef
2 changed files with 12 additions and 14 deletions

View File

@@ -76,10 +76,14 @@ def LiteralParser(input):
def AtomParser(input):
from smnp.ast.node.identifier import IdentifierParser
from smnp.ast.node.list import ListParser
from smnp.ast.node.map import MapParser
return Parser.oneOf(
LiteralParser,
IdentifierParser,
ListParser,
MapParser,
name="atom"
)(input)

View File

@@ -1,6 +1,4 @@
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, UnaryOperator, Operator
from smnp.ast.node.valuable import Valuable
from smnp.ast.parser import Parser
@@ -16,28 +14,24 @@ class MinusOperator(UnaryOperator):
def ChainParser(input):
chain1 = Parser.oneOf(
ListParser,
MapParser,
AtomParser,
)
minusOperator = Parser.allOf(
Parser.terminal(TokenType.MINUS, createNode=Operator.withValue),
chain1,
Parser.doAssert(AtomParser, "atom"),
createNode=MinusOperator.withValues,
name="minus"
)
chain2 = Parser.oneOf(
atom2 = Parser.oneOf(
minusOperator,
chain1
AtomParser,
name="atom2"
)
return Parser.leftAssociativeOperatorParser(
chain2,
atom2,
[TokenType.DOT],
chain2,
lambda left, op, right: Chain.withValue(BinaryOperator.withValues(left, op, right))
Parser.doAssert(atom2, "atom"),
createNode=lambda left, op, right: Chain.withValue(BinaryOperator.withValues(left, op, right)),
name="chain"
)(input)