コンパイラ設計とは何ですか? 種類、構築ツール、例

コンパイラとは何ですか?

コンパイラは、高級言語で書かれたソース コードを低レベルの機械語に変換するのに役立つコンピューター プログラムです。 あるプログラミング言語で書かれたコードを、コードの意味を変えることなく別の言語に翻訳します。 また、コンパイラーは最終コードを効率的にし、実行時間とメモリースペースが最適化されます。

コンパイル プロセスには、基本的な変換メカニズムとエラー検出が含まれます。 コンパイラ プロセスでは、フロントエンドで字句、構文、意味の分析が行われ、バックエンドでコードの生成と最適化が行われます。

コンパイラ

コンパイラの特徴

  • 正しさ
  • コンパイルの速度
  • コードの正しい意味を保持する
  • ターゲットコードの速度
  • 合法的および違法なプログラム構成を認識する
  • 優れたエラー報告/処理
  • コードのデバッグのヘルプ

コンパイラの種類

コンパイラには次のような種類があります。

  • シングルパスコンパイラ
  • XNUMX つのパス コンパイラ
  • マルチパスコンパイラ

シングルパスコンパイラ

シングルパスコンパイラ
シングルパスコンパイラ

シングルパスで、コンパイラのソース コードがマシン コードに直接変換されます。 たとえば、パスカル言語。

XNUMXパスコンパイラ

XNUMXパスコンパイラ
XNUMXパスコンパイラ

2 パス コンパイラは 2 つのセクションに分かれています。

  1. フロントエンド: 法的コードを中間表現 (IR) にマッピングします。
  2. バックエンド: IRをターゲットマシンにマッピングします

XNUMX パス コンパイラ メソッドにより、リターゲット プロセスも簡素化されます。 また、複数のフロントエンドも可能になります。

マルチパスコンパイラ

マルチパスコンパイラ
マルチパスコンパイラ

マルチパス コンパイラは、プログラムのソース コードまたは構文ツリーを複数回処理します。 大きなプログラムを複数の小さなプログラムに分割して処理します。 複数の中間コードを開発します。 これらのマルチパスはすべて、前のフェーズの出力を入力として受け取ります。 したがって、必要なメモリが少なくなります。 「ワイドコンパイラ」とも呼ばれます。

コンパイラのタスク

コンパイラによって実行される主なタスクは次のとおりです。

  • ソースプログラムをいくつかの部分に分割し、それらに文法構造を課します。
  • 中間表現から目的のターゲット プログラムを構築し、シンボル テーブルを作成することもできます。
  • ソースコードをコンパイルし、ソースコード内のエラーを検出します
  • すべての変数とコードのストレージを管理します。
  • 個別コンパイルのサポート
  • プログラム全体を読み取り、分析し、意味的に同等なものに変換します。
  • マシンの種類に応じてソース コードをオブジェクト コードに変換する

コンパイラの歴史

コンパイラの歴史の重要なランドマークは次のとおりです。

  • 「コンパイラー」という言葉は、1950 年代初頭にグレース・マレー・ホッパーによって初めて使用されました。
  • 最初のコンパイラは、1954 年から 1957 年にかけて John Backum と彼のグループによって構築されました。 IBM.
  • COBOLが最初だった プログラミング言語 1960 年に複数のプラットフォームでコンパイルされた
  • スキャンと解析の問題の研究は、完全な解決策を提供するために 1960 年代と 1970 年代に追求されました。

言語処理システムの手順

コンパイラの概念を理解する前に、まずコンパイラと連携して動作する他のツールをいくつか理解する必要があります。

言語処理システムの手順
言語処理システムの手順
  • プリプロセッサ: プリプロセッサはコンパイラの一部とみなされます。 コンパイラへの入力を生成するツールです。 マクロ処理、拡張、言語拡張などを扱います。
  • 通訳: インタプリタは、高級言語を低レベルの機械語に翻訳するコンパイラのようなものです。 両者の主な違いは、インタプリタがコードを XNUMX 行ずつ読み取って変換することです。 コンパイラはコード全体を一度に読み取り、マシンコードを作成します。
  • アセンブラ: アセンブリ言語コードを機械が理解できる言語に変換します。アセンブラの出力結果はオブジェクト ファイルと呼ばれ、機械命令と、これらの命令をメモリに格納するために必要なデータの組み合わせです。
  • リンクス: リンカーは、さまざまなオブジェクト ファイルをリンクおよびマージして実行可能ファイルを作成するのに役立ちます。 これらのファイルはすべて、別のアセンブラでコンパイルされている可能性があります。 リンカの主なタスクは、プログラム内で呼び出されるモジュールを検索し、すべてのモジュールが格納されているメモリの場所を見つけることです。
  • ローダー: ローダーは OS の一部であり、実行可能ファイルをメモリにロードして実行するタスクを実行します。 また、追加のメモリ領域を作成するプログラムのサイズも計算されます。
  • クロスコンパイラ: コンパイラ設計におけるクロス コンパイラは、実行可能コードの生成を支援するプラットフォームです。
  • ソース間コンパイラー: ソースツーソースコンパイラとは、あるプログラミング言語のソースコードを別の言語のソースに翻訳するときに使用される用語です。

コンパイラ構築ツール

コンパイラ構築ツールは、コンピュータ関連技術が世界中に広まるにつれて導入されました。コンパイラ、コンパイラ ジェネレータ、またはトランスレータとも呼ばれます。

これらのツールは、コンパイラのコンポーネントを指定および実装するために特定の言語またはアルゴリズムを使用します。以下は、コンパイラ構築ツールの例です。

  • スキャナジェネレータ: このツールは正規表現を入力として受け取ります。たとえば、Unix の LEX Operaティンシステム。
  • 構文指向の翻訳エンジン:これら ソフトウェア·ツール 解析木を利用して中間コードを提供します。 これには、XNUMX つ以上の翻訳を解析ツリーの各ノードに関連付けるという目的があります。
  • パーサージェネレーター: パーサー ジェネレーターは文法を入力として受け取り、文法の助けを借りて文字のストリームを解析できるソース コードを自動的に生成します。
  • 自動コードジェネレータ: 中間コードを取得し、それを機械語に変換します。
  • データフローエンジン: このツールはコードの最適化に役立ちます。 ここでは、ユーザーから情報が提供され、中間コードを比較して関連性を分析します。 データフロー分析とも呼ばれます。 これは、値がプログラムのある部分から別の部分にどのように送信されるかを調べるのに役立ちます。

コンパイラを使用する理由

  • コンパイラーはプログラム全体を検証するため、構文エラーや意味エラーはありません。
  • 実行可能ファイルはコンパイラによって最適化されるため、より高速に実行されます。
  • メモリ内に内部構造を作成できます。
  • プログラムを構築したのと同じマシン上でプログラムを実行する必要はありません。
  • プログラム全体を他の言語に翻訳します。
  • ディスク上にファイルを生成します。
  • ファイルを実行可能形式にリンクします。
  • 構文エラーとデータ型を確認してください。
  • 言語の意味論の理解を深めるのに役立ちます。
  • 言語パフォーマンスの問題の処理に役立ちます。
  • 簡単ではないプログラミング プロジェクトの機会。
  • コンパイラーの構築に使用される手法は、他の目的にも役立ちます。

コンパイラの適用

  • コンパイラの設計は、高級プログラミング言語の完全な実装に役立ちます。
  • コンピュータの最適化をサポート Archi構造の並列性。
  • マシンの新しいメモリ階層の設計。
  • プログラムの翻訳に広く使用されています。
  • 他のソフトウェア生産性向上ツールと一緒に使用されます。

まとめ

  • コンパイラは、高級言語で書かれたソース コードを低レベルの機械語に変換するのに役立つコンピューター プログラムです。
  • 正確性、コンパイル速度、コードの正しい意味の保持は、コンパイラ設計の重要な機能です。
  • コンパイラは、1) シングルパス コンパイラ、2) 3 パス コンパイラ、XNUMX) マルチパス コンパイラの XNUMX つの部分に分かれています。
  • 「コンパイラー」という言葉は、1950 年代初頭にグレース・マレー・ホッパーによって初めて使用されました。
  • 言語処理システムのステップは、プリプロセッサ、インタプリタ、アセンブラ、リンカ/ローダです。
  • 重要なコンパイラ構築ツールは、1) スキャナ ジェネレーター、2) 構文、3) 直接変換エンジン、4) パーサー ジェネレーター、5) 自動コード ジェネレーターです。
  • コンパイラの主なタスクは、プログラム全体を検証することであるため、構文エラーや意味エラーが存在しません。