def testGetAddress(self): table = SymbolTable() self.assertRaises(KeyError, table.GetAddress, 'abc') table.addEntry('abc', 123) self.assertEqual(123, table.GetAddress('abc')) table.addEntry('abc', 456) self.assertNotEqual(123, table.GetAddress('abc')) self.assertEqual(456, table.GetAddress('abc'))
def testContains(self): table = SymbolTable() self.assertFalse(table.contains('abc')) table.addEntry('abc', 123) self.assertTrue(table.contains('abc')) table.addEntry('abc', 456) self.assertTrue(table.contains('abc'))
def test_add_new_symbols_with_values(self): symbolTable = SymbolTable() symbolTable.add_symbol_with_value('first', 16) symbolTable.add_symbol_with_value('second', 17) self.assertEqual(symbolTable.get_symbol_value('first'), 16) self.assertEqual(symbolTable.get_symbol_value('second'), 17)
def testAddEntry(self): table = SymbolTable() self.assertRaises(KeyError, table.addEntry, 'abc', '1')
def test_get_builtin_symbol(self): symbolTable = SymbolTable() self.assertEqual(symbolTable.get_symbol_value('R0'), 0)
def test_symbols_collisions(self): symbolTable = SymbolTable() symbolTable.add_symbol_with_value('first', 16) symbolTable.add_symbol_with_value('second', 17) symbolTable.add_symbol('third') self.assertEqual(symbolTable.get_symbol_value('first'), 16) self.assertEqual(symbolTable.get_symbol_value('second'), 17) self.assertEqual(symbolTable.get_symbol_value('third'), 18)
def test_not_existing_symbol(self): symbolTable = SymbolTable() self.assertEqual(symbolTable.get_symbol_value('none'), None)
#coding: utf-8 import re from assembler import SymbolTable, Parser, Code # command format A_COMM_TMPL = '0{0:015b}' C_COMM_TMPL = '111{0:07b}{1:03b}{2:03b}' # init predefined symbol PRE_DEFINED = SymbolTable([('SP', 0x0000), ('LCL', 0x0001), ('ARG', 0x0002), ('KBD', 0x6000), ('THIS', 0x0003), ('THAT', 0x0004), ('SCREEN', 0x4000), ('R0', 0x0000), ('R1', 0x0001), ('R2', 0x0002), ('R3', 0x0003), ('R4', 0x0004), ('R5', 0x0005), ('R6', 0x0006), ('R7', 0x0007), ('R8', 0x0008), ('R9', 0x0009), ('R10', 0x000A), ('R11', 0x000B), ('R12', 0x000C), ('R13', 0x000D), ('R14', 0x000E), ('R15', 0x000F)]) def init(stream): return Parser(stream) def first_pass(parser): '''First pass: parse rom address and symbols''' rom_addr = -1 last_symbols = [] symbols = PRE_DEFINED.copy()