该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
请问下为什么我用PYTHON写编译器一旦用READ就死机
read代码如下:
def praseRead(self, fsys, lev):
self.nextsym()
if self.sym.symtype == Symbol.lparen:
index = 0
while 1:
self.nextsym()
if self.sym.symtype == Symbol.ident:
index = self.table.position(self.sym.id) # 查找标识符位置
if index == 0: # 未找到
Error.strerrno(35, self.lex.lineCnt, self.lex.chCount) # 变量未声明
else:
item = self.table.get(index)
if item.type != Item.variable:
Error.strerrno(15, self.lex.lineCnt, self.lex.chCount) # 不可以为变量和过程
else:
self.interperter.gen(Pcode.OPR, 0, 16) # 读操作到栈顶
self.interperter.gen(Pcode.STO, lev - item.lev, item.addr) # 保存到相对偏移处
self.nextsym()
if self.sym.symtype != Symbol.comma: # 循环处理至无逗号
break
else:
Error.strerrno(34, self.lex.lineCnt, self.lex.chCount) # 应为左括号
if self.sym.symtype == Symbol.rparen:
self.nextsym()
else:
Error.strerrno(33, self.lex.lineCnt, self.lex.chCount) # 应为右右括号
while self.sym.symtype not in fsys: # 不在follow集中,继续读,纠错
self.nextsym()
if self.sym.symtype != Symbol.semicolon:
Error.strerrno(5, self.lex.lineCnt, self.lex.chCount)
self.nextsym()