看板Programming
标 题Re: [问题] 如何学写COMPILER? [纯抛砖引玉]
发信站政大狂狷年少 (Tue Apr 17 02:29:30 2007)
转信站ptt!ctu-reader!ctu-gate!ctu-peer!news.nctu!news.cis.nctu!news.cs.nthu!
※ 引述《[email protected] (要公理要正义)》之铭言:
> 请教版上各位大大, 如果要实作一个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:
[email protected]
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"的狂狷不驯;属於年少的轻狂色彩 ◎