Add support for assignment
This commit is contained in:
28
smnp/newast/node/assignment.py
Normal file
28
smnp/newast/node/assignment.py
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
from smnp.newast.node.expression import ExpressionNode
|
||||||
|
from smnp.newast.node.none import NoneNode
|
||||||
|
|
||||||
|
|
||||||
|
class AssignmentNode(ExpressionNode):
|
||||||
|
def __init__(self, pos):
|
||||||
|
super().__init__(pos)
|
||||||
|
self.children.append(NoneNode())
|
||||||
|
|
||||||
|
@property
|
||||||
|
def target(self):
|
||||||
|
return self[0]
|
||||||
|
|
||||||
|
@target.setter
|
||||||
|
def target(self, value):
|
||||||
|
self[0] = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def value(self):
|
||||||
|
return self[1]
|
||||||
|
|
||||||
|
@value.setter
|
||||||
|
def value(self, value):
|
||||||
|
self[1] = value
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _parse(cls, input):
|
||||||
|
raise RuntimeError("This class is not supposed to be automatically called")
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
from smnp.newast.node.access import AccessNode
|
from smnp.newast.node.access import AccessNode
|
||||||
from smnp.newast.node.args import ArgumentsListNode
|
from smnp.newast.node.args import ArgumentsListNode
|
||||||
|
from smnp.newast.node.assignment import AssignmentNode
|
||||||
|
from smnp.newast.node.expression import ExpressionNode
|
||||||
from smnp.newast.node.invocation import FunctionCall
|
from smnp.newast.node.invocation import FunctionCall
|
||||||
from smnp.newast.parser import Parser
|
from smnp.newast.parser import Parser
|
||||||
from smnp.token.type import TokenType
|
from smnp.token.type import TokenType
|
||||||
@@ -14,9 +16,25 @@ class IdentifierNode(AccessNode):
|
|||||||
def _literalParser(cls):
|
def _literalParser(cls):
|
||||||
return Parser.oneOf(
|
return Parser.oneOf(
|
||||||
IdentifierNode._functionCallParser(),
|
IdentifierNode._functionCallParser(),
|
||||||
|
IdentifierNode._assignmentParser(),
|
||||||
IdentifierNode._identifierParser()
|
IdentifierNode._identifierParser()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _assignmentParser():
|
||||||
|
def createNode(target, assignment, value):
|
||||||
|
node = AssignmentNode(assignment.pos)
|
||||||
|
node.target = target
|
||||||
|
node.value = value
|
||||||
|
return node
|
||||||
|
|
||||||
|
return Parser.allOf(
|
||||||
|
IdentifierNode._identifierParser(),
|
||||||
|
Parser.terminalParser(TokenType.ASSIGN),
|
||||||
|
ExpressionNode.parse,
|
||||||
|
createNode=createNode
|
||||||
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _functionCallParser():
|
def _functionCallParser():
|
||||||
def createNode(name, arguments):
|
def createNode(name, arguments):
|
||||||
|
|||||||
Reference in New Issue
Block a user