コンパイラ設計のチュートリアル。 What is, Types, Tools, Example
コンパイラとは
コンパイラは、高級言語で書かれたソースコードを低級機械語へ変換するためのコンピュータ プログラムです。 あるプログラミング言語で書かれたコードを、コードの意味を変えることなく他の言語に変換します。 また、コンパイラは、実行時間やメモリ空間を最適化した効率的なコードを作成する。
コンパイルプロセスには、基本的な翻訳メカニズムやエラー検出が含まれます。 コンパイラーのプロセスは、フロントエンドで字句解析、構文解析、意味解析を行い、バックエンドでコード生成と最適化を行います。
このコンパイラー設計チュートリアルでは、
- コンパイラーとは何か?
- Features of Compilers
- Types of Compiler
- Tasks of Compiler
- History of Compiler
- Steps for Language processing systems
- Compiler Construction Tools
- Why use a Compiler?
- Application of Compilers
Features of Compilers
- Correctness
- Speed of compilation
- Preserve the correct the meaning of the code
- The speed of the target code
- Recognize legal and illegal program constructs
- Good error reporting/handling
- Code debugging help
Types of Compiler
Following are the different types of Compiler:
- Single Pass Compilers
- Two Pass Compilers
- Multipass Compilers
Single Pass Compiler
![Single Pass Compiler](https://www.guru99.com/images/1/020819_1135_CompilerDes2.png)
In single pass Compiler source code directly transforms into machine code. For example, Pascal language.
Two Pass Compiler
![Two Pass Compiler](https://www.guru99.com/images/1/020819_1135_CompilerDes4.png)
Two pass Compiler is divided into two sections, viz.
- Front end: It maps legal code into Intermediate Representation (IR).
- Back end: It maps IR onto the target machine
The Two pass compiler method also simplifies the retargeting process. It also allows multiple front ends.
Multipass Compilers
![Multipass Compilers](https://www.guru99.com/images/1/020819_1135_CompilerDes5.png)
マルチパスコンパイラはプログラムのソースコードや構文木を何度も処理するものです。 大きなプログラムを複数の小さなプログラムに分割して処理する。 複数の中間コードを生成する。 これらのマルチパスはすべて前段階の出力を入力とする。 そのため、必要なメモリが少なくて済む。 ワイドコンパイラ」とも呼ばれる。
コンパイラーのタスク
コンパイラーが実行する主なタスクは次のとおりです。
- ソースプログラムをバラバラに分解し、文法的な構造を与える
- 中間表現から目的のターゲットプログラムを構築できるようにし、シンボルテーブルも作成する
- ソースコードをコンパイルし、そのエラーを検出する
- すべての変数とコードの保存を管理する
- ソースコードをコンパイルする。
- 分割コンパイルのサポート
- プログラム全体を読み込み、解析し、意味的に等価なものに変換する
- マシンの種類に応じてソースコードをオブジェクトコードに変換する
コンパイラの歴史
コンパイラの歴史の重要なランドマークは、以下の通りです。
- 「コンパイラー」という言葉は、1950 年代初頭に Grace Murray Hopper によって初めて使われました
- 最初のコンパイラーは、John Backum とそのグループによって 1954 年から 1957 年にかけて IBM で作られました
- COBOL は、コンパイル可能な最初のプログラミング言語でした。 1960 年に複数のプラットフォームで
- スキャンと解析の問題の研究は、完全なソリューションを提供するために 1960 年代と 1970 年代に追求されました
言語処理システムのステップ
コンパイラの概念について知る前に、まず、コンパイラの概念を知ってください。 まず、コンパイラと一緒に動作する他のいくつかのツールについて理解する必要があります。
![言語処理システムに関する手順](https://www.guru99.com/images/1/020819_1135_CompilerDes6.png)
- プリプロセッサー(PP)。 プリプロセッサーは、コンパイラーの一部と考えられている。 これは、コンパイラの入力を生成するツールです。 マクロ処理、補強、言語拡張などを扱う。
- インタプリタ。 インタープリタはコンパイラと同様、高レベルの言語を低レベルの機械語に翻訳するものである。 両者の主な違いは、インタープリタがコードを一行ずつ読んで変換することです。 コンパイラはコード全体を一度に読み、機械語コードを作成する。
- アセンブラ。 アセンブリ言語のコードを機械が理解できる言語に変換する。 アセンブラの出力結果は、機械命令と、これらの命令をメモリに格納するために必要なデータの組み合わせであるオブジェクトファイルとして知られています。
- リンカ。 リンカーは、さまざまなオブジェクト ファイルをリンクおよびマージして、実行可能ファイルを作成するのに役立ちます。 これらのファイルはすべて、別々のアセンブラでコンパイルされている可能性があります。 リンカーの主なタスクは、プログラム内の呼び出されたモジュールを検索し、すべてのモジュールが格納されているメモリ位置を見つけることです。
- Loader (ローダー)。 ローダーはOSの一部であり、実行ファイルをメモリにロードして実行するという作業を行う。 また、プログラムのサイズを計算し、追加のメモリ領域を作成する。
- クロスコンパイラ。 コンパイラ設計におけるクロスコンパイラは、実行可能なコードを生成するのに役立つプラットフォームです。
- Source-to-source コンパイラー。 ソースからソースへのコンパイラは、あるプログラミング言語のソースコードが他の言語のソースに翻訳されるときに使用される用語です。
コンパイラー構築ツール
コンパイラー構築ツールは、コンピューター関連技術が世界中に広まるにつれて導入されました。 コンパイラ-コンパイラ、コンパイラ-ジェネレータ、トランスレータなどとも呼ばれます。
これらのツールは、コンパイラのコンポーネントを指定し、実装するために特定の言語やアルゴリズムを使用します。 以下は、コンパイラ構築ツールの例である。
- スキャナジェネレータ。 このツールは入力として正規表現を受け取ります。 例えば、Unix オペレーティング システムの LEX。
- 構文指向の翻訳エンジン。 これらのソフトウェアツールは、パースツリーを使用して中間コードを提供する。 構文解析ツリーの各ノードに1つ以上の翻訳を関連付けることを目標としている。
- パーサー ジェネレーター。 パーサ・ジェネレータは、文法を入力とし、文法の助けを借りて文字のストリームを解析できるソースコードを自動的に生成する。
- 自動コード生成器。 中間コードを受け取り、それらを機械語に変換します
- データフローエンジン。 このツールは、コードの最適化に役立つ。 ユーザが提供する情報と中間コードを比較し、関係性を分析する。 データフロー解析とも呼ばれます。 プログラムのある部分から別の部分へ、どのように値が伝達されるかを調べるのに役立ちます。
なぜコンパイラーを使用するのですか。
- コンパイラーはプログラム全体を検証するので、構文エラーや意味上のエラーはありません。
- メモリ上に内部構造を作成できる
- 構築したマシンでプログラムを実行する必要がない
- プログラム全体を他の言語に翻訳する
- ディスク上にファイルを生成するli
- ファイルを実行可能な形式にリンクする
- 構文エラーとデータ型をチェックする
- 言語のセマンティックスの理解を深めるのに役立つ
- 言語のパフォーマンスの問題を処理するのに役立つ
- Non-Quality の機会trivial programming project
- The techniques used for constructing a compiler can be useful for other purposes as well
Application of Compilers
- Compiler design helps full implementation Of High-Level Programming Languages
- Support optimization for Computer Architecture Parallelism
- Design of New Memory Hierarchies of Machines
- Widely used for Translating Programs
- Used with other Software Productivity Tools
Summary
- A compiler is a computer program which helps you transform source code written in a high-level language into low-level machine language
- Correctness, コンパイルの速度、コードの正しい意味を維持することは、コンパイラの設計のいくつかの重要な特徴である
- コンパイラは、1)シングルパスコンパイラ2)2パスコンパイラ、および3)マルチパスコンパイラに分かれています
- 「コンパイラ」という言葉は、グレースマレイホッパーによって1950年代の初めに最初に使われました
- 言語処理システムにはステップがあります。 プリプロセッサ、インタープリタ、アセンブラ、リンカ/ローダ
- 重要なコンパイラ構築ツールは、1)スキャナ生成器、2)シンタックス-3)指示変換エンジン、4)パーサ生成器、5)自動コード生成器
- コンパイラの主要タスクはプログラム全体を検証し、文法や意味の誤りがないこと