実践・C コンパイラ演習
京都橘大学 工学部情報工学科 PBL科目「情報工学実践」
C 言語サブセットのコンパイラを段階的に作る演習教材。RISC-V RV64 を qemu で動かす。
この演習は、C 言語サブセットのコンパイラを動く状態を保ちながら段階的に作り上げます。 前半は Python でコンパイラの論理だけに集中し、後半は動く Python 版を参照実装として C へ移植します。生成したアセンブリは毎回 qemu で実行して確かめます。
重要
はじめての方は 進め方ガイド から読んでください。 環境の用意・全コマの一覧・到達目標をまとめてあります。
演習環境
starter・テスト・Docker 環境・参考実装は ZIP で配布しています。 資料はこのサイトを見てください。
通常回
先頭は番号を持たない準備回のコマ0(演習環境構築)で、初回授業の開始時点で終わっているのが目標である。続くコマ1〜15 の15コマが通常回の本体で、授業内では読解と着手までを行い、実装の完成は次回までの課題とする粒度に分けてある。末尾は自身の取り組みを発表する発表会(コマ16)で、これも通常回には含めない別枠である。準備のコマ0 と発表会のコマ16 は、進度に応じて指導する回のため資料は最小限にとどめてある。
- コマ0: 演習環境構築
- コマ1: AST + インタープリター
- コマ2: 算術式コード生成
- コマ3: 変数・代入・シンボルテーブル
- コマ4: if/else + 比較演算
- コマ5: while / for / break / continue
- コマ6: 関数呼び出し・再帰
- コマ7: lvalue / rvalue + ポインタ
- コマ8: 型検査の導入
- コマ9: ポインタ演算とスケーリング
- コマ10: 文字列リテラルと .data セクション
- コマ11: 式の走査と libc 活用
- コマ12: 構造体とヒープ(struct / . / -> / sizeof / malloc / 連結リスト)
- コマ13: グローバル変数・スコープ管理
- コマ14: 複数ファイル・前処理の概念
- コマ15: Python 版総合演習・mycc.py 統合
- コマ16: 発表・振り返り
発展課題
選択制の28トピック。回 ID の頭文字がカテゴリを表す。
仕様・参考文書
知りたいことから引く索引と、仕様・参考文書の本体。
補助ガイド
演習そのものではないが、あると進めやすくなるもの。
補助ツール
ブラウザで動く学習支援アプリです。環境構築の前でも触れます。