我有一个任务是使用我想要的任何语言构建一个两遍汇编器。我选择了蟒蛇。它对我很有帮助,除了一个小问题。
我使用 .asm 输入文件构建了一个符号表。然后我使用符号表来创建目标代码。我的代码如下:
import re,os
import ast
fr=open("2input.asm","r")
fw=open("symbol.txt","r+")
objFile=open("symbol1.txt","w")
str2=fr.readline() #reads lines in file
temp=""
str1="" #used for splitting original string
var=""
var1=""
printstr=""
location=map(int, re.findall('\d+',str2)) #extracts location in the form of string and then converts it to integer
loc=location[0] #converts location from list form to integer form
for line in fr: #creates a symbol table
str2=line
loc=loc+1
if str2.find(":")!=-1:
str1=str2.split(":")
str1.append(str(loc))
print>>fw, str1
elif str2.find("DC")!=-1:
str1=str2.split("DC")
str1.append(str(loc))
print>>fw, str1
elif str2.find("DS")!=-1:
str1=str2.split("DS")
str1.append(str(loc))
print>>fw, str1
#symbol table created
fw.seek(0)
fr.seek(0)
for line in fr: #creates object file
str2=line
if str2.find("READ")!=-1:
str1=str2.split()
var=str1[1]
for line in fw:
var1=ast.literal_eval(line)
var2=var1[0]
if var==var2: #it never goes in this if even if the condition is true
printstr="rohit"
print>>objFile, printstr
fw.close()
在最后一个 if 条件中,我使用 ast 库将列表格式的字符串转换为列表数据类型。
如果控制永远不会进入最后一个,为什么会发生这种情况?控制如何进入if?即使两个字符串相同,控制也不会进入 if。为什么会这样?
“symbol.txt”文件包含一些行,所有行都以列表格式存储。这些行正在通过 ast 语句转换为列表数据类型。
编辑:
我遇到了问题。显然,ast 语句在将字符串转换为列表数据类型时添加了一些额外的空格,这导致了 if 条件的伪造。我因此更改了 if 条件:
if var1 in var2:
#do my job