1. 言語処理系の基本 MOC
- 言語処理系とは
- コンパイラ (Compiler) の概要 MOC
- インタプリタ (Interpreter) の概要 MOC
- コンパイラとインタプリタの比較 MOC
- 言語処理系の分類
2. コンパイラの構造とフェーズ MOC
- コンパイラの全体構造
- フロントエンド (Frontend) MOC (ソース言語依存、ターゲットマシン非依存)
- バックエンド (Backend) MOC (ソース言語非依存、ターゲットマシン依存)
- 中間表現 (Intermediate Representation - IR) MOC (フロントエンドとバックエンドのインターフェース)
- シンボルテーブル (Symbol Table) MOC
- エラーハンドラ (Error Handler) MOC
- パス (Pass) の概念
- Scanning) MOC
- Parsing) MOC
- 構文解析の役割 (トークン列から構文構造を認識し、構文木を構築)
- 文法 (Grammar)
- 文脈自由文法 (CFG - Context-Free Grammar) (BNF記法, EBNF記法)
- 曖昧な文法 (Ambiguous Grammar) とその解消 (演算子の優先順位、結合規則など)
- チョムスキー階層 (Chomsky Hierarchy) (正規文法、文脈自由文法、文脈依存文法、句構造文法 - 概要)
- 構文解析器 (Parser) の種類
- トップダウン構文解析 (Top-Down Parsing)
- 再帰下降構文解析 (Recursive Descent Parsing)
- LL(k)構文解析 (予測構文解析 - Predictive Parsing)
- ボトムアップ構文解析 (Bottom-Up Parsing) / シフトリデュース構文解析 (Shift-Reduce Parsing)
- トップダウン構文解析 (Top-Down Parsing)
- 抽象構文木 (AST - Abstract Syntax Tree) (構文木から意味情報のみを抽出)
- 構文解析器ジェネレータ (Parser Generator) (例:
Yacc,Bison,ANTLR) - エラー回復 (Error Recovery in Parsers) (パニックモード、フレーズレベル回復など)
- 2.3. 意味解析 (Semantic Analysis) MOC
- 2.4. 中間コード生成 (Intermediate Code Generation) MOC
- 2.5. コード最適化 (Code Optimization) MOC
- コード最適化の目的 (実行速度向上、メモリ使用量削減、消費電力削減)
- 最適化のレベル
- 基本ブロック内最適化
- ループ最適化
- 制御フローグラフ (CFG - Control Flow Graph)
- データフロー解析 (Data Flow Analysis)
- 共通部分式の削除 (Common Subexpression Elimination) (大域的)
- コピー伝播 (Copy Propagation) (大域的)
- 到達不能コードの削除 (Dead Code Elimination) (大域的)
- ループ不変コード移動 (Loop-Invariant Code Motion)
- ループ展開 (Loop Unrolling)
- Loop Jamming)
- ループ交換 (Loop Interchange)
- (オプション) 誘導変数の削除 (Induction Variable Elimination)
- マシン依存の最適化 (Machine-Dependent Optimization)
- 最適化のトレードオフ (コンパイル時間 vs. 最適化効果)
- プロファイルガイド最適化 (PGO - Profile-Guided Optimization)
- 2.6. ターゲットコード生成 (Target Code Generation) MOC
3. インタプリタの構造と動作 MOC
- インタプリタの種類
- インタプリタの実行ループ (REPL - Read-Eval-Print Loop)
- インタプリタにおける動的機能
- 動的型付けの処理
- 動的スコープの処理 (一部言語)
[[eval関数の実装とセキュリティリスク]]
- インタプリタの例
4. ハイブリッドアプローチと高度なトピック MOC
- バイトコード (Bytecode) と仮想マシン (Virtual Machine - VM) MOC
- バイトコードの定義と役割 (プラットフォーム非依存の中間表現)
- 仮想マシンの定義と役割 (バイトコードを実行する抽象的なコンピュータ)
- 代表的な仮想マシン
[[JVM (Java Virtual Machine)]][[CLR (Common Language Runtime) - .NET]][[BEAM (Erlang VM)]][[CPythonのVM]]
- Just-In-Time (JIT) コンパイル MOC
- Ahead-Of-Time (AOT) コンパイル MOC
- Source-to-Source Compiler) MOC
- 自己ホスティングコンパイラ (Self-hosting Compiler)
- クロスコンパイラ (Cross Compiler)
- (オプション) インクリメンタルコンパイル (Incremental Compilation) (変更部分のみ再コンパイル)
- (オプション) リンカブルフォーマットとデバッグ情報の生成
5. 関連ツールとプロセス MOC
- プリプロセッサ (Preprocessor)
- プリプロセッサの役割 (コンパイル前のソースコード変換)
- [[Cプリプロセッサの機能 (
#include,#define,#ifなど)]]
- アセンブラ (Assembler)
- リンカ (Linker) MOC
- ローダ (Loader)
- デバッガ (Debugger)
- ビルドシステム (Build Systems)
6. インタプリタ設計の選択肢と影響 MOC
- エラー診断の質と言語設計
- コンパイル時間 vs. 実行時間 vs. 開発時間
- 移植性とターゲット依存性
- 言語機能と処理系の複雑性 (例: 動的機能、高度な型システム、マクロ)
- セキュリティと処理系 (例: バイトコードベリファイア、サンドボックス実行)
7. 代表的な言語処理系の事例研究 MOC
- gcc (GNU Compiler Collection) のアーキテクチャ概要
- LLVM (Low Level Virtual Machine) のアーキテクチャとエコシステム (Clang, Swift, Rustなど)
- V8 JavaScript Engine の仕組み概要 (JIT, GC)
- CPython のインタプリタとバイトコード実行
- Java HotSpot VM のアーキテクチャ概要 (インタプリタ、C1/C2 JITコンパイラ, GC)
- Haskell GHC (Glasgow Haskell Compiler) のコンパイルパイプライン概要 (Core言語への変換、最適化)