mirror of
https://github.com/BoardWare-Genius/jarvis-models.git
synced 2025-12-13 16:53:24 +00:00
41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
|
|
class Runtime():
|
|
|
|
def __init__(self, context=None, parent=None, exteral_fun=None, name=None) -> None:
|
|
self.name = name
|
|
self.parent = parent
|
|
self.context = context if context is not None else dict()
|
|
self.exteral_fun = exteral_fun if exteral_fun is not None else dict()
|
|
|
|
def has_value(self, identifier: str) -> bool:
|
|
return identifier in self.context
|
|
|
|
def get_value(self, identifier: str):
|
|
return self.context.get(identifier)
|
|
|
|
def deep_get_value(self, id: str):
|
|
if self.has_value(id):
|
|
return self.get_value(id)
|
|
if self.parent is not None:
|
|
return self.parent.deep_get_value(id)
|
|
return None
|
|
|
|
def set_value(self, identifier: str, value):
|
|
self.context[identifier] = value
|
|
|
|
def declare(self, identifier: str, value):
|
|
if self.has_value(identifier):
|
|
raise Exception(f"Variable {identifier} is already declared")
|
|
self.set_value(identifier, value)
|
|
|
|
def assign(self, identifier: str, value):
|
|
if self.has_value(identifier):
|
|
self.set_value(identifier, value)
|
|
elif self.parent is not None:
|
|
self.parent.assign(identifier, value)
|
|
else:
|
|
raise Exception(f"Variable {identifier} is not declared")
|
|
|
|
def show_values(self):
|
|
print(self.context)
|