Esempio n. 1
0
    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'))
Esempio n. 2
0
    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'))
Esempio n. 3
0
    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 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)
Esempio n. 5
0
    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'))
Esempio n. 6
0
 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)
Esempio n. 10
0
#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()