2007年9月16日 星期日

Compiler (1)

其實肖想讀 Compiler Theory 很久了,只是學校沒有這方面的師資,週遭也沒有人會。 雖然才受資工系的教育滿一年就畢業了,不過一等有空,還是興致勃勃的想學習這門 mysterious 的理論。 :P

本來讀 Modern Compiler Design ( 這裡簡稱 MCD 好了 ),讀著讀著,讀 Parser 都還 OK , Creating top-down|bottom-up parser automatically 這類的也都 OK ,雖然過程還是挺吃力的。

到了中間 Attribute Grammar 的部份,發覺 MCD 並沒有交代的很清楚,連 ISSI-Dependency 也很含糊的帶過,一下就跳到 cycle 的問題,我都還不大清楚 cycle 怎麼來的阿! Synthesized , Inherited attribute 還未解說的很清楚, MCD 一下便將重點放在 L-Attribute , S-Attribute , Mutil-Visit Attribute 。 這讓我挫折感特重,於是 MCD 就擺在一旁一個禮拜之多....

這下好了,還好朋友蚊子寄給我一本 Aho 的 Compilers: Principle,Techniques and Tools,翻開來讀,發覺好讀多了,於是先把 MCD 擱著,決定把 Aho 讀完再說。 馬上發覺 synthesized , inherited attribute 等等的東西講的比 MCD 詳細的多,概念讀完如果不懂,還有 Example 可以讀, MCD 就沒有這麼詳細的 Example ,於是進度一下突破,由 Syntax-directed Definition 進入 Type Checking 的部份,開頭還算簡單,但後頭的 Operator Overloading , Polymorphic function ,靠自己讀還是很吃力,所以咬著牙根硬生生的把一堆 notation 囫圇吞棗似的吞了下去,不過還好 Type Checking 沒有寫到太多,不然我大概會發瘋。

感嘆。Type Checking 不知道是本來就有點複雜還是我頭腦笨?難怪 Type 可以拿出來寫一本書 " Types and Programming Language / Benjamin C. Pierce " 。

接下來正在讀的部份就是 Runtime Environment 了,也算是我有興趣的部份,其實最感興趣是後頭的 Code Gen 與 Code Optimization 。

總之目前的感想是,MCD 不適合像我這種自修 Compiler 的初學者讀,應該是先把 Aho 讀完才有基礎應付 MCD。

MCD 也有個部份挺不錯,有一整個 Chapter 討論 Funtional Language 。 ( 大心 )

basic polymorphic type checking
hybrid type checking