Exemplo n.º 1
0
def translate(input_file_path, output_file):
    parser = Parser(input_file_path)
    command = parser.next_command()
    current_function = "no_function"
    while command:
        command_type = get_command_type(command)
        parts = command.split()
        if command_type == MEMORY_ACCESS:
            output_file.write(
                memory_access.translate_command(
                    parts[0], parts[1], parts[2],
                    get_file_name(input_file_path)))
        elif command_type == ARITHMETIC:
            output_file.write(arithmetic.translate_command(command))
        elif command_type == PROGRAM_FLOW:
            output_file.write(
                program_flow.translate_command(parts[0], parts[1],
                                               current_function))
        elif command_type == FUNCTION:
            if parts[0] == FUNCTION_DECLARATION:
                current_function = parts[1]
            if len(parts) == 3:
                output_file.write(
                    function.translate_command(parts[0], parts[1], parts[2]))
            else:
                output_file.write(function.translate_command(parts[0], "", ""))
        command = parser.next_command()
        output_file.write("\n\n")
Exemplo n.º 2
0
def translate(input_file_path, output_file):
    parser = Parser(input_file_path)
    command = parser.next_command()
    while command:
        command_type = get_command_type(command)
        if command_type == MEMORY_ACCESS:
            parts = command.split()
            output_file.write(
                memory_access.translate_command(
                    parts[0], parts[1], parts[2],
                    get_file_name(input_file_path)))
        elif command_type == ARITHMETIC:
            output_file.write(arithmetic.translate_command(command))
        command = parser.next_command()
        output_file.write("\n\n")
 def test_parser(self):
     expected = [
         "push constant 17", "push constant 17", "eq", "push constant 17",
         "push constant 16", "eq", "push constant 16", "push constant 17",
         "eq", "push constant 892", "push constant 891", "lt",
         "push constant 891", "push constant 892", "lt",
         "push constant 891", "push constant 891", "lt",
         "push constant 32767", "push constant 32766", "gt",
         "push constant 32766", "push constant 32767", "gt",
         "push constant 32766", "push constant 32766", "gt",
         "push constant 57", "push constant 31", "push constant 53", "add",
         "push constant 112", "sub", "neg", "and", "push constant 82", "or",
         "not"
     ]
     vm_parser = Parser("StackArithmetic/StackTest/StackTest.vm")
     list = []
     command = vm_parser.next_command()
     while command:
         list.append(command)
         command = vm_parser.next_command()
     self.assertListEqual(expected, list)