diff --git a/interp.py b/interp.py index f57cfc8..79944e1 100644 --- a/interp.py +++ b/interp.py @@ -25,49 +25,52 @@ return Text(input()) class Interpreter: - def resolve_value(self, env, value): + def __init__(self, env): + self.env = env + + def resolve_value(self, value): if value.__class__ == ast_types.Reference: - return env[value.value] + return self.env[value.value] elif value.__class__ == ast_types.Text: return Text(value.value) else: print("Unimplemented value: %s" % (value)) - def run_statement(self, env, ast): - subject = self.resolve_value(env, ast.subject) + def run_statement(self, ast): + subject = self.resolve_value(ast.subject) if ast.verb == None: return subject args = [] for arg in ast.arguments: - args.append(self.resolve_value(env, arg)) + args.append(self.resolve_value(arg)) return getattr(subject, "verb_" + ast.verb)(args) - def run_set(self, env, ast): - env[ast.subject] = self.run_statement(env, ast.statement) - return env[ast.subject] + def run_set(self, ast): + self.env[ast.subject] = self.run_statement(ast.statement) + return self.env[ast.subject] - def run_conditional(self, env, ast): + def run_conditional(self, ast): print("Unimplemented if") return None - def run_command(self, env, ast): + def run_command(self, ast): if ast.__class__ == ast_types.Statement: - return self.run_statement(env, ast) + return self.run_statement(ast) elif ast.__class__ == ast_types.Set: - return self.run_set(env, ast) + return self.run_set(ast) elif ast.__class__ == ast_types.Conditional: - return self.run_conditional(env, ast) + return self.run_conditional(ast) else: print("Unknown command %s" % (ast)) return None - def run(self, env, ast): + def run(self, ast): for command in ast: - self.run_command(env, command) + self.run_command(command) return None def run_ast(ast): env = { "System": Module_System(), } - return Interpreter().run(env, ast) + return Interpreter(env).run(ast)