アセンブラー用のコードを作成しましたが、Pythonはまだ初めてです。
私のコードでは、アセンブリ言語に変換されるファイルをユーザーに入力させています。ほぼ動作していると思いますが、ユーザーがファイル名をどこに入力したのかわかりません。
私は(私が思うに)アイドル状態にあり、F5を押すとシェルで実行されます。エラーが発生しますが、ファイル名が入力されていないことが原因であると確信しています。
ユーザーはこれらの種類のものをどこに入力することになっていますか?これはPythonシェルから実行されますか、それともコマンドラインから実行されますか?実行可能ファイルに変換する必要がありますか?
誰かがユーザーがこのすべての情報を入力している場所を明確にするのを手伝ってもらえますか?
私の質問に答える必要はないと思いますが、コードのセグメントを入れますが、おそらくそれは私の問題のより良いアイデアをあなたに与えるでしょう。
if __name__ == '__main__':
import sys
if len(sys.argv) == 1:
print 'need filename'
sys.exit(-1)
table = SymbolTable()
parser = Parser(sys.argv[1])
parser.advance()
line = 0
while parser.hasMoreCommands():
if parser.commandType() == 'L_COMMAND':
table.addEntry(parser.symbol(), line)
else:
line += 1
parser.advance()
code = Code()
parser = Parser(sys.argv[1])
parser.advance()
var_stack = 16
while parser.hasMoreCommands():
cmd_type = parser.commandType()
if cmd_type == 'A_COMMAND':
number = 32768
try:
addr = int(parser.symbol())
except:
if table.contains(parser.symbol()):
addr = table.getAddress(parser.symbol())
else:
table.addEntry(parser.symbol(), var_stack)
addr = var_stack
var_stack += 1
bin_number = bin(number | addr)[3:]
assembly = '0' + bin_number
print assembly
elif cmd_type == 'C_COMMAND':
assembly = '111'
assembly += code.comp(parser.comp())
assembly += code.dest(parser.dest())
assembly += code.jump(parser.jump())
print assembly
parser.advance()
注意すべき部分は、ファイル名をチェックしている最初の4〜6行目です。したがって、プログラムを実行すると、「needfilename」が画面に出力され、次のようなエラーメッセージが表示されます。
Traceback (most recent call last):
File "C:\Python27\Assembler.py", line 98, in <module>
sys.exit(-1)
SystemExit: -1
では、このエラーを回避するためにファイル名をどこに入力できますか?