3

通訳を書いています。私は以前にそれを行ったことがありますが、のような式で機能するものを試したことはありません3 + 4 * 2 / ( 1 − 5 ) ^ 2 ^ 3

解析プロセスに問題はありません。実際には、VMがコードを実行します。

私の目標は高速インタプリタだったので、たとえば(push、push、mul)のように、乗算に複数の命令が必要なスタックベースのVMを使用しないことにしました。

パーサーによって生成されたVMの「アセンブリ」コードは次のようになります。

3 + 4 * 2 / ( 1 − 5 ) ^ 2 ^ 3

になります

sub 1         5
pow result    2
pow result    3
div 2         result 
mul 4         result
add 3         result

(結果は正しいです)

  • ご覧のとおり、すべての命令は1つまたは2つの引数を取りません。最後の命令の結果を保持する結果レジスタがあります。以上です。

この構造の言語と1つのレジスタのみを備えたVMは、PythonやPHPなどのすべての数式を計算できますか?

スタックなしでは不可能な場合は、今すぐやり直します。

4

1 に答える 1

4

(1 + 2)*(3 + 4)、または複数の中間結果を計算する必要があるその他のことについてどうしますか?

于 2010-05-21T18:23:18.253 に答える