Compiler Glossary

Language Translator

  • 内部(ないぶ) アーキテクチャ
  flowchart LR
	S[ソースコード/HLLコード]
	P[プリプロセッサ]
	C[コンパイラ]
	A[アセンブラ/アセンブリ言語]
	L[リンカ/ローダ]
	M[機械語]

	S --> P --> C --> A --> L --> M
  • HLL ==> プリプロセッサ ==> Pure HLL
  • Pure 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

プリプロセッサの(おも)目的(もくてき) は、テキスト置換(ちかん)実行(じっこう) し、ヘッダファイルをインクルードして、ソースコードの拡張版(かくちょうばん)作成(さくせい) することです。