diff options
| author | mryouse | 2022-06-18 02:56:25 +0000 |
|---|---|---|
| committer | mryouse | 2022-06-18 02:56:25 +0000 |
| commit | 015951495e4a0a22d89be059b46a90a296151802 (patch) | |
| tree | 42a49bfc7798c92a2564ccd597f29f705f998fee /neb/interpreter.py | |
| parent | d1a1c1592e610526c4a0432f93bd9ea6ae96d6e8 (diff) | |
move Arg and Environment to structs
Diffstat (limited to 'neb/interpreter.py')
| -rw-r--r-- | neb/interpreter.py | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/neb/interpreter.py b/neb/interpreter.py index 760b3a6..e64e420 100644 --- a/neb/interpreter.py +++ b/neb/interpreter.py @@ -11,21 +11,6 @@ import random import sys import math - -class Arg: - - def __init__(self, name, type_, *, optional=False, lazy=False): - self.name = name - self.type_ = type_ - self.optional = optional - self.lazy = lazy - - def __str__(self): - opt = "?" if self.optional else "" - lazy = "~" if self.lazy else "" - return f"{lazy}{opt}{self.name} {self.type_}" - - class Function: def __init__(self, name, params, body, args=None, many=None): @@ -142,45 +127,6 @@ class UserFunction(Function): return interpret(self.body, env=this_env, ns=ns) -class Environment: - - def __init__(self, parent=None): - self.parent = parent - self.environment = {} - - def register(self, key, value): - self.environment[key] = value - - def reregister(self, key, value): - if not self.contains(key): - raise NebPanic(f"undefined symbol: '{key}") - if key in self.environment: - self.register(key, value) - else: - self.parent.reregister(key, value) - - def contains(self, key): - if key in self.environment: - return True - elif self.parent is not None: - return self.parent.contains(key) - else: - return False - - def get(self, key): - if not self.contains(key): - raise NebPanic(f"undefined symbol: '{key}") - if key in self.environment: - return self.environment[key] - else: - return self.parent.get(key) - - def __str__(self): - out = "" - for k, v in self.environment.items(): - out += f"{k}: {v}, " - return out - GLOBALS = Environment() def interpret(exprs, *, env=GLOBALS, ns=None): |
