Chapter 6
これもテキストの手順どおりに作る。ここでは辞書を使った。
class Symbol_Table: def __init__(self, num_registers=16): self.symbols = {"SP":0, "LCL":1, "ARG":2, "THIS":3, "THAT":4} self.ram_last_address = num_registers - 1 # 疑似汎用レジスタとして使うramのアドレスをシンボルテーブルに追加する。 for i in range(num_registers): self.symbols["R" + str(i)] = i def add_entry(self, symbol, address): if not self.contains(symbol): self.symbols[symbol] = address else: print("symbol already exists") def contains(self, symbol): return symbol in self.symbols def get_address(self, symbol): return self.symbols[symbol] ################################################## if __name__ == "__main__": NUM_REGISTERS = 16 s = Symbol_Table(NUM_REGISTERS) print("初期化直後:", s.symbols) s.add_entry("LOOP",10) s.ram_last_address += 1 s.add_entry("sum", s.ram_last_address) s.ram_last_address += 1 s.add_entry("i", s.ram_last_address) s.add_entry("LOOP2",20) print("エントリ追加後: ", s.symbols)
実行結果: