2017-04-26 14 views
0

私は簡単なスタックベースのPythonバイトコードインタプリタを実装するチュートリアルhereに従っています。pythonバイトコードインタプリタの実装

私はこのfuncitonで問題が生じています:

def parse_byte_and_args(self): 
    ......... 
    if byteCode >= dis.HAVE_ARGUMENT: #<-----------------------this part 

正確dis.HACE_ARGUMENT何ですか?その大きな機能は私がここにそれを投稿するのではなく、むしろそこにリンクを張っていると思ったからです。必要なことを教えてください

答えて

0

あなたが定義している関数の文脈では、それに関連する引数を持っていてもいなくてもよい。

Python disassembler documentation for HAVE_ARGUMENTを見ると、この目的でdis.HAVE_ARGUMENTが正確に使用されていることがわかります。

つまり、byteCode> = dis.HAVE_ARGUMENTの場合、オペコードには引数があり、それらの処理方法を把握する必要があります。それ以外の場合は、オペコードに引数はなく、特別な処理は必要ありません。

おかげで、私は今それを得たのPython 3.6

+0

のように私は上記のリンク先のドキュメントによると、これはわずかに変化するので、注意してください。バイトコードインタプリタ – anekix

+0

を学ぶための他のソースを提案することができますか? 'arg_val = arg [0] +(arg [1] * 256)'という文もこの関数にあります。なぜ256で乗算するのですか? – anekix

+0

私は短期間通訳をしている間に、概念(ウィキペディアなど)を説明した一般的なリソースと、別人が独自に実装した特定のリソースの2種類のリソースを調べると役に立ちました。後者の例:[Extensible Interpreter Development Kit](http://www.parsifalsoft.com/examples/xidek/xidek/doc/bcidefs.htm)と[私の最も重要なプロジェクトはバイトコードインタープリタでした](https:// news.ycombinator.com/item?id=12553591) – DatHydroGuy