高級言語のソースプログラムをターゲットプログラムに加工するシステムソフトウェアが「コンパイラ」です。コンパイラとは、高級プログラミング言語で記述されたソース プログラムを、機械語形式の同等のターゲット プログラムに翻訳する翻訳プログラムを指します。ソースプログラムをターゲットプログラムに変換するコンパイラの作業プロセスは、字句解析、構文解析、中間コード生成、コード最適化、ターゲットコード生成の5つの段階に分かれており、主に字句解析と構文解析(ソースプログラム解析とも呼ばれます) , 分析中に文法上のエラーが見つかった場合は、プロンプトメッセージが表示されます。
このチュートリアルの動作環境: Windows 7 システム、Dell G3 コンピューター。
高級言語で書かれたソースプログラムを処理してターゲットプログラムにするシステムソフトウェアが「コンパイラ」です。
コンパイラ、コンパイル プログラム (コンパイラとも呼ばれる) は、高級プログラミング言語で書かれたソース プログラムを機械語形式の同等のターゲット プログラムに翻訳する翻訳プログラムを指します。コンパイラは、生成的実装アプローチを使用して実装される翻訳プログラムです。高級プログラミング言語で書かれたソースプログラムを入力とし、アセンブリ言語や機械語で表現されたターゲットプログラムを出力とします。コンパイルされたターゲット プログラムは、通常、実行中のプログラムのサポートを受けて実行し、初期データを処理し、必要な計算結果を計算するために、実行段階も通過します。
コンパイラはソース プログラムを解析し、それをターゲット プログラムに合成する必要があります。まず、ソース プログラムの正当性をチェックし、それをいくつかの基本コンポーネントに分解し、次に、これらの基本コンポーネントに基づいて、対応する同等のターゲット プログラム部分を確立します。これらのタスクを完了するために、コンパイラは分析フェーズ中にいくつかのテーブルを作成し、分析および合成中に簡単に参照および処理できるようにソース プログラムを中間言語形式に変換する必要があります。
コンパイラの特徴:
コンパイラはソース プログラムを解析し、それをターゲット プログラムに合成する必要があります。まず、ソース プログラムの正当性をチェックし、それをいくつかの基本コンポーネントに分解し、次に、これらの基本コンポーネントに基づいて、対応する同等のターゲット プログラム部分を確立します。これらのタスクを完了するために、コンパイラは分析フェーズ中にいくつかのテーブルを作成し、分析および合成中に簡単に参照および処理できるようにソース プログラムを中間言語形式に変換する必要があります。
データ構造の分析と合成で使用される主なデータ構造には、シンボル テーブル、定数テーブル、中間言語プログラムなどがあります。シンボル テーブルは、ソース プログラムで使用される識別子とその属性で構成されます。属性には、型 (変数、配列、構造体、関数、プロシージャなど)、型 (整数、実数型、文字列、複合型など) が含まれます。 、ラベル)など)、およびターゲット プログラムで必要なその他の情報。定数テーブルは、ソース プログラムで使用される定数 (定数のマシン表現を含む)、および定数に割り当てられたターゲット プログラムのアドレスで構成されます。中間言語プログラムは、ソース プログラムをターゲット プログラムに変換する前に導入されるプログラムの中間形式であり、その表現の選択は、コンパイラが後でそれをどのように使用および処理するかによって決まります。一般的に使用される中間言語形式には、ポーランド語表現、トリプル、クアドルプル、および間接トリプルが含まれます。
ソースプログラムの一部の解析は、字句解析、構文解析、意味解析の3つのステップで行われます。字句解析は、字句解析プログラム (スキャナーとも呼ばれます) によって完了します。そのタスクは、単語 (つまり、識別子、定数、予約語、さまざまな演算子、句読点など) を識別し、記号テーブルと定数テーブルを作成し、変換 ソースプログラムをコンパイラが解析・処理しやすい内部形式に変換します。構文アナライザーはコンパイラーの中核部分であり、その主な役割は、ソース プログラムが言語の文法規則に従って文法的であるかどうかをチェックすることです。文法的でない場合は構文エラーメッセージが出力され、文法的である場合はソースプログラムの文法構造を分解して中間言語形式の内部プログラムを構築します。文法分析の目的は、単語がどのように文を形成し、ステートメントがどのようにプログラムを形成するかを理解することです。意味解析プログラムは、法的なプログラム構造が意味的に正しいかどうかをさらにチェックし、識別子や定数が正しく使用されていることを確認し、必要な情報を収集してシンボルテーブルや中間言語プログラムに保存し、対応する意味処理を実行することを目的としています。
コンパイラの作業プロセス
コンパイラはコンパイル システムとも呼ばれ、高言語で書かれたプロセス指向のソース プログラムを翻訳します。レベル言語をターゲット プログラムの言語プロセッサに組み込みます。ソース プログラムをターゲット プログラムに変換するコンパイラのプロセスは、字句解析、構文解析、中間コード生成、コードの最適化、ターゲット コードの生成の 5 つの段階に分かれています。主にソースプログラム解析とも呼ばれる字句解析と構文解析を行い、解析の過程で文法上の誤りを発見し、迅速な情報を提供します。
(1) 字句解析
字句解析のタスクは、文字で構成される単語を処理し、ソース プログラムを 1 文字ずつ左から右にスキャンすることです。文字列としてのソースプログラムを単語記号列の中間プログラムに変換します。字句解析を実行するプログラムは、レクサーまたはスキャナーと呼ばれます。
ソース プログラム内の単語シンボルはスキャナーによって分析され、通常、単語カテゴリ、単語自体の値といったバイナリ式が生成されます。単語カテゴリは通常、整数でエンコードされます。カテゴリに単語シンボルが 1 つだけ含まれている場合、この単語シンボルについては、カテゴリのエンコードはそれ自体の値を完全に表します。カテゴリに多くの単語シンボルが含まれている場合、カテゴリ コードに加えて、その単語シンボルごとに独自の値も指定する必要があります。
字句解析器は通常、手動構築と自動生成の 2 つの方法で構築されます。手動による構築は状態図を使用して機能し、自動生成は決定論的な有限オートマトンを使用して実装できます。
(2) 構文解析
コンパイラの構文解析器は、単語記号を入力として、単語記号列が文法規則に適合した文法単位を形成しているかどうかを解析します。式、代入、ループなどの式を実行し、最終的に要件を満たすプログラムを構成しているかどうかを確認し、各文が言語の文法規則に従って正しい論理構造を持っているかどうかを分析して確認します。最後の文法単位。コンパイラの文法規則は、文脈自由文法によって特徴付けることができます。
構文分析には、トップダウン分析とボトムアップ分析の 2 つの方法があります。トップダウンとは、文法の開始記号から始めて、下向きに推論して文を導き出すことを意味します。ボトムアップ分析手法はシフトイン リダクション手法を使用しており、基本的な考え方は、登録シンボルの先入れ後ポップアウトを使用して、入力シンボルを 1 つずつスタックに移動することです。特定の表現の候補を選択すると、スタックの上部がその表現の左隣のシンボルに減らされます。
(3) 中間コード生成
中間コードは、ソース プログラムの内部表現、または中間言語です。中間コードの機能は、コンパイルされたプログラムの構造を論理的により単純かつ明確にし、特にターゲット コードの最適化を実装しやすくすることです。中間コードは中間言語プログラムであり、中間言語の複雑さはソースプログラム言語と機械語の中間にあります。中間言語には多くの形式がありますが、一般的な形式は、逆ポーランド記法、四字形、三項形式、およびツリーです。
(4) コードの最適化
コードの最適化とは、変換されたプログラムから始めて、より効果的な目標を達成するコードを生成できるように、プログラム上で複数の同等の変換を実行することを指します。いわゆる等価性とは、プログラムの実行結果が変更されないことを意味します。いわゆる効果的とは主に、ターゲット コードの実行時間が短く、占有されるストレージ容量が小さいことを指します。この変換は最適化と呼ばれます。
最適化には 2 種類あり、1 つは特定のコンピューターに依存せず、構文解析後の中間コードを最適化するもの、もう 1 つはターゲット コードを生成する際に実行されるもので、これはかなりの範囲で行われます。特定のコンピュータに依存します。前者のタイプの最適化は、関係するプログラムの範囲に応じて、ローカル最適化、ループ最適化、およびグローバル最適化の 3 つの異なるレベルに分類できます。
(5) ターゲット コードの生成
ターゲット コードの生成はコンパイルの最終段階です。ターゲット コード ジェネレーターは、構文解析または最適化された中間コードをターゲット コードに変換します。ターゲット コードには 3 つの形式があります:
① すぐに実行できる機械語コード (すべてのアドレスが再配置されます);
② アセンブルされる機械語モジュール (接続時に接続によってロードされます)実行する必要があります プログラムはそれらを特定の実行中のプログラムに接続し、それらを実行可能な機械語コードに変換します;
③ アセンブリ言語コードは、実行可能な機械語コードになるようにアセンブラーによってコンパイルされる必要があります。
ターゲット コードの生成段階では、ターゲット コードの速度に直接影響する 3 つの問題を考慮する必要があります: 1 つ目は、より短いターゲット コードを生成する方法、2 つ目は、コンピュータ内のレジスタを最大限に活用して負荷を減らす方法ターゲットコードが記憶装置にアクセスする時間 3 つ目は、コンピュータ命令システムの特性を最大限に活用してターゲットコードの品質を向上させる方法です。
関連知識の詳細については、FAQ 列をご覧ください。
以上が高級言語のソースプログラムをターゲットプログラムに加工できるシステムソフトウェアとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。