0

任意の言語を使用して 2 パス アセンブラを作成する割り当てがあります。私はパイソンを選びました。1つの短い問題を除いて、それは私に役立ちました.

.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
4

1 に答える 1