32 lines
697 B
Python
32 lines
697 B
Python
from smnp.ast.node.operator import BinaryOperator
|
|
from smnp.ast.node.valuable import Valuable
|
|
from smnp.ast.parser import Parsers
|
|
from smnp.token.type import TokenType
|
|
from smnp.util.singleton import SingletonParser
|
|
|
|
|
|
class Chain(Valuable):
|
|
pass
|
|
|
|
|
|
|
|
@SingletonParser
|
|
def ChainParser():
|
|
from smnp.ast.node.atom import AtomParser
|
|
|
|
itemParser = Parsers.oneOf(
|
|
#ListParser,
|
|
#MapParser,
|
|
AtomParser,
|
|
name="chainItem"
|
|
)
|
|
|
|
return Parsers.leftAssociativeOperatorParser(
|
|
itemParser,
|
|
[TokenType.DOT],
|
|
itemParser,
|
|
lambda left, op, right: Chain.withValue(BinaryOperator.withValues(left, op, right)),
|
|
name="chain"
|
|
)
|
|
|