Create evaluators for literals, list and identifier nodes
This commit is contained in:
@@ -1,28 +1,25 @@
|
||||
import re
|
||||
|
||||
from smnp.error.runtime import RuntimeException
|
||||
from smnp.runtime.evaluator import Evaluator
|
||||
from smnp.type.model import Type
|
||||
from smnp.type.value import Value
|
||||
|
||||
|
||||
def evaluateString(string, environment):
|
||||
value = interpolate(string, environment)
|
||||
return Value(Type.STRING, value)
|
||||
class StringEvaluator(Evaluator):
|
||||
|
||||
@classmethod
|
||||
def evaluator(cls, node, environment):
|
||||
return Value(Type.STRING, node.value)
|
||||
|
||||
def interpolate(string, environment):
|
||||
interpolated = string.value
|
||||
for scope in reversed(environment.scopes):
|
||||
for name, value in scope.items():
|
||||
interpolated = interpolated.replace('{' + name + '}', value.stringify())
|
||||
|
||||
nonMatchedVariables = re.findall(r"\{\w+\}", interpolated)
|
||||
if len(nonMatchedVariables) > 0:
|
||||
raise RuntimeException(f"Variable '{nonMatchedVariables[0][1:len(nonMatchedVariables[0])-1]}' is not declared",
|
||||
(string.pos[0], string.pos[1] + string.value.find(nonMatchedVariables[0])+1))
|
||||
|
||||
return interpolated
|
||||
|
||||
# or scope in reversed(environment.scopes):
|
||||
# for k, v in scope.items():
|
||||
# value = value.replace('{' + k + '}', v) #TODO: poprawic
|
||||
# TODO: make use of complex interpreter for code inside '{' and '}'
|
||||
# def interpolate(string, environment):
|
||||
# interpolated = string.value
|
||||
# for scope in reversed(environment.scopes):
|
||||
# for name, value in scope.items():
|
||||
# interpolated = interpolated.replace('{' + name + '}', value.stringify())
|
||||
#
|
||||
# nonMatchedVariables = re.findall(r"\{\w+\}", interpolated)
|
||||
# if len(nonMatchedVariables) > 0:
|
||||
# raise RuntimeException(f"Variable '{nonMatchedVariables[0][1:len(nonMatchedVariables[0])-1]}' is not declared",
|
||||
# (string.pos[0], string.pos[1] + string.value.find(nonMatchedVariables[0])+1))
|
||||
#
|
||||
# return interpolated
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user