0

小さな実験のために、独自のスクリプト言語と仮想マシンを最初から実装してきました。スクリプトリーダーはスクリプトを解析し、ランタイムエンジンが実行する一連の命令に変換します。

最初は考えていませんでしたが、今はフロー制御(ループ、分岐など)を含めたいと思います。私は言語理論に精通しておらず、インスピレーションを得るためにいくつかの例を見ただけです。

ただし、x86とJava仮想マシンの両方に、フロー制御に使用される多数の命令があります。x86には、フラグの状態に基づいてジャンプする命令や、関連するフラグを何らかの方法で操作するその他の命令がたくさんあります。Javaには、ある種の比較と条件付きジャンプを行う16の命令があるようです。

これは効率的であるか、ハードウェア固有の理由によって動機付けられている可能性がありますが、私が探しているものではありません。

私は、フロー制御に対する無駄のないエレガントなソリューションを探しています。これは、いくつかの専用の命令を必要とするだけで、実装と保守が複雑すぎないものです。

うまくいくものを思いつくことができるとかなり確信していますが、車輪の再発明をするのではなく、知識を向上させたいと思っています。説明や関連資料へのリンクは大歓迎です!

4

1 に答える 1

1

一般に、フロー制御に必要な最小プリミティブは次のとおりです。

  • 無条件ジャンプ

  • 条件付きジャンプ

これらのうち、条件付きジャンプは複雑なものであり、少なくとも以下をアトミックにサポートする必要があります。

  • バイナリ変数/フラグをテストする

  • フラグが設定されている場合、命令の実行を指定された場所にジャンプさせます

  • フラグが設定されていない場合は、命令の実行を中断せずに続行できるようにします

ただし、このようなプリミティブな条件付きジャンプでは、言語のフロー制御構造で使用できるすべてのタイプのブール式に対して、そのバイナリ変数/フラグを適切な値に設定する方法が必要になります。

したがって、これは、バイナリ変数/フラグを設定するためのさまざまな複雑さのさまざまなプリミティブの必要性、または目的の効果を得るために複雑な命令シーケンスを発行する必要性のいずれかにつながります。

もう1つの方法は、より複雑な条件付きジャンププリミティブを導入することです。

一般に、次のそれぞれの数と複雑さの間にはトレードオフがあります。条件付きジャンププリミティブ。条件(変数/フラグ)設定プリミティブ; 放出された指示。

于 2013-01-13T20:55:07.783 に答える