『ふつうのコンパイラをつくろう』詳細目次
$Id: toc.html 884 2009-07-19 04:20:39Z aamine $
- 本書の概要
- コンパイルの過程
- C♭コンパイラによるコンパイル
- C♭言語の概要
- C♭コンパイラcbcの構成
第1部 ソースコードの解析
- 構文解析の手法
- パーサジェネレータ
- JavaCCの概要
- JavaCCによるスキャナの記述
- 構造のない単語のスキャン
- トークンを生成しない単語のスキャン
- 構造を持つ単語のスキャン
- EBNFによる文法の記述
- 曖昧な文法とトークンの先読み
- 定義の解析
- 文の解析
- 式の解析
- 項の解析
第2部 抽象構文木と中間表現
- JavaCCのアクション
- 抽象構文木とノード
- 式の抽象構文木
- 文の抽象構文木
- 宣言の抽象構文木
- cbcパーサの起動
- 意味解析の概要
- 変数参照の解決
- 型名の解決
- 型定義のチェック
- 式の妥当性のチェック
- 静的型チェック
- cbcの中間表現
- IRGeneratorクラスの概要
- 制御構造の変換
- 副作用のない式の変換
- 左辺値の変換
- 副作用を持つ式の変換
第3部 アセンブリコードの生成
- コンピュータの仕組み
- x86系CPUの歴史
- IA-32の概要
- データの表現と配置
- GNUアセンブラによるプログラミング
- GNUアセンブラの文法
- 転送命令
- 算術演算命令
- ビット演算命令
- 演算の制御
- 手続き呼び出し規約
- Linux/x86での関数呼び出し
- Linux/x86での関数呼び出しの詳細
- コンパイル結果の調査
- x86アセンブリのオブジェクト表現とDSL
- cbcのx86アセンブリDSL
- CodeGeneratorクラスの概要
- 単純な式のコンパイル
- 二項演算のコンパイル
- 変数の参照と代入
- ジャンプ文のコンパイル
- マシンスタックの操作
- 引数とローカル変数へのメモリ参照割り当て
- 仮想スタックによるテンポラリ変数の割り当て
- マシンスタックアクセスのオフセット調整
- プロローグ・エピローグの生成
- allocaの実装
- 最適化とは
- 最適化の分類
- cbcでの最適化
- より強力な最適化
第4部 リンクとロード
- ELFファイルの構造
- グローバル変数のELFファイルでの表現
- グローバル変数のコンパイル
- オブジェクトファイルの生成
- リンクの概要
- リンクとは
- ダイナミックリンクとスタティックリンク
- ライブラリの作成
- ELFセグメントのロード
- ダイナミックリンクの過程
- 動的ロード
- GNU ldによるリンク
- 位置独立コードとは
- グローバル変数参照の実装
- リンカ呼び出しの実装
- プログラムの解析から実行まで
- 書籍紹介
- リンク・ロードについて
- さまざまな言語機能
- A.1 参考文献
- A.2 オンラインドキュメント
- A.3 ソースコード