Compiler-design-phases-of-compiler

提供:Dev Guides
移動先:案内検索

コンパイラ設計-コンパイラのフェーズ

コンパイルプロセスは、さまざまなフェーズのシーケンスです。 各フェーズは前のステージから入力を受け取り、ソースプログラムの独自の表現を持ち、その出力をコンパイラの次のフェーズに送ります。 コンパイラのフェーズを理解しましょう。

コンパイラのフェーズ

字句解析

スキャナーの最初のフェーズは、テキストスキャナーとして機能します。 このフェーズでは、ソースコードを文字のストリームとしてスキャンし、意味のある語彙素に変換します。 字句アナライザは、これらの語彙素をトークンの形式で次のように表します。

<token-name, attribute-value>

構文解析

次のフェーズは、構文解析または*解析*と呼ばれます。 字句解析によって生成されたトークンを入力として受け取り、解析ツリー(または構文ツリー)を生成します。 このフェーズでは、トークンの配置がソースコードの文法に対してチェックされます。 パーサーは、トークンによって作成された式が構文的に正しいかどうかをチェックします。

意味解析

セマンティック分析は、構築された解析ツリーが言語の規則に従っているかどうかをチェックします。 たとえば、値の割り当ては互換性のあるデータ型間で行われ、整数に文字列を追加します。 また、セマンティックアナライザーは、識別子、そのタイプ、および式を追跡します。識別子が使用前に宣言されているかどうかなど セマンティックアナライザーは、注釈付きの構文ツリーを出力として生成します。

中間コード生成

セマンティック分析の後、コンパイラはターゲットマシンのソースコードの中間コードを生成します。 これは、いくつかの抽象的なマシン用のプログラムを表します。 高水準言語と機械語の中間にあります。 この中間コードは、ターゲットマシンコードに簡単に変換できるように生成する必要があります。

コード最適化

次のフェーズでは、中間コードのコード最適化を行います。 最適化は、不必要なコード行を削除し、リソース(CPU、メモリ)を無駄にせずにプログラムの実行を高速化するために一連のステートメントを整理するものと見なすことができます。

コード生成

このフェーズでは、コードジェネレーターは中間コードの最適化された表現を取得し、ターゲットマシン言語にマップします。 コードジェネレーターは、中間コードを(一般的に)再配置可能なマシンコードのシーケンスに変換します。 機械語コードの命令のシーケンスは、中間コードが行うようにタスクを実行します。

シンボルテーブル

これは、コンパイラのすべての段階で維持されるデータ構造です。 すべての識別子の名前とそのタイプがここに保存されます。 シンボルテーブルを使用すると、コンパイラは識別子レコードをすばやく検索して取得しやすくなります。 シンボルテーブルは、スコープ管理にも使用されます。