Create evaluators for literals, list and identifier nodes

This commit is contained in:
Bartłomiej Pluta
2019-07-08 13:39:07 +02:00
parent fd9f240ce5
commit 6e42ac0f91
10 changed files with 166 additions and 53 deletions

View File

@@ -1,17 +1,13 @@
from smnp.error.runtime import RuntimeException
from smnp.runtime.evaluator import evaluate
from smnp.runtime.tools import flatListNode
from smnp.runtime.evaluator import Evaluator
from smnp.runtime.evaluators.expression import evaluateExpression
from smnp.runtime.evaluators.iterable import abstractIterableEvaluator
from smnp.type.model import Type
from smnp.type.value import Value
def evaluateList(list, environment):
newList = []
for elem in flatListNode(list):
item = evaluate(elem, environment)
if item.type == Type.VOID:
raise RuntimeException(f"Expected expression, found '{item.type.name}'", elem.pos)
newList.append(item)
return Value(Type.LIST, newList)
class ListEvaluator(Evaluator):
@classmethod
def evaluator(cls, node, environment):
list = abstractIterableEvaluator(evaluateExpression)(node, environment)
return Value(Type.LIST, list)