実践・C コンパイラ演習

学習者向けドキュメント — 索引

始めるときは getting_started.md から。 ここは入口ではなく、 どの文書に何があるか・知りたいことがどこにあるかを引くための索引である。

文書の一覧

上の3つが「読むもの」、下の3つが「引くもの」である。

文書 内容 読みどき
getting_started.md 進め方・環境の用意(実体はコマ0)・読む順序・本体であるコマ1〜15 の一覧(準備回のコマ0 と発表会のコマ16 は別枠)・コマ15 のあと 最初に(入口)
conventions.md 実装の約束ごと(編集するファイル・emit()・命名) コマ2 の前に一度。codegen / codegen_lval の分離はコマ3 で最小形を導入しコマ7 で拡張するので、両方の回に読み直す
testing.md test_runner の使い方・テストケースの形式と、動かないときの確認手順・症状表 テストはコマ2 から毎回。デバッグの後半は詰まったとき
language_spec.md Core プロファイルの言語仕様(型・演算子・EBNF・除外機能・標準/発展の到達範囲) 引くもの。冒頭に目次がある
rv64_reference.md 呼び出し規約・スタックフレーム・よく使う命令 引くもの
code_example.md 各コマ終了時点でコンパイルできるプログラム(コマ1〜15) 引くもの。冒頭に目次がある

知りたいことから引く

知りたいこと・キーワード 行き先
環境を作りたい / Docker / Python のバージョン getting_started.md の「環境を用意する」
この機能は書けるのか(switch・+=・後置 ++・ビット演算 など) language_spec.md の除外機能の一覧
使える型・演算子・優先順位 language_spec.md の型・演算子
構文が通らない / EBNF を確かめたい language_spec.md の形式文法
この機能はどのコマで導入されるか language_spec.md の対応表
除算の丸め方向・評価順序・未定義動作 language_spec.md の実行時の意味
gcc で通る C との違い language_spec.md の ISO C との関係
printf / malloc の宣言 language_spec.md の標準ライブラリ
どこまで書けるコンパイラになったか / 具体例が見たい code_example.md の目次
codegen と codegen_lval の分け方 conventions.md の「守ってほしい設計」
関数名・変数名をどう付けるか / 名前を変えてよいか conventions.md の「命名の目安」
テストの走らせ方・テストケースの書き方 testing.md
呼び出し規約・スタックフレーム・命令の意味 rv64_reference.md
テストが落ちる / 終了コードが変 / 実行時に壊れる testing.md の症状表
AttributeError が出る / 昔取得したファイルがある testing.md の症状表
コマ15 のあと何をするか getting_started.md の「コマ15 のあと」
発展課題28トピックからどれを選ぶか ../advanced/README.md(一覧・前提の出典と「どこから始めるか」)

この外にあるもの

場所 内容
../advanced/README.md 発展課題 28 トピックの一覧と依存関係(C 移植・セルフホスト P1 を含む)
../ocaml/README.md 各回の完成形に相当する OCaml 版参考実装(完成相当なので、自分の方針を考えたあとの確認に)
../docker/rv64/README.md Docker 環境の詳細設定とトラブルシュート
design/curriculum.md(開発リポジトリ) 教材の設計思想(なぜこの順序・なぜ RV64 なのか)

この資料の原稿を見る