『ふつうのコンパイラをつくろう』詳細目次

$Id: toc.html 884 2009-07-19 04:20:39Z aamine $

第1章 コンパイラ作りを始めよう

  1. 本書の概要
  2. コンパイルの過程
  3. C♭コンパイラによるコンパイル

第2章 C♭とcbc

  1. C♭言語の概要
  2. C♭コンパイラcbcの構成

第1部 ソースコードの解析

第3章 構文解析の概要

  1. 構文解析の手法
  2. パーサジェネレータ
  3. JavaCCの概要

第4章 字句解析

  1. JavaCCによるスキャナの記述
  2. 構造のない単語のスキャン
  3. トークンを生成しない単語のスキャン
  4. 構造を持つ単語のスキャン

第5章 JavaCCによるパーサの記述

  1. EBNFによる文法の記述
  2. 曖昧な文法とトークンの先読み

第6章 構文解析

  1. 定義の解析
  2. 文の解析
  3. 式の解析
  4. 項の解析

第2部 抽象構文木と中間表現

第7章 JavaCCのアクションと抽象構文木

  1. JavaCCのアクション
  2. 抽象構文木とノード

第8章 抽象構文木の作成

  1. 式の抽象構文木
  2. 文の抽象構文木
  3. 宣言の抽象構文木
  4. cbcパーサの起動

第9章 意味解析(1)参照の解決

  1. 意味解析の概要
  2. 変数参照の解決
  3. 型名の解決

第10章 意味解析(2)静的型チェック

  1. 型定義のチェック
  2. 式の妥当性のチェック
  3. 静的型チェック

第11章 中間表現への変換

  1. cbcの中間表現
  2. IRGeneratorクラスの概要
  3. 制御構造の変換
  4. 副作用のない式の変換
  5. 左辺値の変換
  6. 副作用を持つ式の変換

第3部 アセンブリコードの生成

第12章 x86アーキテクチャの概要

  1. コンピュータの仕組み
  2. x86系CPUの歴史
  3. IA-32の概要
  4. データの表現と配置

第13章 x86アセンブラプログラミング

  1. GNUアセンブラによるプログラミング
  2. GNUアセンブラの文法
  3. 転送命令
  4. 算術演算命令
  5. ビット演算命令
  6. 演算の制御

第14章 関数呼び出しと変数

  1. 手続き呼び出し規約
  2. Linux/x86での関数呼び出し
  3. Linux/x86での関数呼び出しの詳細

第15章 式と文のコンパイル

  1. コンパイル結果の調査
  2. x86アセンブリのオブジェクト表現とDSL
  3. cbcのx86アセンブリDSL
  4. CodeGeneratorクラスの概要
  5. 単純な式のコンパイル
  6. 二項演算のコンパイル
  7. 変数の参照と代入
  8. ジャンプ文のコンパイル

第16章 スタックフレームの割り当て

  1. マシンスタックの操作
  2. 引数とローカル変数へのメモリ参照割り当て
  3. 仮想スタックによるテンポラリ変数の割り当て
  4. マシンスタックアクセスのオフセット調整
  5. プロローグ・エピローグの生成
  6. allocaの実装

第17章 最適化の手法

  1. 最適化とは
  2. 最適化の分類
  3. cbcでの最適化
  4. より強力な最適化

第4部 リンクとロード

第18章 オブジェクトファイルの生成

  1. ELFファイルの構造
  2. グローバル変数のELFファイルでの表現
  3. グローバル変数のコンパイル
  4. オブジェクトファイルの生成

第19章 リンクとライブラリ

  1. リンクの概要
  2. リンクとは
  3. ダイナミックリンクとスタティックリンク
  4. ライブラリの作成

第20章 プログラムのロード

  1. ELFセグメントのロード
  2. ダイナミックリンクの過程
  3. 動的ロード
  4. GNU ldによるリンク

第21章 位置独立コードの生成

  1. 位置独立コードとは
  2. グローバル変数参照の実装
  3. リンカ呼び出しの実装
  4. プログラムの解析から実行まで

第22章 本書を読み終えたあとに

  1. 書籍紹介
  2. リンク・ロードについて
  3. さまざまな言語機能

付録

  1. A.1 参考文献
  2. A.2 オンラインドキュメント
  3. A.3 ソースコード