1 概説
1.1 言語処理系
1.2 コンパイラの構造
1.3 プログラミング言語の進化
1.4 コンパイラ作成の科学
1.5 コンパイラ技術の応用
1.6 プログラミング言語の基礎
1.7 1章のまとめ
1.8 1章の参考文献
2 簡単な構文主導翻訳系
2.1 はじめに
2.2 構文定義
2.3 構文主導翻訳
2.4 構文解析
2.5 簡単な式の翻訳系
2.6 字句解析
2.7 記号表
2.8 中間コードの生成
2.9 2章のまとめ
3 字句解析
3.1 字句解析器の役割
3.2 入力バッファリング
3.3 トークンの仕様
3.4 トークンの認識
3.5 字句解析器生成系Lex
3.6 有限オートマトン
3.7 正規表現からオートマトンへ
3.8 字句解析器生成系の設計
3.9 DFAに基づくパターン照合器の最適化
3.10 3章のまとめ
3.11 3章の参考文献
4 構文解析
4.1 はじめに
4.2 文脈自由文法
4.3 文法の記述
4.4 下向き構文解析
4.5 上向き構文解析
4.6 LR構文解析の序:単純LR
4.7 さらに強力なLR構文解析器
4.8 曖昧な文法の利用
4.9 構文解析器生成系
4.10 4章のまとめ
4.11 4章の参考文献
5 構文主導翻訳
5.1 構文主導定義
5.2 SDDの評価順序
5.3 構文主導翻訳の応用
5.4 構文主導定義スキーム
5.5 L属性SDDの実装
5.6 5章のまとめ
5.7 5章の参考文献
6 中間コード生成
6.1 構文木のいろいろ
6.2 3アドレスコード
6.3 型と宣言
6.4 式の翻訳
6.5 型検査
6.6 制御フロー
6.7 後埋め法
6.8 Switch文
6.9 手続きの中間コード
6.10 6章のまとめ
6.11 6章の参考文献
7 実行時環境
7.1 記憶域構成
7.2 スタック割付け
7.3 スタック上の非局所データのアクセス
7.4 ヒープ管理
7.5 ごみ集めの基礎
7.6 トレース方式のごみ集め
7.7 瞬断ごみ集め
7.8 ごみ集めに関する高度な話題
7.9 7章のまとめ
7.10 7章の参考文献
8 コード生成
8.1 コード生成器の設計上の問題点
8.2 目的言語
8.3 目的コードにおけるアドレス
8.4 基本ブロックとフローグラフ
8.5 基本ブロックの最適化
8.6 簡単なコード生成器
8.7 のぞき穴最適化
8.8 レジスタの割付けと割当て
8.9 木の書換えによる命令選択
8.10 式の最適コードの生成
8.11 動的計画法によるコード生成
8.12 8章のまとめ
8.13 8章の参考文献
9 機械独立の最適化
9.1 最適化の主な機会
9.2 データフロー解析の概要
9.3 データフローの基礎
9.4 定数伝播
9.5 部分冗長性の除去
9.6 フローグラフにおけるループ
9.7 領域に基づく解析
9.8 記号解析
9.9 9章のまとめ
9.10 9章の参考文献
10 命令レベルの並列化
10.1 プロセッサアーキテクチャ
10.2 コードスケジューリング制約
10.3 基本ブロックのスケジューリング
10.4 大域コードスケジューリング
10.5 ソフトウェアパイプライン化
10.6 10章のまとめ
10.7 10章の参考文献
11 並列化と局所性の最適化
11.1 基本概念
11.2 行列の積:詳細な例
11.3 繰返し空間
11.4 アフィン配列インデックス
11.5 データの再使用
11.6 配列のデータ依存解析
11.7 無同期並列性の検出
11.8 並列ループ間での同期
11.9 パイプライン化
11.10 局所性の最適化
11.11 アフィン変換のそのほかの利用
11.12 11章のまとめ
11.13 11章の参考文献
12 手続き間解析
12.1 基本概念
12.2 なぜ手続き間解析なのか
12.3 データフローの論理的表現
12.4 簡単なポインタ解析のアルゴリズム
12.5 文脈非依存の手続き間解析
12.6 文脈依存ポインタ解析
12.7 BDDによるDatalogの実装
12.8 12章のまとめ
12.9 12章の参考文献
A コンパイラのフロントエンド
A.1 原始言語
A.2 Main
A.3 字句解析器
A.4 記号表と型
A.5 式の中間コード
A.6 ジャンプコードと論理式
A.7 文の中間コード
A.8 構文解析器
A.9 フロントエンドの作成
B 線形独立解の計算
索引
1.1 言語処理系
1.2 コンパイラの構造
1.3 プログラミング言語の進化
1.4 コンパイラ作成の科学
1.5 コンパイラ技術の応用
1.6 プログラミング言語の基礎
1.7 1章のまとめ
1.8 1章の参考文献
2 簡単な構文主導翻訳系
2.1 はじめに
2.2 構文定義
2.3 構文主導翻訳
2.4 構文解析
2.5 簡単な式の翻訳系
2.6 字句解析
2.7 記号表
2.8 中間コードの生成
2.9 2章のまとめ
3 字句解析
3.1 字句解析器の役割
3.2 入力バッファリング
3.3 トークンの仕様
3.4 トークンの認識
3.5 字句解析器生成系Lex
3.6 有限オートマトン
3.7 正規表現からオートマトンへ
3.8 字句解析器生成系の設計
3.9 DFAに基づくパターン照合器の最適化
3.10 3章のまとめ
3.11 3章の参考文献
4 構文解析
4.1 はじめに
4.2 文脈自由文法
4.3 文法の記述
4.4 下向き構文解析
4.5 上向き構文解析
4.6 LR構文解析の序:単純LR
4.7 さらに強力なLR構文解析器
4.8 曖昧な文法の利用
4.9 構文解析器生成系
4.10 4章のまとめ
4.11 4章の参考文献
5 構文主導翻訳
5.1 構文主導定義
5.2 SDDの評価順序
5.3 構文主導翻訳の応用
5.4 構文主導定義スキーム
5.5 L属性SDDの実装
5.6 5章のまとめ
5.7 5章の参考文献
6 中間コード生成
6.1 構文木のいろいろ
6.2 3アドレスコード
6.3 型と宣言
6.4 式の翻訳
6.5 型検査
6.6 制御フロー
6.7 後埋め法
6.8 Switch文
6.9 手続きの中間コード
6.10 6章のまとめ
6.11 6章の参考文献
7 実行時環境
7.1 記憶域構成
7.2 スタック割付け
7.3 スタック上の非局所データのアクセス
7.4 ヒープ管理
7.5 ごみ集めの基礎
7.6 トレース方式のごみ集め
7.7 瞬断ごみ集め
7.8 ごみ集めに関する高度な話題
7.9 7章のまとめ
7.10 7章の参考文献
8 コード生成
8.1 コード生成器の設計上の問題点
8.2 目的言語
8.3 目的コードにおけるアドレス
8.4 基本ブロックとフローグラフ
8.5 基本ブロックの最適化
8.6 簡単なコード生成器
8.7 のぞき穴最適化
8.8 レジスタの割付けと割当て
8.9 木の書換えによる命令選択
8.10 式の最適コードの生成
8.11 動的計画法によるコード生成
8.12 8章のまとめ
8.13 8章の参考文献
9 機械独立の最適化
9.1 最適化の主な機会
9.2 データフロー解析の概要
9.3 データフローの基礎
9.4 定数伝播
9.5 部分冗長性の除去
9.6 フローグラフにおけるループ
9.7 領域に基づく解析
9.8 記号解析
9.9 9章のまとめ
9.10 9章の参考文献
10 命令レベルの並列化
10.1 プロセッサアーキテクチャ
10.2 コードスケジューリング制約
10.3 基本ブロックのスケジューリング
10.4 大域コードスケジューリング
10.5 ソフトウェアパイプライン化
10.6 10章のまとめ
10.7 10章の参考文献
11 並列化と局所性の最適化
11.1 基本概念
11.2 行列の積:詳細な例
11.3 繰返し空間
11.4 アフィン配列インデックス
11.5 データの再使用
11.6 配列のデータ依存解析
11.7 無同期並列性の検出
11.8 並列ループ間での同期
11.9 パイプライン化
11.10 局所性の最適化
11.11 アフィン変換のそのほかの利用
11.12 11章のまとめ
11.13 11章の参考文献
12 手続き間解析
12.1 基本概念
12.2 なぜ手続き間解析なのか
12.3 データフローの論理的表現
12.4 簡単なポインタ解析のアルゴリズム
12.5 文脈非依存の手続き間解析
12.6 文脈依存ポインタ解析
12.7 BDDによるDatalogの実装
12.8 12章のまとめ
12.9 12章の参考文献
A コンパイラのフロントエンド
A.1 原始言語
A.2 Main
A.3 字句解析器
A.4 記号表と型
A.5 式の中間コード
A.6 ジャンプコードと論理式
A.7 文の中間コード
A.8 構文解析器
A.9 フロントエンドの作成
B 線形独立解の計算
索引