Re: [問題] 如何學寫COMPILER? [純拋磚引玉]
※ 引述《horngsh.bbs@ptt.cc (要公理要正義)》之銘言:
> 請教版上各位大大, 如果要實作一個C COMPILER該如何下手?
看你要做到什麼程度,
也就是說你要只是能產生 asm code 就好,
還是說要做各種最佳化,
前者非常簡單,
後者卻非常複雜而且跟硬體知識相關。
> 要看什麼書? 有SOURCE可看嗎? 還有LEX AND YACC好像也有關係?
1. Compilers: Principles, Techniques, and Tools (2nd Edition)
2. Crafting a Compiler with C
3. A Retargetable C Compiler: Design and Implementation
其中 1. 是 computer science 界眾人皆知的 compiler 聖經本,
在去年出第二版之前,
裡面大部分的章節都在講 parser,
最後面稍微提一下最佳化而已,
第二版以後還包含了各種近代的最佳化技術章節,
算是比較完整的課本,
scanner 的部分有說怎麼用 lex 實作,
而 parser 的部分有說怎麼用 yacc 實作,
但我不建議你拿 lex/yacc 來寫任何非玩具類型的 compiler。
至於 2. 的話,
理論內容跟 1. 的第一版差不多 (用的 notation 有所差異),
但主要是以 C 實現。
而 3. 的話是在講一套很簡單、容易移植,
一個叫做 LCC (習慣小寫,這裡大寫是怕有人看成 ICC) 的 compiler,
它幾乎沒有什麼最佳化的功能,
而這本書主要就是在講解它的 source code,
這套 compiler 是以純 C 寫成。
理論部分: 1. > 2. > 3.
實務部分: 3. > 2. > 1.
你可以自己衡量看看,
lex & yacc 非必學,
commercial product 一般都不會用它,
工業強度等級的軟體程式碼更不會用它,
純粹就只是一個教學用具而已。
--
Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net
School: National Tsing Hua University Department: Computer Science
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage: https://it.muds.net/~uranus
--
╔═══╗ ┼────────────────────────╮
║狂狷 ║ │* Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮
║ 年少║ ┼╮ < IP:140.119.164.252 > ╰─╮
╚╦═╦╝ ╰ * From:61-230-229-51.dynamic.hinet.net
─╨─╨─ KGBBS ─ ◎ 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 ◎
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 4 之 38 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章