Rename TypedVariable to ArgumentDefinitionNode
This commit is contained in:
2
grammar
2
grammar
@@ -33,6 +33,8 @@ PITCH_MODIFIER = 'b' | '#'
|
|||||||
<argdeflist> ::= '(' ')' | '(' <typedVariable> <argdeflist>
|
<argdeflist> ::= '(' ')' | '(' <typedVariable> <argdeflist>
|
||||||
<argdeflist> ::= <typedVariable> ', ' <argdeflist> | ')'
|
<argdeflist> ::= <typedVariable> ', ' <argdeflist> | ')'
|
||||||
|
|
||||||
|
<argdef> = <type> <typeSpecifier>? <identifier> '...'? | <typeSpecifier> <identifier> '...'?
|
||||||
|
|
||||||
<typedVariable> ::= <type> <typeSpecifier>? <identifier>
|
<typedVariable> ::= <type> <typeSpecifier>? <identifier>
|
||||||
|
|
||||||
<map> ::= '{' '}' | '{' <mapEntry> <mapTail>
|
<map> ::= '{' '}' | '{' <mapEntry> <mapTail>
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
from smnp.ast.node.block import BlockNode
|
from smnp.ast.node.block import BlockNode
|
||||||
|
from smnp.ast.node.expression import ExpressionNode
|
||||||
from smnp.ast.node.identifier import IdentifierNode
|
from smnp.ast.node.identifier import IdentifierNode
|
||||||
from smnp.ast.node.iterable import abstractIterableParser
|
from smnp.ast.node.iterable import abstractIterableParser
|
||||||
from smnp.ast.node.model import Node
|
from smnp.ast.node.model import Node
|
||||||
from smnp.ast.node.none import NoneNode
|
from smnp.ast.node.none import NoneNode
|
||||||
from smnp.ast.node.statement import StatementNode
|
from smnp.ast.node.statement import StatementNode
|
||||||
from smnp.ast.node.variable import TypedVariableNode
|
from smnp.ast.node.type import TypeNode
|
||||||
from smnp.ast.parser import Parser
|
from smnp.ast.parser import Parser
|
||||||
from smnp.token.type import TokenType
|
from smnp.token.type import TokenType
|
||||||
|
|
||||||
@@ -16,6 +17,48 @@ class ArgumentsDeclarationNode(Node):
|
|||||||
raise RuntimeError("This class is not supposed to be automatically called")
|
raise RuntimeError("This class is not supposed to be automatically called")
|
||||||
|
|
||||||
|
|
||||||
|
class ArgumentDefinitionNode(ExpressionNode):
|
||||||
|
def __init__(self, pos):
|
||||||
|
super().__init__(pos)
|
||||||
|
self.children.append(NoneNode())
|
||||||
|
|
||||||
|
@property
|
||||||
|
def type(self):
|
||||||
|
return self[0]
|
||||||
|
|
||||||
|
@type.setter
|
||||||
|
def type(self, value):
|
||||||
|
self[0] = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def variable(self):
|
||||||
|
return self[1]
|
||||||
|
|
||||||
|
@variable.setter
|
||||||
|
def variable(self, value):
|
||||||
|
self[1] = value
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def parser(cls):
|
||||||
|
def createNode(type, variable):
|
||||||
|
node = ArgumentDefinitionNode(type.pos)
|
||||||
|
node.type = type
|
||||||
|
node.variable = variable
|
||||||
|
return node
|
||||||
|
|
||||||
|
return Parser.allOf(
|
||||||
|
TypeNode.parse,
|
||||||
|
Parser.doAssert(IdentifierNode.identifierParser(), "variable name"),
|
||||||
|
createNode=createNode
|
||||||
|
)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _parse(cls, input):
|
||||||
|
#TODO
|
||||||
|
raise RuntimeError("Not implemented yet. There is still required work to correctly build AST related to IdentifierNode")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class FunctionDefinitionNode(StatementNode):
|
class FunctionDefinitionNode(StatementNode):
|
||||||
def __init__(self, pos):
|
def __init__(self, pos):
|
||||||
super().__init__(pos)
|
super().__init__(pos)
|
||||||
@@ -64,4 +107,4 @@ class FunctionDefinitionNode(StatementNode):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _argumentsDeclarationParser():
|
def _argumentsDeclarationParser():
|
||||||
return abstractIterableParser(ArgumentsDeclarationNode, TokenType.OPEN_PAREN, TokenType.CLOSE_PAREN, TypedVariableNode.parser())
|
return abstractIterableParser(ArgumentsDeclarationNode, TokenType.OPEN_PAREN, TokenType.CLOSE_PAREN, ArgumentDefinitionNode.parser())
|
||||||
@@ -1,46 +1,3 @@
|
|||||||
from smnp.ast.node.expression import ExpressionNode
|
|
||||||
from smnp.ast.node.identifier import IdentifierNode
|
|
||||||
from smnp.ast.node.none import NoneNode
|
|
||||||
from smnp.ast.node.type import TypeNode
|
|
||||||
from smnp.ast.parser import Parser
|
|
||||||
|
|
||||||
|
|
||||||
class TypedVariableNode(ExpressionNode):
|
|
||||||
def __init__(self, pos):
|
|
||||||
super().__init__(pos)
|
|
||||||
self.children.append(NoneNode())
|
|
||||||
|
|
||||||
@property
|
|
||||||
def type(self):
|
|
||||||
return self[0]
|
|
||||||
|
|
||||||
@type.setter
|
|
||||||
def type(self, value):
|
|
||||||
self[0] = value
|
|
||||||
|
|
||||||
@property
|
|
||||||
def variable(self):
|
|
||||||
return self[1]
|
|
||||||
|
|
||||||
@variable.setter
|
|
||||||
def variable(self, value):
|
|
||||||
self[1] = value
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def parser(cls):
|
|
||||||
def createNode(type, variable):
|
|
||||||
node = TypedVariableNode(type.pos)
|
|
||||||
node.type = type
|
|
||||||
node.variable = variable
|
|
||||||
return node
|
|
||||||
|
|
||||||
return Parser.allOf(
|
|
||||||
TypeNode.parse,
|
|
||||||
Parser.doAssert(IdentifierNode.identifierParser(), "variable name"),
|
|
||||||
createNode=createNode
|
|
||||||
)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def _parse(cls, input):
|
|
||||||
#TODO
|
|
||||||
raise RuntimeError("Not implemented yet. There is still required work to correctly build AST related to IdentifierNode")
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
from smnp.ast.node.function import ArgumentDefinitionNode
|
||||||
from smnp.ast.node.none import NoneNode
|
from smnp.ast.node.none import NoneNode
|
||||||
from smnp.ast.node.ret import ReturnNode
|
from smnp.ast.node.ret import ReturnNode
|
||||||
from smnp.ast.node.variable import TypedVariableNode
|
|
||||||
from smnp.error.runtime import RuntimeException
|
from smnp.error.runtime import RuntimeException
|
||||||
from smnp.function.signature import signature
|
from smnp.function.signature import signature
|
||||||
from smnp.runtime.evaluator import Evaluator, evaluate
|
from smnp.runtime.evaluator import Evaluator, evaluate
|
||||||
@@ -45,7 +45,7 @@ def argumentsNodeToMethodSignature(node):
|
|||||||
sign = []
|
sign = []
|
||||||
|
|
||||||
for child in node.children:
|
for child in node.children:
|
||||||
if type(child) == TypedVariableNode:
|
if type(child) == ArgumentDefinitionNode:
|
||||||
if type(child.type.specifiers) == NoneNode:
|
if type(child.type.specifiers) == NoneNode:
|
||||||
sign.append(ofType(child.type.type))
|
sign.append(ofType(child.type.type))
|
||||||
elif child.type.type == Type.LIST and len(child.type.specifiers) == 1:
|
elif child.type.type == Type.LIST and len(child.type.specifiers) == 1:
|
||||||
|
|||||||
Reference in New Issue
Block a user