Beispiel #1
0
def parse_line(ln, file_name):
    """
    Parse line and check if the line is arithmetic/logical operation or memory
    access operation and send respectively to the appropriate function
    to translate
    :param ln: line from vm file to translate
    :param file_name: the name of the vm file
    :return: line translate to asm commands
    """
    line = check_comment_in_line(ln)
    parsed = line.split()
    command = parsed[0]
    if command == C_POP or command == C_PUSH:  # memory access operation
        return memory_access_command(parsed, file_name)
    elif command == "label":
        return Translator.write_label(parsed[1])
    elif command == "goto":
        return Translator.write_goto(parsed[1])
    elif command == "if-goto":
        return Translator.write_if(parsed[1])
    elif command == "function":
        return Translator.write_function(parsed[1], parsed[2])
    elif command == "call":
        return Translator.write_call(parsed[1], parsed[2])
    elif command == "return":
        return Translator.write_return()
    else:  # arithmetic/logical operation
        return Translator.arithmetic_logical_command(command)