2016-09-01 11 views
0

これで仮想マシンを開発しました。バイトコードインタープリタはflexとbisonを使用します。ここで は、例えば、いくつかのコードです:bisonベースのインタプリタで分岐を実装する方法は?

some: 
add r0 4 4 
jmp some 

私の質問は:JMP命令をどのように扱いますか? バイソンにラベルに戻って分析を続けるよう依頼できますか?

が、私はバイトコードのインタプリタを開発、

+0

重複したhttp://stackoverflow.com/questions/37186​​142/goto-label-in-the-same-loop-in-bison/ –

答えて

0

いいえ、あなたはバイソンが戻って行くことはできません...コンパイラではありません。あなたは通常、コードを解析して何らかの中間表現を生成するBisonです。 ASTやバイトコードのように。その後、別の手順でそれを実行します。

あなたのケースでは、バイトコード形式のアセンブリ言語を解析しているので、それを実際のバイトコードに変換するのが理にかなっています。パーサーが "add r0 4 4"を見たとき、バイトコードを含む配列に対応するバイトシーケンスを追加するだけです。パーサがこの配列を作成した後、実際にバイトコードを実行する関数に渡すことができます。

ソースファイルをバイナリバイトコードファイルに変換するアセンブラと、バイトコードファイルを読み込んで実行するバイトコードインタプリタという2つの別々のプログラムに分割することも意味があります。後者はBisonをまったく使用する必要はなく、バイトとswitchを読み込むだけです。

+0

ああ、わかった! まずバイトコードのテキスト版を実際のバイナリバイトコード(アセンブラ)で翻訳し、別のプログラム/アルゴリズムで実行します。 英語は母国語ではありません...「中間バイトコード」、「実際のバイトコード」という名前はありますか? – Saitei

+0

@Saiteiテキストバージョンは、通常、「アセンブリコード/言語」または「アセンブリ」(実際の機械語のテキストバージョンと同じように)と呼ばれ、バイナリバージョンは「バイトコード」と同じです。 – sepp2k

+0

ありがとうございました!あなたは私をたくさん助けました! – Saitei

関連する問題