diff options
Diffstat (limited to 'src/psi/interpreter.py')
| -rw-r--r-- | src/psi/interpreter.py | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/psi/interpreter.py b/src/psi/interpreter.py new file mode 100644 index 0000000..f98a777 --- /dev/null +++ b/src/psi/interpreter.py @@ -0,0 +1,26 @@ +from psi.lexer import Token + + +__all__ = ['Interpreter'] + +class Interpreter: + def __init__(self, ast): + self.ast = ast + + def interpret(self): + return self.interpret_expr(self.ast) + + def interpret_expr(self, node): + if isinstance(node, Token): + return node.value + elif isinstance(node, list): + for expr in node: + result = self.interpret_expr(expr) + if result is not None: + return result + + def interpret_condition(self, node): + variable = self.interpret_expr(node[0]) + value = self.interpret_expr(node[2]) + + return variable == value |
