第 1 部 新時代オープンソース・コンパイラ入門 第 1章 昔の教科書を暗記したままで大丈夫ですか? シンプル ・ イズ・ ベスト なんてシンプル! 新時代の オープンソース・コンパイラの全体像 村井 和夫 広義のコンパイラ hello.c プリプロセッサ GCC コンパイラ本体 アセンブラ cpp cc1 リンカ gas hello.out gld 実行可能ファイル ソースコード (Cプログラム) hello.i 展開後の Cプログラム hello.s アセンブリ言語 プログラム hello.o オブジェクト・ コード リンカ・スクリプト やライブラリなどを 読み込んでリンク処 理を行う 図 1 これだけは教科書を思い出しておこう…コンパイラ(広義)の基本構造 従来の GCC の例 教科書のおさらい… 従来のコンパイラの基本構造 まず,一般的なコンパイラの例として,オープン ソースのコンパイラとして広く使われてきた従来の GCC の構成について説明します(最近の GCC はコラ ム 1 を参照). 広義のコンパイラ(GCC)の全体構成は,4 段階に分 けられます.具体的にはプリプロセッサ,コンパイラ 本体(狭義のコンパイラ) ,アセンブラ,リンカの 4 段階 です.図 1に従来の GCC の全体構成を示します.GCC では次のように 4 段階に分けてコンパイルできます. 表 1 コンパイラの各段階ごとの処理内容 項目 一般名称 第 1 プリプロ 段階 セッサ 処理内容 コンパイル前にソースコードの処理を施す. #include や #define などを処理する ソースコードにコンパイル処理を施し,使 第 2 コンパイラ 用するプロセッサ用のアセンブリ言語に変 段階 本体 換する 第3 アセンブリ言語からオブジェクト・コード アセンブラ 段階 (機械語)を生成する 第4 リンカ 段階 22 各々バラバラに生成されたオブジェクト・ コードやライブラリを一つのファイルに結 合して実行可能ファイルを生成する 第 1 段階:gcc -Ecpp のみ実行し結果を標準出力 に表示 第 2 段階:gcc -Sコ ンパイラ本体 cc1 まで実行し て hello.s を作成 第 3 段階:gcc -cア セ ン ブ ラ gas ま で 実 行 し て hello.o を作成 第 4 段階:gcc リンカgldまで実行して hello. out を作成 各段階で行う処理内容を表 1 に示します.最も重要 なコンパイラ本体は第 2 段階にあたります. もうちょっと掘り下げてみる ● キモとなるコンパイラ本体の構造 第 2 段階のコンパイラ本体では,ソースコードにコ ンパイル処理を施し,使用するプロセッサ用のアセン ブリ言語に変換します. コンパイラ本体の内部構造は,図 2 に示すとおり, フロントエンド,最適化(Optimizer)とバックエンド の 3 段階に分かれています.それぞれの処理内容は次 の通りです. ▶その 1…フロントエンド フロントエンドでは図 3 に示すように,ソースコー ドを読み込んで字句解析や構文解析を行って構文木を 2015 年 3 月号
© Copyright 2024 ExpyDoc