課程相關

課名:編譯器設計 Compiler Design
科號:CS 340400
老師:李政崑
課本:教授自編講義
課別:資工系選修 B 類
學分:3
涼度:★★★★★(滿分五分,空心代表半分)
甜度:★★★★★(滿分五分,空心代表半分)

建議先修課程

無,但如果有修過正規語言、計算理論在課程前中期會比較輕鬆。

課程內容/簡介

一開始簡介 Compiler,後來介紹 grammar 跟 parsing strategy,再介紹 Finite state machine 與 LL, LR parser。
Focus 在前端編譯器,修完課後差不多知道一些 grammar 跟 parser,主要是在記名詞,不太有算法或者優化,給想修的人參考看看。

教學進度如下:

  • Ch1 Introduction to Compilers
  • Ch2 Grammar, Parsing
  • Ch3 Finite State Machine
  • Ch4 LL, LR parser

上課方式

實體授課,一開始覺得老師超ㄎ一ㄤ講課很跳慟,但習慣從中抓重點後就覺得上課還滿有趣的,而且老師超可愛,很像一隻大白熊。

講義很亂,但該講的都有講到,不過如果是平常翹課,期望單純看講義期中期末就能高分的那無法,這堂課需要認真聽課,不然會跟不上。

我主觀認為老師講的還滿清晰的,雖然很跳慟,但一個觀念點會時常複習(很常複習超過 2 次),所以上課聽過後大概就記住了,然後老師真的很可愛。

上課聽不懂下課去問老師,老師也都很耐心的解惑直到學生理解為止,然後老師真的很可愛。

老師教課進度非常緩慢,而且老師慣性遲到,上課前又會複習上次教的內容,中間又花了很大的篇幅講第三次作業,所以一個學期下來感覺學到的有限。

作業

作業共分 3 次,內容如下:

  1. Lexer(用 lex)
  2. Parser(用 yacc)
  3. Compiler(Base on 前 2 次作業)

第一次作業大概一個下午,照著 spec 刻 regular expression 就出來了。

第二次作業大概 2 天,需要 handle 一些 conflict 稍微麻煩,準備好程式架構要花一點時間,實際寫 code 就沒很久,也是照著 spec 刻,spec 都講得很清楚。

第三次作業要花大量時間,跟前 2 次作業沒得比,而且第二次作業的 grammar 可能需要不少修改,不知道未來能否避免需要再反複修改前面作業的情況,即使前面都滿分。
作業內容是實際寫出一個可以 gen code 的簡單 compiler,作業的測資全部公開,這點真的很佛心,不用去 handle 一些奇怪的語法真的很棒,可以感覺到完全沒有要刁難學生。甚至還有總分 5 分很好拿的加分。
我自己是花 3, 4 天左右,期間改了很多次前面作業的內容,雖然 spec 說明的還算清楚,但一開始真的會很無從下手。

考試

考試共2次,期中與期末。

期中考我覺得很簡單,我看不少人 100,我自己也 100。平均我大致估一下應該在 75 那邊,標準差 20 左右(實際平均要更高,有幾個很低分的拉低了),結果考完第一節課老師一進教室:”大家那個,我們期中加 10 分”,總之就是很佛。

期末比期中再難一點點,但也是不難,總分甚至破百,因為期中加的 10 分會 overflow 到期末,所以我沒很認真準備,最後還是有快 100 分。

考試內容基本上就上課講義讀熟,考古做一做,還有考試前一節課的洩題做好筆記,就沒啥問題了,佛心來著。

助教

其他修課心得我都沒有特別把助教拉出來獨力一欄說明,但這堂課我覺得有這個必要。

先講結論,這堂課的助教非常用心,修課體驗非常好。

作業遇到任何問題向助教詢問助教都回覆非常快速,而且我的感受是助教並不是消極處理問題,而是會主動關心學生的情況,覺得助教很用心。

聽到大家的意見後,第三次作業也有 2 次的 demo 時段,配合需要更多時間的人。

真的要特別謝謝助教給這堂課一個很棒的修課體驗。

結論

平常完全沒有 loading 的課,考試前花個 2 天左右複習(或者跟別人借筆記),第三次作業準備多一點時間寫,很輕鬆就能 A+,佛心來著。
不過同課程內容所述,這堂課主要是在前端編譯器,做 lexer, parser 等等,如果想要有更深入的了解,研究所還有一堂高等編譯器。

給分

作業 3 次 30% +
期中考 30% +
期末考 30% +
Class participation 10%(這個最後直接給滿) +
期中加分 3% +
第三次作業加分 5%
= 108%

老師的喜好、個性

老師超級可愛,很有耐心,走路慢慢的很像一隻大白熊,老師通常都會遲到 10 分鐘,不過老師很可愛。
老師似乎是編譯器界的權威。

加簽

不清楚規定。

成績

總成績/班上排名:99(A+) 1/102 (破百的都給 99 而已)
T分數:59.72
成績分布: