コンパイラの構造
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/10 20:29 UTC 版)
コンパイラ自身はモノリシックなプログラムではない。これは システムから可視な Forth ワードとプログラマから利用可能なものとからなっている。このことはプログラマが特殊な目的のためにコンパイラのワードを変更することを可能にする。 名前フィールド内の「コンパイル時」フラグは、「コンパイル時」の振る舞いのワードのセットである。ほとんどの単純なワードは、それがコマンドライン上で入力されたかコードに埋め込まれたかにかかわらず、同じコードが実行される。そのようにコンパイルされるとき、コンパイラはコードかワードへのスレッデッドポインタを単に配置する。 コンパイル時ワードの古典的な例は IF and WHILE といった制御構造である。Forth のすべての制御構造とほとんどすべてのコンパイラはコンパイル時ワードとして実装される。すべての Forth 制御フローワードは、プリミティブなワードBRANCHや?BRANCH(もしfalseなら分岐する)の各種の組み合わせをコンパイルするために、コンパイルの間に実行される。コンパイルの間、データスタックは制御構造のバランシング、ネスティング、ブランチアドレスのバックパッチングをサポートするのに使われる。コード断片 ... DUP 6 < IF DROP 5 ELSE 1 - THEN ... は定義の内側では典型的には次のような一連にコンパイルされる。 ... DUP LIT 6 < ?BRANCH 5 DROP LIT 5 BRANCH 3 LIT 1 - ... BRANCHのあとの数のは相対的なジャンプアドレスを表している。LITは「リテラル」数値をデータスタックにプッシュするためのプリミティブなワードである。
※この「コンパイラの構造」の解説は、「Forth」の解説の一部です。
「コンパイラの構造」を含む「Forth」の記事については、「Forth」の概要を参照ください。
- コンパイラの構造のページへのリンク