2019 秋 編譯器設計

這算是在台大最後一次的修課,朝思暮想終於修到了。延畢的這一學期除了跟徐贊昇教授繼續原本的研究專題還有當電腦對局理論的助教之外,再來就是這門課了。足見我對這門課的期待。

上課

上學期修了徐慰中教授開的虛擬機器,對教授的上課風格算是很熟悉了。老師上課真的很活躍,非常鼓勵同學們提問與思考技術細節。同時認為學生自己對上課內容要有主動性,所有留下許多空間給學生去課本中尋找。

上課教的就是傳統的編譯器實作技巧,從 xxx 到 LR parsing ,然後到轉成組合語言。後半段講編譯器到優化,register spilling, dead code elimination 還有變數的 copy-on-write 。最後作業六也會實作到一部分的優化技巧。

作業

這次上課是用 Crafting a Compiler with C ,整門課的作業也環繞在自己從頭到尾蓋出一個簡單的編譯器。隨著時代演進我們的 target ISA 是 RISC-V 。因為這是十分新穎的語言所以網路上基本上都要去 RISC-V Instruction Manual 裡查詢第一手資訊。跟上學期修虛擬機器的感覺一樣,老師的作業總是讓我感受到非常實務的經驗,獲益良多。

其中作業五所有的 function call 都是由自己定義,難度相較作業四大幅提升需要提早開始。但作業六助教有提供他的版本,也可以從他身上學到正式的 compiler 如何呼叫與實作。

  • 作業一:Simple Ac to DC compiler
  • 作業二:Lexer
  • 作業三:Parser generator with YACC
  • 作業四:Type Checker
  • 作業五:Code Generation 1 / 2
  • 作業六:Code Generation 2 / 2 + Optimization

考試

因為還是一門具有相當歷史性的學科,考試仍然不可少。所以有期中考還有期末考。老師的投影片脈絡蠻清楚看不懂的話還可以跟課本互相對照。不像是上學期虛擬機器題目是上課內容的更延伸問題,這門課考你對上課內容有沒有充分的了解。

小結

謝謝又因為老師的課收穫良多!實作一個編譯器我覺得在實作經驗還有資料結構又多了一些認識。可惜要畢業了所以修不到高等編譯器了。

也謝謝阿寬跟我一起寫完一個完整的編譯器!附上完成的 C to RISCV 編譯器:

Github repository – RISCVcompiler

如果你覺得有收穫,可以用 30 NTD 來支持我繼續創作更多內容。因為做自己喜歡的事而得到報酬,是再好不過的事了。(街口支付)

Author: eopXD

Hi 我是 eop ,希望人生過得有趣有挑戰XD

Leave a Reply