CS 8803 O08 Compilers—Theory and Practice - Spring 2025 Review

CS 8803 O08: Compilers—Theory and Practice

コンパイラ理論を学びながら実際にプロジェクトとして独自言語のコンパイラを作成するコース。カバーするのはフロントエンドからMIPSのAssemblyを吐き出すバックエンドまで。具体的には下記トピックに取り組む(シラバスから抜粋)。

Front end – Scanners (regular expressions, NFA/DFA, scanner generators) – Parsers (grammars, ambiguity removal, LL, LR, and other deterministic parsing) – Semantic analysis (symbol tables, syntax driven analysis, type systems, attribute grammars) • Middle – Intermediate forms – Syntax directed translation – Function and procedure calls – Runtime organization • Back end – Instruction selection – Register allocation – Code layout – Code generation – Code optimizations

個人的にはこれまでの取ったOMSCSのコースの中で最もハードだったし、同様に学びが最も多いものだったと思う。先述した通り、プロジェクトではコンパイラを作るのだけど、一方で定期的に宿題の提出も求められる。最後にはFinal Examもあるので、費やした時間は平均すると週25-30時間くらいだったと思う。書いたコードは大体全部で6500行くらい。初めてC++でそれなりのサイズのコードを書いた。

バックエンドを書いている時は寝不足になりながら取り組んでいたし、とても疲れた。その分、自分が作ったコンパイラが与えられたプログラムを元にMIPS assembly codeを吐き出して、SPIM上で期待した値を出力した際はそれなりの感動があった。過去にインタプリタを作ったり、フロントエンドとされる部分を作ることはあったけれど、バックエンドは初めてだったので学びが大きかった。バックエンド難しい!と強く感じたんだけどどうなんでしょう。

レクチャーや課題の内容も洗練されており、しっかりとした理解力が試されるものばかりで、よくデザインされたコースだと感じた。TAも親切な人が多く、質問すればすぐに回答を得ることができた。自分はOffice Hourには参加することができなかったけれど、レコーディングを聞くと親切に質問に答えているようだった。総じて、とてもいいコースだったと思う。疲れたけれど、まだ続けていたいと思う気持ちもあったし、楽しかった。これからも継続してコンパイラ周りの勉強は続けていきたい。