Move list and map parsers to atom
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user