diff --git a/interp.py b/interp.py index 664f20e..606c082 100644 --- a/interp.py +++ b/interp.py @@ -17,21 +17,12 @@ appendix = args[0] return Text(self.value() + " " + appendix.value()) -def module_create(verbs): - return ("module", verbs) -def module_dispatch(object, verb, args): - (type, functions) = object - return functions[verb](object, args) +class Module_System: + def verb_Print(self, args): + print(args[0].value()) -def do_system_print(subject, args): - print(args[0].value()) - return None -def do_system_read(subject, args): - return Text(input()) -system_module = module_create({ - "Print": do_system_print, - "Read": do_system_read, -}) + def verb_Read(self, args): + return Text(input()) def resolve_value(env, value): if value.__class__ == ast_types.Reference: @@ -48,11 +39,7 @@ args = [] for arg in ast.arguments: args.append(resolve_value(env, arg)) - if subject.__class__ == Text: - return getattr(subject, "verb_" + ast.verb)(args) - elif subject[0] == "module": - return module_dispatch(subject, ast.verb, args) - return None + return getattr(subject, "verb_" + ast.verb)(args) def run_set(env, ast): env[ast.subject] = run_statement(env, ast.statement) @@ -75,7 +62,7 @@ def run_ast(ast): env = { - "System": system_module, + "System": Module_System(), } for command in ast: run_command(env, command)