通訳を書いています。私は以前にそれを行ったことがありますが、のような式で機能するものを試したことはありません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などのすべての数式を計算できますか?
スタックなしでは不可能な場合は、今すぐやり直します。