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