Compiler Glossary
Language Translator
- 内部 アーキテクチャ
flowchart LR S[ソースコード/HLLコード] P[プリプロセッサ] C[コンパイラ] A[アセンブラ/アセンブリ言語] L[リンカ/ローダ] M[機械語] S --> P --> C --> A --> L --> M
HLL ==> プリプロセッサ ==> Pure HLLPure HLL ==> コンパイラ ==> アセンブリ言語アセンブリ言語 ==> アセンブラ ==> 再配置可能 機械語
Different Phases in Compiler
- フロントエンド :
LANCEコンパイラ
flowchart TD LA[字句解析] StA[構文解析] SmA[意味解析] ICG[中間コード生成] CO[コード最適化] TCG[ターゲットコード生成] LA ---> StA ---> SmA ---> ICG ---> CO ---> TCG
Lexical Analyzer
- ツール:
LEX
機能 : コンパイルの最初 のフェーズでは、ソースコードをトークンに分解 します。 トークンとは、プログラミング言語 における意味 の最小単位 (キーワード、識別子 、演算子 など)です。
目的 : このステップは、コードの基本的 な構成要素 と構造 を認識 するのに役立 ちます。 空白 とコメントを削除 し、トークンのストリームを出力 として生成 します。
Syntax Analysis
- ツール:
YACC
機能 : このフェーズでは、字句解析 で生成 されたトークンストリームを解析 し、 ソースコードの文法構造 を表 す階層構造 (構文木 )を作成 します。
目的 : ソースコードが指定 されたプログラミング言語 の構文規則 に従 っているかどうかを確認 します。 構文 エラーがある場合 、このフェーズで検出 されます。
Semantic Analysis
機能 : 意味解析 フェーズは、コードの意味 を理解 することに焦点 を当 てます。 字句解析 や構文解析 では明 らかにならない意味的 なエラーを検出 します。
目的 : このステップは、コードが意味 のある解釈 を持 つことを確認 し、 未宣言 の変数 、型 の不一致 、その他 の意味規則 違反 などの問題 を検出 します。
Intermediate Code Generation
機能 : コンパイラは、中間 コードと呼 ばれるソースコードの中間表現 を生成 します。 このコードはターゲットマシンに依存 せず、高級 ソースコードと機械語 の橋渡 しとなります。
目的 : 中間 コードは、コード最適化 のプロセスを簡素化 し、異 なるターゲットマシン向 けのコード生成 を容易 にします。
Code Optimization
機能 : コード最適化 は、実行速度 とメモリ使用量 の面 で、中間 コードをより効率的 にすることを目指 します。
目的 : 生成 されたコードの正確性 を維持 しながら、パフォーマンスを向上 させることが目標 です。 ループ最適化 、定数畳 み込 み、デッドコード削除 など、様々 な最適化技術 が適用 されます。
Target Code Generation
機能 : このフェーズでは、コンパイラは最適化 された中間 コードをターゲットアーキテクチャの機械語 に変換 します。
目的 : コンパイルプロセスの最終出力 は、ターゲットハードウェアで実行 できる機械語 です。 このフェーズは、前 のステップで行 われた最適化 に基 づいて、効率的 で正確 な機械語 を生成 する役割 を担 います。
Directive
コンパイラディレクティブは、配列 インデックスの範囲 チェック時 にコンパイラに指示 を与 えたり、まだコンパイルされていないコードをプログラマが信頼 することで、コンパイルエラーを回避 することができます。
C: プリプロセッサディレクティブ- 例
:
#include
- 例
:
Inline Function
Preprocessor
プリプロセッサの主 な目的 は、テキスト置換 を実行 し、ヘッダファイルをインクルードして、ソースコードの拡張版 を作成 することです。