Exemple #1
0
class Assembler:
    def __init__(self, in_f, out_f):
        self._in_f = in_f
        self._out_f = out_f
        self._symbol_table = SymbolTable()

    def compile(self):
        parser = Parser()

        # First pass, adding loop labels to the symbol table.
        file_buff = ""
        line_count = 0

        for line in self._in_f:
            if line[0] == '\n' or line[0] == "/":
                pass
            elif line[0] == "(":
                # Loop label
                label = line[1:-2]
                self._symbol_table.add_entry(label, line_count)
            else:
                file_buff += line.lstrip()
                line_count += 1

        # Second pass, actual translation to machine language.
        for line in file_buff.split('\n'):
            parsed = parser.parse_line(line, self._symbol_table)
            print(parsed, end='', file=self._out_f);

        print("Symbol table: ", self._symbol_table.get_symbols())