89 lines
1.7 KiB
Python
89 lines
1.7 KiB
Python
from smnp.ast.node.model import Node
|
|
from smnp.ast.node.none import NoneNode
|
|
|
|
|
|
class UnaryOperator(Node):
|
|
def __init__(self, pos):
|
|
super().__init__(pos)
|
|
self.children=[NoneNode(), NoneNode()]
|
|
|
|
@property
|
|
def operator(self):
|
|
return self[0]
|
|
|
|
@operator.setter
|
|
def operator(self, value):
|
|
self[0] = value
|
|
|
|
@property
|
|
def value(self):
|
|
return self[1]
|
|
|
|
@value.setter
|
|
def value(self, value):
|
|
self[1] = value
|
|
|
|
@classmethod
|
|
def withValues(cls, operator, value):
|
|
node = cls(operator.pos)
|
|
node.operator = operator
|
|
node.value = value
|
|
return node
|
|
|
|
|
|
class BinaryOperator(Node):
|
|
def __init__(self, pos):
|
|
super().__init__(pos)
|
|
self.children = [NoneNode(), NoneNode(), NoneNode()]
|
|
|
|
@property
|
|
def left(self):
|
|
return self[0]
|
|
|
|
@left.setter
|
|
def left(self, value):
|
|
self[0] = value
|
|
|
|
@property
|
|
def operator(self):
|
|
return self[1]
|
|
|
|
@operator.setter
|
|
def operator(self, value):
|
|
self[1] = value
|
|
|
|
@property
|
|
def right(self):
|
|
return self[2]
|
|
|
|
@right.setter
|
|
def right(self, value):
|
|
self[2] = value
|
|
|
|
@classmethod
|
|
def withValues(cls, left, operator, right):
|
|
node = cls(operator.pos)
|
|
node.left = left
|
|
node.operator = operator
|
|
node.right = right
|
|
return node
|
|
|
|
|
|
class Operator(Node):
|
|
def __init__(self, pos):
|
|
super().__init__(pos)
|
|
self.children = [None]
|
|
|
|
@property
|
|
def value(self):
|
|
return self[0]
|
|
|
|
@value.setter
|
|
def value(self, value):
|
|
self[0] = value
|
|
|
|
@classmethod
|
|
def withValue(cls, value, pos):
|
|
node = cls(pos)
|
|
node.value = value
|
|
return node |