今年夏天,我正在学习nand2tetris课程,目前正在进行第6章项目(构建汇编程序)。我对Python的选择是出于可爱的字典。问题是我似乎无法正常工作/创建/访问一个。在遵循本章的API时,他们为汇编程序推荐了3个不同的类,即Parser
类,SymbolTable
类和Code
类。
我们制造的机器具有以下指定的内存。已经专门用于预定义符号的位置。
使用以下PreAllocated内存位置:
SP - (hex 00000, bin 0000000000000000)
LCL - (hex 00001, bin 0000000000000001)
ARG - (hex 00002, bin 0000000000000010)
THIS - (hex 00003, bin 0000000000000011)
THAT - (hex 0004, bin 0000000000000100)
R0-R15 - (hex 000[0-15], bin 000000000000[0-1111])
SCREEN - (hex 04000, bin 0100000000000000)
KBD - (hex 06000, bin 0110000000000000)
我希望以表本身为对象的方式创建类,并在实例化时自然地分配这些{'key': value}
对。
symbolTable.py
:
class symbolTable(object):
def __init__(self):
self.table = {'SP': 0000000000000000, 'LCL': 0000000000000001,
'ARG': 0000000000000010, 'THIS': 0000000000000011,
'THAT': 0000000000000100, 'R0': 0000000000000000,
'R1': 0000000000000001, 'R2': 0000000000000010,
'R3': 0000000000000011, 'R4': 000000000000100,
'R5': 0000000000000101, 'R6': 0000000000000110,
'R7': 0000000000000111, 'R8': 0000000000001000,
'R9': 0000000000001001, 'R10': 0000000000001010,
'R11': 0000000000001011, 'R12': 0000000000001100,
'R13': 0000000000001101, 'R14': 0000000000001110,
'R15': 0000000000001111, 'SCREEN': 0100000000000000,
'KBD': 0110000000000000};
在继续添加属性之前,我试图简单地创建这个东西。然而,当我拉起并运行我的主文件时,main.py
:
__author__ = 'Cheech Wife'
import symbolTable
newTable = symbolTable.SymbolTable()
print newTable
我一无所获:
C:\Python27\python.exe "C:/Users/Cheech Wife/Desktop/cs 271/Assembler_ch6/symbolTable.py"
处理完成,退出代码为0
从我所看到的,文件分离不应该是问题,并且使用C ++我是分区的忠实粉丝,并希望文件保持不同。那么我做错了什么?
是我试图让我的班级的对象成为字典本身的错误?当我尝试实例化这件事时,我做错了吗?
答案 0 :(得分:0)
您最后不需要分号或字典。 C / C ++语法残余。 您在SymbolTable中的定义需要缩进。
您的退出代码为0,因为您正在运行symbotTable.py而不是main.py。
你的main.py应该告诉你对象符号的位置。不是它的内容。 类似的东西:
最后你的数字将被解释为八进制而不是二进制。看看Binary numbers in Python