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): def AtomParser(input):
from smnp.ast.node.identifier import IdentifierParser from smnp.ast.node.identifier import IdentifierParser
from smnp.ast.node.list import ListParser
from smnp.ast.node.map import MapParser
return Parser.oneOf( return Parser.oneOf(
LiteralParser, LiteralParser,
IdentifierParser, IdentifierParser,
ListParser,
MapParser,
name="atom" name="atom"
)(input) )(input)

View File

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