これで仮想マシンを開発しました。バイトコードインタープリタはflexとbisonを使用します。ここで は、例えば、いくつかのコードです:bisonベースのインタプリタで分岐を実装する方法は?
some:
add r0 4 4
jmp some
私の質問は:JMP命令をどのように扱いますか? バイソンにラベルに戻って分析を続けるよう依頼できますか?
が、私はバイトコードのインタプリタを開発、
これで仮想マシンを開発しました。バイトコードインタープリタはflexとbisonを使用します。ここで は、例えば、いくつかのコードです:bisonベースのインタプリタで分岐を実装する方法は?
some:
add r0 4 4
jmp some
私の質問は:JMP命令をどのように扱いますか? バイソンにラベルに戻って分析を続けるよう依頼できますか?
が、私はバイトコードのインタプリタを開発、
いいえ、あなたはバイソンが戻って行くことはできません...コンパイラではありません。あなたは通常、コードを解析して何らかの中間表現を生成するBisonです。 ASTやバイトコードのように。その後、別の手順でそれを実行します。
あなたのケースでは、バイトコード形式のアセンブリ言語を解析しているので、それを実際のバイトコードに変換するのが理にかなっています。パーサーが "add r0 4 4"を見たとき、バイトコードを含む配列に対応するバイトシーケンスを追加するだけです。パーサがこの配列を作成した後、実際にバイトコードを実行する関数に渡すことができます。
ソースファイルをバイナリバイトコードファイルに変換するアセンブラと、バイトコードファイルを読み込んで実行するバイトコードインタプリタという2つの別々のプログラムに分割することも意味があります。後者はBisonをまったく使用する必要はなく、バイトとswitch
を読み込むだけです。
重複したhttp://stackoverflow.com/questions/37186142/goto-label-in-the-same-loop-in-bison/ –