目次
第1章:プログラミング言語概論
- プログラミング言語の分類
- 他の切り口での分類方法
- コンパイルパイプライン
第2章:スタックベース仮想マシン
- 仮想マシン概論
- Rustでの実装
- 標準入力からの読み込み
- パースとコマンドの実行
- ブロックとネスト構造
- if制御構文
- 変数の定義
- 複数行のソースコードへの対応
- 関数呼び出し
- 関数の再帰呼び出し
- WebAssemblyへのコンパイルとブラウザでの実行
第3章:プログラミング言語の構文解析
- 構文解析が解決する課題
- 構文へのマッチ
- トークンの切り出し
- 括弧によるグループ化
- 木構造の構築
- 式の構文木
- パーサコンビネータnom
- Parsing Expression Grammarによる構文解析
- ASTインタプリタ
- 関数呼び出しの構文と評価
- 設定ファイルへの応用
第4章:スクリプト言語ランタイム
- 本章で設計する言語
- 構文と意味論
- AST実行モデル
- 文(Statement)の導入
- 変数宣言
- 代入文
- 条件分岐
- ループ
- 関数定義
- その他の制御構文
- 動的型の導入
第5章:静的型付けと型チェック
- 静的型システムの概要
- 型チェックの基本構成法
- 型宣言
- 式と文の型チェック
- 組み込み関数の型定義
- エラー位置の報告
第6章:バイトコードへのコンパイル
- バイトコードとネイティブコード
- スタックマシンとレジスタマシン
- 命令セットの特徴と設計
- バイトコードの構成
- 最小限のバイトコードの定義と実行
- バイトコードへのコンパイル
- リテラルテーブルの実装
- 任意のソースコードをパースしてバイトコードへ翻訳
- 完全な式のコンパイルと実行
- 条件分岐式のコンパイルと実行
- ループ制御のコンパイルと実行
- ユーザー定義関数
- 型チェッカーとの統合
- 状態マシンとコルーチン
- コルーチンオブジェクトとジェネレータ
- 応用例
第7章:LLVMを使ったネイティブコードへのコンパイル
- llvm-sysとinkwell
- inkwellでのHello, world!
- ネイティブコードによるパフォーマンスの向上