Exemple #1
0
assembly_program = Parser(source_file)
translated_program = []

# Create the SymbolTable and add the built-in symbols
symbol_table = SymbolTable()

# Do a first run of the assembly program.
# Scan for (XXX) labels and add them to symbol_table
while not assembly_program.is_parsed():
    current_command = assembly_program.advance()
    command_type = assembly_program.get_command_type(current_command)

    if command_type == 'L_COMMAND':
        label_name = current_command[1:len(current_command) - 1]

        if not symbol_table.contains_symbol(label_name):
            symbol_table.add_label(label_name, assembly_program.line_counter)

# Removes all labels from assembly program and restarts it
assembly_program.assembly_program = assembly_program.remove_labels()
assembly_program.line_counter = 0

# Do a second run of the assembly program
# Adds all @symbols to symbol table, with a corresponding address starting from 16
# If the address is already taken increment it by 1 until a free spot in RAM is found
# Generates all A and C-command mnemonics and binaries
while not assembly_program.is_parsed():
    current_command = assembly_program.advance()
    command_type = assembly_program.get_command_type(current_command)

    if command_type == 'A_COMMAND':