コンパイル プロセスは 5 つの段階に分けることができます: 1. 字句解析段階: この段階では、ソース プログラムを構成する文字列をスキャンして分解し、各単語を識別します。 2. 構文分析段階。文の文法構造を分析するために使用されます。 3. セマンティック分析と中間コード生成段階。 4. コードの最適化段階。 5. ターゲットコード生成プログラムステージ。
このチュートリアルの動作環境: Windows 10 システム、Dell G3 コンピューター。
ソース プログラムをターゲット プログラムに変換するコンパイラのプロセスは、字句解析、構文解析、中間コード生成、コードの最適化、ターゲット コード生成の 5 つの段階に分かれています。
コンパイル プログラムは通常、字句解析、構文解析、意味解析と中間コード生成、コードの最適化、ターゲット コード生成の 5 つの段階に分かれています。
コンパイル プロセスの 5 つの段階について詳しく説明します。
コンパイラの仕事は、ソース プログラムの入力からターゲット プログラムの出力までのプロセス全体が非常に複雑です。複雑。しかし、そのプロセスという点では、人間による自然言語の直接翻訳と多くの類似点があります。英語の段落を中国語に翻訳するなど、あるテキストを別のテキストに翻訳する場合、通常は次の手順を実行する必要があります:
(1) まず、文内の各単語を識別します ;
(2) 文の文法構造を解析する;
(3) 文の意味に応じた仮訳;
(4) 訳文を修正する;
(5)最終的な翻訳を書きます。
同様に、コンパイラの作業プロセスも、字句解析、構文解析、意味解析と中間コード生成、最適化、ターゲット コード生成の 5 つの段階に分けることができます。
第 1 段階: 字句解析
字句解析のタスクは、ソース プログラムを入力し、ソース プログラムを構成する文字列を走査および分解し、特定することです。基本的な単語 (begin、end、if、for、while)、識別子、定数、演算子、区切り文字 (句読点、左括弧、右括弧) などの各単語 (単語シンボルまたは単にシンボルとも呼ばれます)。
単語シンボルは言語の基本コンポーネントであり、人々がプログラムを理解して作成するための基本要素です。これらの要素を特定し、理解することが翻訳の基礎であることは間違いありません。英語から中国語への翻訳と同じで、英語の単語が理解できなければ正しく翻訳することはできません。字句解析段階で従うのは、言語の語彙規則 (または単語形成規則) です。語彙規則を記述するための効果的なツールは、形式的な形式と効率的なオートマトンです。
第 2 段階: 文法分析
文法分析のタスクは次のとおりです。語彙分析に基づいて、言語の文法規則に従って、単語記号を分解します。文字列を「フレーズ」、「センテンス」、「プログラムセグメント」、「プログラム」などの文法的な単位(文法カテゴリ)ごとに分割します。構文解析を通じて、入力文字列全体が文法的に正しい「プログラム」を構成しているかどうかが判断されます。文法分析は、言語の文法規則に従います。文法規則は通常、文脈自由文法を使用して記述されます。字句分析は線形分析ですが、構文分析は階層分析です。例: Z=したがって、構文解析の課題は、X 0.618 * Y を算術式として特定すると同時に、上記の記号列全体の 10 倍が代入文のカテゴリに属することを特定することです。
第 3 段階: 意味分析と中間コード生成
この段階のタスクは、構文分析によって特定されたさまざまな文法カテゴリの意味を分析し、予備的な処理を実行することです。翻訳(中間コードの生成)。この段階には通常、作業の 2 つの側面が含まれます。まず、変数が定義されているか、型が正しいかなど、文法カテゴリごとに意味的な整理を行います。セマンティクスが正しい場合、作業の反対側、つまり中間コードの解釈が実行されます。
この段階では、言語の意味規則に従います。セマンティック ルールは通常、属性文法を使用して記述されます。 「翻訳」はここで初めて機能し始めます。いわゆる「中間コード」は、意味が明確で処理が容易な表記システムであり、通常は特定のハードウェアに依存しません。この表記法は現代のコンピュータの命令形式にある程度近いか、比較的容易に現代のコンピュータの機械語命令に変換することができます。
たとえば、多くのコンパイラは、中間コードとして「3 アドレス命令」によく似た「4 進式」を使用します。その意味は、「左右のオペランド」(「演算子」で指定)に対して特定の演算を実行し、その演算によって得られた値を「結果」として保持することです。テトラグラムが中間コードとして使用される場合、中間コードを生成するタスクは、言語の文法規則に従ってさまざまなカテゴリをテトラグラム シーケンスに変換することです。
一般的に言えば、中間コードは特定のハードウェアに依存しない表記システムです。一般的に使用される中おばさんには、4 項式のほかに、3 項式、間接 3 項式、逆ポーランド記法、ツリー表現などが含まれます。
第 4 段階: コードの最適化
最適化のタスクは、より効率的な (節約された) ものを生成するために、前の段階で生成された中間コードを処理および変換することです。コード)最終段階、時間と空間)オブジェクトコード。最適化の主な側面には、PR 部分式の抽出、ループの最適化、無駄なコードの削除などが含まれます。場合によっては、「並列操作」を容易にするために、コードを並列化することもできます。最適化が従う原則は、プログラムの等価変換規則です。
第 5 段階: ターゲット コード生成プログラム
この段階のタスクは、中間コード (または最適化後のコード) を低レベル コードに変換することです。特定のマシン言語コード。この段階では最終的な変換が実装され、その作業はハードウェア システムの構造とマシン命令の意味に依存します。この段階での作業は非常に複雑で、ハードウェア システム機能コンポーネントの使用の設計、機械語命令の選択、さまざまなデータ型変数の記憶領域の割り当て、レジスタとバックアップ レジスタのスケジュール設定などが含まれます。
オブジェクトコードは、絶対命令コード、リロケータブル命令コード、またはアセンブリ命令コードの形式をとることができます。オブジェクトコードが絶対命令コードであれば、そのオブジェクトコードを即座に実行することができる。ターゲット コードがアセンブリ命令コードの場合、実行する前にアセンブラによってコンパイルする必要があります。現在、最も実用的なコンパイラによって生成されるオブジェクト コードは、再配置可能な命令コードであることを指摘しなければなりません。この種のターゲット コードは実行前に、接続アセンブリ プログラムを使用して各ターゲット モジュール (システムが提供するライブラリ関数を含む) を接続し、メイン メモリ内のプログラム変数 (または定数) の位置を決定し、指定したメモリをメモリに書き込み、その先頭アドレスにより絶対命令コードプログラムとして実行可能となります。
プログラミング関連の知識について詳しくは、プログラミング ビデオをご覧ください。 !
以上がコンパイルプロセスはいくつかの段階に分けることができますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。