質問: 今、コンパイラの仕組みについて勉強しています。 gccの仕組みについていろいろ調べているのですが なかなか資料が見当たりません。そこで是非これ に関して情報をお持ちのかたは御提供下さい。ど のような情報でも構いませんができれば次の情報 についてをお願いします。 1)gcc の構文解析の仕組み 2)最適化オプション -O2 を用いた時と通常のコンパイル時との構文解析の違い 3)ターゲットプロセッサ(CPU)に依存した構文解析の動作
回答: まず一般的なC/C++コンパイラの動作を理解しましょう。 1.プリプロセッサ プリプロセッサ文の解析、マクロ展開、コメント除去。 2.構文チェッカ エラーチェックとシンボルテーブル作成 3.コードジェネレータ アセンブラコードに展開 4.オプティマイザ 最適化 5.アセンブラ 機械語コードに展開 構文解析自体はオプションに関係無く同じ物が採用されます。 デバッグオプションのときに少々違った動きをしますが。 また、gccに限らずc/c++コンパイラはunixのpcc(ポータブルCコンパイラ)の影響を色濃く受けています。 pcc系Cコンパイラの構文解析に関しては 「Cコンパイラ設計 yacc/lexの応用」(啓学出版 ISBN: 4-7665-0266-3 )に解説があります。 -Oオプションによるコンパイラの動作の違いはオプティマイザの動作の違いにほかなりません。 クロスコンパイルはコードジェネレータが変わるだけです。 ただし、最適化はCPUに依存しますのでこの2つは密接に関連します。 詳しくはgccのソースコードを読めばわかると思いますが...