From d6a48c54755a6f1bde076f4bbdd2cc218a092f60 Mon Sep 17 00:00:00 2001 From: Frederick Yin Date: Tue, 23 Aug 2022 20:30:57 +0800 Subject: hack-vm: function commands and verbose mode --- projects/hack-vm/__main__.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'projects/hack-vm/__main__.py') diff --git a/projects/hack-vm/__main__.py b/projects/hack-vm/__main__.py index 5373fe9..33df369 100644 --- a/projects/hack-vm/__main__.py +++ b/projects/hack-vm/__main__.py @@ -3,10 +3,11 @@ from .memory import translate_memory from .arith_logic import translate_arith_logic from .compare import translate_compare from .branching import translate_branching +from .function import translate_function, translate_return from .utils import * -def vm_translate(input_path): +def vm_translate(input_path, verbose): # program name, for static variable labels input_fn = input_path.split("/")[-1] prog = input_fn[:-3] if input_fn.endswith(".vm") else input_fn @@ -34,13 +35,17 @@ def vm_translate(input_path): case []: continue case [("push" | "pop") as action, segment, index]: - asm += translate_memory(action, segment, index, prog) + asm += translate_memory(action, segment, index, prog, verbose) case [("add" | "sub" | "neg" | "and" | "or" | "not") as command]: - asm += translate_arith_logic(command) + asm += translate_arith_logic(command, verbose) case [("lt" | "eq" | "gt") as command]: - asm += translate_compare(command) + asm += translate_compare(command, verbose) case [("label" | "goto" | "if-goto") as action, label]: - asm += translate_branching(action, label) + asm += translate_branching(action, label, verbose) + case [("call" | "function") as action, function, n]: + asm += translate_function(action, function, n, prog, verbose) + case ["return"]: + asm += translate_return(verbose) case _: exit_on_error( f"Syntax error: invalid command: {cmd}", EXIT_CODE_SYNTAX_ERROR @@ -61,6 +66,7 @@ def vm_translate(input_path): if __name__ == "__main__": parser = ArgumentParser("hack-vm") + parser.add_argument("-v", "--verbose", action="store_true", help="verbose mode") parser.add_argument("input_path", help="input file in HACK VM") args = parser.parse_args() - vm_translate(args.input_path) + vm_translate(args.input_path, args.verbose) -- cgit v1.2.3