blob: 9306d98fcfe740e68cf6da4d74a66e2f1cfae776 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
from multimethods import multimethod
from ql.ast.nodes.expressions.binary_operators.binary_operator import BinaryOperatorNode
from ql.ast.nodes.expressions.literals.literal import LiteralNode
from ql.ast.nodes.expressions.unary_operators.unary_operator import UnaryOperatorNode
from ql.ast.nodes.expressions.variable import VariableNode
from ql.types.undefined import QLUndefined
class ExpressionEvaluator:
def __init__(self, form):
self.form = form
self.result = QLUndefined()
@multimethod(BinaryOperatorNode)
def visit(self, node):
node.left_expression.accept(self)
node.right_expression.accept(self)
node.evaluate()
self.result = node.value
@multimethod(UnaryOperatorNode)
def visit(self, node):
node.expression.accept(self)
node.evaluate()
self.result = node.value
@multimethod(LiteralNode)
def visit(self, node):
self.result = node.value
@multimethod(VariableNode)
def visit(self, node):
for question in self.form.block:
if node.identifier == question.identifier:
node.value = question.answer.value
self.result = node.value
|