Create 'return' statement

This commit is contained in:
Bartłomiej Pluta
2019-07-12 00:35:41 +02:00
parent ee91dbec8a
commit e71bffcf5d
3 changed files with 38 additions and 36 deletions

View File

@@ -1,32 +1,17 @@
# from smnp.ast.node.expression import ExpressionNode
# from smnp.ast.node.none import NoneNode
# from smnp.ast.node.statement import StatementNode
# from smnp.ast.parser import Parser
# from smnp.token.type import TokenType
#
#
# class ReturnNode(StatementNode):
# def __init__(self, pos):
# super().__init__(pos)
# self.children.append(NoneNode())
#
# @property
# def value(self):
# return self[0]
#
# @value.setter
# def value(self, value):
# self[0] = value
#
# @classmethod
# def _parse(cls, input):
# def createNode(ret, value):
# node = ReturnNode(ret.pos)
# node.value = value
# return node
#
# return Parser.allOf(
# Parser.terminalParser(TokenType.RETURN),
# Parser.doAssert(ExpressionNode.parse, "expression"),
# createNode=createNode
# )(input)
from smnp.ast.node.expression import ExpressionParser
from smnp.ast.node.valuable import Valuable
from smnp.ast.parser import Parser
from smnp.token.type import TokenType
class Return(Valuable):
pass
def ReturnParser(input):
return Parser.allOf(
Parser.terminal(TokenType.RETURN),
Parser.optional(ExpressionParser),
createNode=lambda ret, val: Return.withValue(val, ret.pos),
name="return"
)(input)