Create statements and block nodes
This commit is contained in:
@@ -1,20 +1,19 @@
|
||||
from smnp.ast.node.statement import StatementNode
|
||||
from smnp.ast.node.model import Node
|
||||
from smnp.ast.node.statement import StatementParser
|
||||
from smnp.ast.parser import Parser
|
||||
from smnp.token.type import TokenType
|
||||
|
||||
|
||||
class BlockNode(StatementNode):
|
||||
class Block(Node):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def _parse(cls, input):
|
||||
def createNode(start, items, end):
|
||||
node = BlockNode(start.pos)
|
||||
node.children = items
|
||||
return node
|
||||
|
||||
return Parser.loop(
|
||||
Parser.terminalParser(TokenType.OPEN_CURLY),
|
||||
Parser.doAssert(StatementNode.parse, f"statement or '{TokenType.CLOSE_CURLY.key}'"),
|
||||
Parser.terminalParser(TokenType.CLOSE_CURLY),
|
||||
createNode=createNode,
|
||||
)(input)
|
||||
def BlockParser(input):
|
||||
parser = Parser.loop(
|
||||
Parser.terminalParser(TokenType.OPEN_CURLY),
|
||||
Parser.doAssert(StatementParser, f"statement or '{TokenType.CLOSE_CURLY.key}'"),
|
||||
Parser.terminalParser(TokenType.CLOSE_CURLY),
|
||||
createNode=lambda open, statements, close: Block.withChildren(statements, open.pos)
|
||||
)
|
||||
|
||||
return Parser(parser, "block", [parser])(input)
|
||||
|
||||
Reference in New Issue
Block a user