Files
smnp-py/smnp/ast/node/map.py
2019-07-11 19:10:13 +02:00

48 lines
1.1 KiB
Python

from smnp.ast.node.iterable import abstractIterableParser
from smnp.ast.node.model import Node
from smnp.ast.node.operator import BinaryOperator, Operator
from smnp.ast.parser import Parsers
from smnp.token.type import TokenType
class MapEntry(BinaryOperator):
@property
def key(self):
return self[0]
@key.setter
def key(self, value):
self[0] = value
@property
def value(self):
return self[2]
@value.setter
def value(self, value):
self[2] = value
class Map(Node):
pass
def MapParser(input):
from smnp.ast.node.atom import LiteralParser
#from smnp.ast.node.expression import MaxPrecedenceExpressionParser
keyParser = LiteralParser
#valueParser = MaxPrecedenceExpressionParser
mapEntryParser = Parsers.allOf(
keyParser,
Parsers.terminal(TokenType.ARROW, createNode=Operator.withValue),
#valueParser,
createNode=MapEntry.withValues,
name="mapEntry"
)
return abstractIterableParser(Map, TokenType.OPEN_CURLY, TokenType.CLOSE_CURLY, mapEntryParser)