インプレス[コンピュータ・IT]ムック インタプリタの作り方 -言語設計/開発の基本と2つの方式による実装-
インプレス / 2023年09月26日 / 全775ページ
本書はインタープリタのプログラミングを材料にプログラミング言語の開発を学ぶものです。プログラミング言語を構成する「字句解析」「式評価」「制御フロー」「関数」などの要素、さらに本書では「クロージャ」「スーパークラス」「ガベージコレクション」などモダンな言語における定番の要素も取り扱います。現代における言語の開発はプログラミングのテクニックだけでなく、様々なツールを駆使して見通しよく進めることが可能です。本書は筆者の豊富な開発経験をもとに、その基本的な技法や知識を一通り学ぶことのできるものです。
目次
- クレジット・正誤情報
- 謝辞
- 目次
- 第I部 導入編
- 第1章 はじめに
- 1.1 なぜこれを学ぶのか
- 1.2 この本の構成
- 1.3 第1のインタプリタ
- 1.4 第2のインタプリタ
- 第2章 領域の地図/2.1 言語のパーツ
- 2.2 ショートカットと別ルート
- 2.3 コンパイラとインタプリタ
- 2.4 我らの旅
- 第3章 Lox言語/3.1 Hello, Lox
- 3.2 高いレベルの言語
- 3.3 データの型
- 3.4 式(Expressions)
- 3.5 文(Statements)/3.6 変数
- 3.7 制御の流れ
- 3.8 関数
- クレジット・正誤情報
- 謝辞
- 目次
- 第I部 導入編
- 第1章 はじめに
- 1.1 なぜこれを学ぶのか
- 1.2 この本の構成
- 1.3 第1のインタプリタ
- 1.4 第2のインタプリタ
- 第2章 領域の地図/2.1 言語のパーツ
- 2.2 ショートカットと別ルート
- 2.3 コンパイラとインタプリタ
- 2.4 我らの旅
- 第3章 Lox言語/3.1 Hello, Lox
- 3.2 高いレベルの言語
- 3.3 データの型
- 3.4 式(Expressions)
- 3.5 文(Statements)/3.6 変数
- 3.7 制御の流れ
- 3.8 関数
- 3.9 クラス
- 3.10 標準ライブラリ
- 第II部 木の巡回によるインタプリタ
- 第4章 字句解析(スキャニング)/4.1 インタプリタのフレームワーク
- 4.2 字句とトークン
- 4.3 正規言語と正規表現
- 4.4 Scannerクラス
- 4.5 字句を認識する
- 4.6 もっと長い字句
- 4.7 予約語と識別子
- 第5章 コードを表現する
- 5.1 文脈自由文法
- 5.2 構文木を実装する
- 5.3 構文木を使う
- 5.4 プリティプリンタ(に似たもの)
- 第6章 式の構文を解析する
- 6.1 多義性と構文解析のゲーム
- 6.2 再帰下降の構文解析
- 6.3 構文エラー
- 6.4 パーサを接続する
- 第7章 式を評価する
- 7.1 値を表現する
- 7.2 式を評価する
- 7.3 ランタイムエラー
- 7.4 インタプリタを接続する
- 第8章 文と状態
- 8.1 文(ステートメント)
- 8.2 グローバル変数
- 8.3 環境
- 8.4 代入
- 8.5 スコープ
- 第9章 制御フロー/9.1 チューリングマシンについて(簡単に)
- 9.2 条件付きの実行
- 9.3 論理演算子
- 9.4 whileループ
- 9.5 forループ
- 第10章 関数/10.1 関数コール
- 10.2 ネイティブ関数
- 10.3 関数宣言
- 10.4 関数オブジェクト
- 10.5 return文
- 10.6 ローカル関数とクロージャ
- 第11章 解決と束縛/11.1 静的スコープ
- 11.2 意味解析
- 11.3 Resolverクラス
- 11.4 解決した変数を解釈する
- 11.5 解決エラー
- 第12章 クラス
- 12.1 OOPとクラス
- 12.2 クラス宣言
- 12.3 インスタンスを作る
- 12.4 インスタンスのプロパティ
- 12.5 クラスのメソッド
- 12.6 this
- 12.7 オブジェクトの構築と初期化
- 第13章 継承
- 13.1 スーパークラスとサブクラス
- 13.2 メソッドを継承する
- 13.3 スーパークラスのメソッドを呼び出す
- 13.4 まとめ
- 第III部 バイトコード式仮想マシン
- 第14章 バイトコード
- 14.1 バイトコード?
- 14.2 手始めに
- 14.3 命令のチャンク
- 14.4 チャンクの逆アセンブル
- 14.5 定数
- 14.6 行情報
- 第15章 仮想マシン/15.1 命令を実行する機械
- 15.2 値のスタックを操作する
- 15.3 算術演算
- 第16章 オンデマンドの字句解析
- 16.1 インタプリタを始動する
- 16.2 トークンを1個ずつ
- 16.3 Loxの字句文法
- 16.4 識別子とキーワード
- 第17章 式をコンパイルする
- 17.1 シングルパスのコンパイル
- 17.2 トークンを解析する
- 17.3 バイトコードを出力する
- 17.4 前置式を解析する
- 17.5 中置式を解析する
- 17.6 プラットパーサ
- 17.7 チャンクのダンプを取る
- 第18章 値の型/18.1 タグ付き共用体
- 18.2 Loxの値とCの値
- 18.3 動的に型付けされる数値
- 18.4 2つの型を追加する
- 第19章 文字列
- 19.1 値とオブジェクト
- 19.2 構造体継承
- 19.3 文字列
- 19.4 文字列演算
- 19.5 オブジェクトを解放する
- 第20章 ハッシュ表
- 20.1 バケットの配列
- 20.2 衝突処理法
- 20.3 ハッシュ関数
- 20.4 ハッシュ表の構築
- 20.5 文字列のインターン化
- 第21章 グローバル変数
- 21.1 文(ステートメント)
- 21.2 変数宣言
- 21.3 変数を読む
- 21.4 代入
- 第22章 ローカル変数
- 22.1 ローカル変数の表現
- 22.2 ブロック文
- 22.3 ローカル変数を宣言する
- 22.4 ローカル変数を使う
- 第23章 前後にジャンプする
- 23.1 if文
- 23.2 論理演算子
- 23.3 while文
- 23.4 for文
- 第24章 コールと関数/24.1 関数オブジェクト
- 24.2 コンパイルして関数オブジェクトを作る
- 24.3 コールフレーム
- 24.4 関数宣言
- 24.5 関数コール
- 24.6 return文
- 24.7 ネイティブ関数
- 第25章 クロージャ
- 25.1 クロージャオブジェクト
- 25.2 上位値(upvalue)
- 25.3 上位値オブジェクト
- 25.4 上位値を閉じ込める
- 第26章 ごみ集め
- 26.1 到達可能性
- 26.2 マーク&スイープによるごみ集め
- 26.3 ルートにマークを付ける
- 26.4 オブジェクト参照をトレースする
- 26.5 使わないオブジェクトをスイープする
- 26.6 ごみを、いつ集めるか
- 26.7 GCのバグ
- 第27章 クラスとインスタンス
- 27.1 クラスオブジェクト
- 27.2 クラス宣言
- 27.3 クラスのインスタンス
- 27.4 Get式とSet式
- 第28章 メソッドと初期化子/28.1 メソッド宣言
- 28.2 メソッド参照
- 28.3 this
- 28.4 インスタンス初期化子
- 28.5 呼び出しの最適化
- 第29章 スーパークラス/29.1 メソッドを継承する
- 29.2 スーパークラスを格納する
- 29.3 スーパーコール
- 29.4 完成した仮想マシン
- 第30章 最適化/30.1 性能を計測する
- 30.2 より高速なハッシュ表探針
- 30.3 NaNボクシング
- 30.4 その次は?
- 付録 I/I 文法
- II 式と文
- 付録 II(日本語版の付録)/I READMEの概要
- II 主な参考文献
- 索引
- 奥付
※このデジタル雑誌には目次に記載されているコンテンツが含まれています。それ以外のコンテンツは、本誌のコンテンツであっても含まれていません のでご注意ください。
※電子版では、紙の雑誌と内容が一部異なる場合や、掲載されないページがある場合があります。