现代编译原理
2005-9
人民邮电
Andrew W.Appel,Maia Ginsburg
544
无
《现代编译原理:C语言描述(英文版)(本科)》全面讲述了现代编译器的各个组成部分,包括:词法分析、语法分析、抽象语法、语义检查、中间代码表示、指令选择、数据流分析、寄存器分配以及运行时系统等。与大多数编译原理的教材不同,《现代编译原理:C语言描述(英文版)(本科)》采用了函数语言和面向对象语言来描述代码生成和寄存器分配,对于编译器中各个模块之间的接口都给出了实际的 C 语言头文件。 全书分成两部分,第一部分是编译的基础知识,适用于第一门编译原理课程(一个学期);第二部分是高级主题,包括面向对象语言和函数语言、垃圾收集、循环优化、 SSA(静态单赋值)形式、循环调度、存储结构优化等,适合于专题选讲、后续课程或研究生教学。 适用对象:《现代编译原理:C语言描述(英文版)(本科)》适用于高等院校计算机及相关专业的本科生和研究生,也可供科研人员或者专业技术人员使用。
国际上众多名校均采用本书作为编译原理课程的教材,包括美国麻省理工学院、加州大学伯克利分校、普林斯顿大学和英国剑桥大学等。本书在国外享有“虎书”的称号,与有“龙书”之称的《编译原理》(Alfred Aho 等编著)齐名。与编译原理方面的其他名著相比,本书出版时间晚,内容新。 书中专门为学生提供了一个用 C 语言编写的实习项目,包括前端和后端设计,学生可以在一学期内创建一个功能完整的编译器。
《现代编译原理:C语言描述(英文版)(本科)》是一本著名的编译原理课程的教材。国际上众多名校均采用《现代编译原理:C语言描述(英文版)(本科)》作为编译原理课程的教材,包括美国麻省理工学院、加州大学伯克利分校、普林斯顿大学和英国剑桥大学等。《现代编译原理:C语言描述(英文版)(本科)》在国外享有“虎书”的称号,与有“龙书”之称的《编译原理》(Alfred Aho 等编著)齐名。与编译原理方面的其他名著相比,《现代编译原理:C语言描述(英文版)(本科)》出版时间晚,内容新。 书中专门为学生提供了一个用 C 语言编写的实习项目,包括前端和后端设计,学生可以在一学期内创建一个功能完整的编译器。
无
正在读,刚跟着它的实践练习做到第四章。这本书确实讲的简略,重在实践。前端部分个人觉得《编译原理与实践》讲的最通俗易懂,可以先熟悉那部分再看这本书估计就能跟着练习走了。
p.s. 书中的代码只是个示范,可能要做些改动才能运行
http://gc-daniel-0318.spaces.live.com/blog/cns!B6826F6CF83C99E!5031.entry
随手写几个,一是推荐几本书,二是交流一下学习体会
首先是编程语言,这个东西是最没必要挑书的。刚入门的时候找本简单点的,能马上上手的,最好比较薄——也就是比较便宜——的书看看,比方工具王谭浩强的系列,比方钱能的C++前半本,然后就可以转到手册或者编译器带的帮助之类,各种语言的手册都是免费的。至于所谓的深度讲解、核心编程之类,当资料查查就行了,看不看的意思不大,具体原因稍后解释
基本的语言概念有了,就可以看数据结构了。其实讲语言没有不讲数据结构的,像链表、堆栈什么的,所以单纯的数据结构书也不用挑剔,随便什么语言的都无所谓,根据自己需要,找著名出版社出的一线教师写的书,比方清华那本黄皮的C++版,好象是温冬婵等三人写的。数据结构也是为了解决实际问题,所以只要对基本的数据结构有印象就行了,也没必要选怎么怎么牛的书
然后就是算法,这个是肯定要下大力气学习的。讲数据结构的书也没有不谈算法的,排序、查找等基本算法在数据结构书里都有。学算法主要的是原理,什么语言都一样。最实惠的是复杂度分析,恰好算法优劣比较是设计算法的大问题,所以这部分是重点又是难点。但是似乎现在能见到的大多数算法书都对复杂度分析讲的很简单,把篇幅集中在具体的算法上,所以只好自己从书里分析每个算法的过程里去体会,上学的时候在图书馆也看到过一些书上对这块讲的很清楚。我读过的大部分算法书都还有一个共同问题,就是让我很不服气。里面列举了大量的经典问题和著名算法,看的我很起劲,但是一把书合起来,脑子里一过,就发现,我要是遇到一问题,能想得出这样的算法吗?实践证明,我还真想不出来,第一反应一般总会是个基本的但也是极笨的算法。我还真就从来没遇到过一本真正教会人设计算法的书。这类书,可遇而不可求了。TAOCP绝对是作为工具书的好材料,当然,读起来也很有意思,DEK确实是个好笔杆子,但对我来说就是关键时刻求助用
以上这些方面都是在实际编码过程里可以看得出的招数拳脚,还有一些就属于内功修炼了,一时看不到效果,但是关键时刻可以体现出水平
操作系统,这里指的是操作系统原理,而不是操作之类。要是入门的话,推荐stalling的,好象是叫什么概念内核和分析之类的吧,国内有中文版,我读的是灰绿色封面的一版,原版的也有。这本书把基本概念讲解的还算清楚,虽然作者没说,但我感觉是按经典的系统5的路子,而且这本书也是为数不多的讲解管程的一本教材。还有就是关于MINIX、XENIX之类结合代码讲解的。之后可以看的书就多了,什么分布式、高级OS等,要想深刻学习,可以读代码,比方莱昂氏代码分析和LINUX代码分析,这两本看完,OS问题基本上就全部解决了,读这些代码的时候还可以学习编程技巧。OS编程是最简单的编程,它完全是在硬件能力基础上建立,自己定义规则而不需要遵循别的规则,但同时OS编程也是最复杂的,因为涉及的数据结构和算法种类多,要考虑的问题也多。UNIX和LINUX用的人那么多,一旦有人执行特殊操作,后果不堪设想,所以WINDOWS不断有UPDATE包出现。读这些代码其实也很有意思。不过我只是上学的时候读了莱昂氏的文件管理,刚毕业的时候读了一点LINUX的I/O控制两部分,读的也不全,而且忘的很快
编译原理,别以为这个只有做编译器的人才需要读,其实读好这门课,再思考代码的时候会有高屋建瓴的感觉。读编译原理之后,很明显的一个变化就是对代码的理解完全不一样了,对于代码应该怎么写,为什么要那么写,怎么写更好,错误是如何出现的,如果出错的后果,都能有理论到实践的全面认识,而那些深度讲解、核心编程之类的书之所以可以不看,也是因为在有了OS概念和编译理论后,这些东西稍微一想就能明白,原理都是一样的。那些深度讲解、核心编程之类的书都是给非计算机专业的人看的,因为他们不熟悉OS原理和编译理论等基础,无法一下子建立起比如进程线程控制、内存管理等概念,所以这些书手把手的教他们写代码,而且也是只教方法不讲原理。编译书,入门的可以看张幸儿教授的那本,讲解的蛮清楚的,自学就能懂。我在学校的教材就是这本,基本上也是自学的。这本书最大的问题在于,稍微老了点,所以代码优化部分不看也罢,词法语法分析部分也只讲到LR1的难度。之后,可以去看著名的“龙书”,好象是叫做什么编译原理概念原理与实践,封面有一条红色的大龙。这本书在编译领域20多年不衰,可见其地位。这本书对理论讲的很明白,但是问题也在于,老了点。不过因为LRK到现在一直都还没被淘汰,而且对于内存部分讲的很实用。这个我也只读到了词法语法分析就没再继续下去。这本书国内有影印,但是很难买。还有一本“虎书”,封面是绿色,有一只老虎,这本书出版时间比较晚,内容还挺新,每部分还都有实践,学完后把代码拼起来基本上就是个编译器。这本书国内有卖的,公司bookshell上也放过,我上学的时候也读过,当时是为了应付考试,后来发现考试没那么难,所以没读完
这些基本功相关的书都过一遍,但不用看的很详细,所谓好读书不求甚解,然后就可以结合必要的数学、应用知识,深入各个领域了
有人提到离散数学方面,这是对计算机领域最有用的一个数学分支。那本ROSEN教授的书,最好买最新版,这个老家伙很坏,每次更新版本都有很多变化。不过这种基础理论课没必要看洋人的,理论基础研究中国一直没落后过。北大耿素云、屈婉玲等人的那本就不错,清华一个张XX写的也挺好。只是北大那本书里有个别错误和疏漏,不知道现在最新版的纠正了没有。如果想要学的深刻点,可以看东南大学朱一清教授的,这个也是上学的时候老师推荐我们看的。朱教授的书写的深浅搭配很好,她的课也有意思。我上学的时候专门跑到东南去听过几次,不但在知识上,而且从讲课方式到语言风格都受益非浅。她的书也秉承了这个作风,内容严谨清晰。尤其关于数理逻辑部分,可能是因为她和我的老师是一脉相承,所以我对她的理论体系更容易接受,都是希尔伯特的理论体系,不是甘岑的体系
实在是和实际工作差的远了点,而且理论的东西太多。如果不是真的想研究编译器的话,读读知道个大概也就行了。
开始的编译树等知识还能凑和看懂,进入路径优化和寄存器分配就完全是在云里雾里的感觉。优化部分,《深入理解计算机》里讲得更实用。
书里最有意思的应该是分别把Tiger语言改为Pure Function或者OO的,仔细读下来,可以很好的理解不同语言的实现含义和运行方式。
翻了这么多本书,这是我看过的唯一一本讲具体怎么构建一个编译器的书。同时这本书所构建的编译器就像作者说的那样,简单但是并不平庸,拥有很多挺先进的特性。也能算是一个优化编译器。
但是要跟着这本书做下来还是有一定难度的,需要扎实的C语言功底。
Reading now.
Anyone who want to communicate the problems, just mail to me.
离散数学在程序设计体系中是怎样一个位置??
。。。这些难道不是出校门前都应该过关的东西么?
或者是写给非cs出身的programmer?
不错,数学功底很重要
归根还是一个programmer的逻辑能力
不知天高地厚
不过技术的帖子还是要顶。。。哈哈
写得挺长,但很多书你自己都没有看全
“那些深度讲解、核心编程之类的书之所以可以不看,也是因为在有了OS概念和编译理论后,这些东西稍微一想就能明白,原理都是一样的。”
你说的不用看的书包括什么?《windows核心编程》?《python核心编程》?
呵呵,还真被人挖出来了
三字经都没念会,还是少扯淡谷梁传的事吧
那倒不至于,不过也有个门槛,而且可能对你来说,这个门槛有点高
高不高手另说,圣人提倡的先知觉后知,先觉觉后觉的诚意是最基本的门槛
再者,若以水平为门槛,您也未必达标。连学编程语言和数据结构都要挑教材的,水平能高得到哪去?具体原因,原帖里有解释……可能您一开始压根就没看,也没打算看,所以,道德和学问,俩门槛您都没过,您还是多听多看多学习比较好
首先纠正你一个常识错误,教务长不负责选教材
基础的书多,但每本都差不多,语言本身就没什么可讲的,都是抄抄手册而已,只不过换个说法,如果阅读能力有限,倒是真应该仔细挑挑,挑一本生字少的,免得看不懂,还得查字典
高端分支领域,才有选择的余地和价值,每本书针对的读者不同,讲解的深度难度覆盖面不同,甚至在有些问题上,由于学派和风格的因素,所持观点大相径庭,这时候才有了选择的必要。当然了,有的人只看过一两本所谓的最著名的,一列举就是最大牌的几个人的代表作,这倒也不新鲜,不著名的它们也没听说过
至于所谓的诚意,怀疑派都被定义为没诚意,而反对派则要区分对待。你这种言行还没达到反对派的境界,也就是个初级怀疑派,只说哪里不对,却未必知道不对在哪,更是从来不说什么对,相比有破有立的反对派,高下立判
爷早说了,可压你的大旗不只道德,还有学问。之所以把你定性为怀疑派,因为你只破不立,只说那些不好,却从不说什么是好的,这也不怪你,你若是见过好的,早就说了。不过这个难不住你,现在信息传播的这么快捷,joyo上有的是书评,还怕不会评价吗
你可真滑稽,自己忘了自己说过的什么?你到底说的是教务主任还是系主任?教务主任一般是副主任,你是没听说过大学里的组织关系还是脑袋里装屎装多了装不下自己的废话?人性本恶不是可不是爷说的,是古人说的,爷抄来而已。但你的本性还不是恶,而是恶心。至于评得出评不出,这不是挺明显了吗,你废话这么多天,若是诚意和学问但凡有一样,你能一泡屎憋到现在还不拉?当然了,你拉完的也能吃回去,证据就在前面,推推鼠标就能看到。amazon不适合你,别美化自己,你还是继续看joyo吧,好歹是贴标货。别说国内了,全世界任何一本语言教科书,你找一本不抄手册的出来看看?爷也很想知道有哪本教语言的教材,作者能扔下手册的。避实就虚,呵呵,这个爷不如你,爷的实就在前面放着,你都避了这么多天了,怎么着,joyo上没东西?那你可以再看看chinapub嘛,难道你妈是和你外公生的你?近亲交配的产物?连换个地方抄述评都想不到?你可真给你舅舅丢人
哦对了,顺便教你一句圣人的话
圣人说了,有些人,不解答他们的问题就是给他们上课
不过你肯定不是遵循这个才一直不说书的事,这都是2000多年前的人说的话,那时候你祖宗还在山里爬树呢
哦对了,教务处的那叫教务主任,教务长这个名字,是胡适先生用过的,不过现在有的系叫教务副主任,或者罗嗦点的,分管教学的副系主任。胡老板那么大的学问,他用的词,一般人哪知道具体啥意思,像什么海淀走读啊,北大青鸟啊,那的人没文化,就管教务处的头头叫教务长了,也不是不可能,这个不怪你
不过,即使系主任,一般也不专门管这个,倒是听说海淀走读的系主任确实是要主抓买书的事,好拿回扣
最后吧,关照您一句,多吃点通便的药,别继续便秘了,赶紧拉出来轻省,这都憋了几天了,您这不拉屎还要定期来蹲一蹲的,也挺辛苦,不过爷海纳百川有容乃大,还能做到藏污纳垢,即便你学问人品一样没有,连抄个书评都这么费劲,满脑袋高粱花一肚子大粪汤,爷也不歧视你
唉,可惜了的孩子,爷开始还以为你没屎可拉,可没想到你自己说有屎要拉,那看来是真的便秘了,吃苹果呀,这东西,软化干结,刺激直肠,增加蠕动力,对你有好处,这知识在青鸟学不来吧
你确实没赶上有毒牛奶,你9月14以后才生的。放心喝啊,别着急断
哎哟喂,马甲都出来了,想骂街可是不敢骂,冒充马甲出来装纯洁?就这点起子?到底是娘少爹多的杂碎货。你肯定没长老鼠脸,你直接把自己的屁股长到脸上,医学版也收不下你照片,你的照片得发到冷笑话版去。不过当然了,你也不在乎,咱是土鳖,比不了你,你妈给你找了那么多爸爸,哪个番邦的都有,没准里头就有个高丽的棒子,带着你去整一把,照样跟李宇春似的。就怕你底版太烂,整不出来,但你放心,你还有个泰国爸爸,带你去那走穴,一样挣钱。其实你也不容易,你妈和你外公一不留神没戴套就把你给弄出来了,你爸爸倒是不在乎,反正都是你们家的基因,没外人,你的DNA多纯净啊,一点别家没有,全是你们自己家的。可也没办法,你爸爸戴着那么不大不小的绿帽子尺寸还刚刚好,问题这是你外公和你爷爷一起送的,你爸爸又是大孝子。你们家这传统真好,娶一个女人全家一起操
可怜的小逼,比学问被爷问到没词,骂街也不是对手,你说你还混个啥劲,隔壁有个茅房,临死前也能多看一眼你自己长的是个啥操性
哟,你的屎都排出去了?你不便秘了?你爹和你爷爷和好了?你妈不和你二大爷离婚了?你老婆不接客了?老鼠的儿子会打洞,那你倒是打洞去呀,我的儿。没人装你妈,你妈逼里倒是装着你全家,还是明码标价
冒充马甲也好,免得在窑子里看见你亲妈的时候不好意思上床
你说你咋连点练级的价值都没有呢
你爹当初没把你射墙上,不过因为你妈逼大,你爹又阳痿,所以虽然你爹很小心,但还是把你射到你妈逼外头了,你爹拿搅屎棍子把你蘸起来,这才抹到你妈逼里头。受委屈的也不是外人,你老婆跟你妈整天不回家,你以为她们哪去了?到处跑着找人睡觉。你爹阳痿,你比你爹还阳痿,你老婆没鸡巴插,到处找人安慰,这事也遗传?不过在我这的时候我是实在没兴趣,就你老婆的大烂逼,好鸡巴也能给熏阳痿,更何况你这先天遗传的。牙套你是用不上了,你连避孕套都用不上,你压根没勃起的功能,你还能射?就你那鸡巴,跟铅笔似的
你该不会是有帕金森吧?手发抖?咋的还一发就是俩一样的?要么就是你结巴,所以一样的话必须反复来上好几遍?韩非结巴人家能写书,你鸡巴软但你手可够生硬的
唉,怪不得你老婆宁可出去义务卖淫也不和你上床,怪不得你有家传的阳痿,怪不得你妈和你大爷有一腿,你咋还手抽筋了?你都是用手指头抠的?你手指头比你鸡巴还粗?那可真难为你,撒尿的时候你得多着急,那么细的鸡巴,居然还能撒得出来尿
人家写个贴,都挨骂,真没劲,有本事你写去!
这样争吵太没必要了。
我感觉楼主应该是很有学习心得的,但是不一定适合所有人。每个人思维侧重也不同。比如教材我就比较挑剔。
嗯,有些教材是要挑剔一下的,所以我也列了不少首选的书,但是具体到编程语言这样的书上,大没必要,我倒是首推语言自带的手册
经验之谈....应该鼓励发表!
冷嘲热讽,没意思,没什么好吵的了!
楼主也挺好玩的,不用跟这样的人计较太多了.....
确实是这样,初学的人千万不要在语言上纠缠,尤其是C++。。。
@四爷 谢谢你的启蒙,明白成长体系的大概了。
《深入理解计算机》适合我这种菜鸟看吗?
我在做代码优化的时候,发现很多计算机指令工作的原理理解太肤浅,尤其是对流水线之类的东西,很想系统的看看,请师兄给我推荐一本书撒~
是适合菜鸟的书哦,由浅入深的推荐最好啦,哈哈~
《深入理解计算机系统》http://www.douban.com/subject/1230413/
谁实现了这个C版本的编译器?有代码吗?
分享一下,Java的编译器代码也行.
这本书只有头文件*.h.爷爷的.
没有具体的实现,郁闷.
http://code.google.com/p/bellman/
我写的实现,现在还差最后一步寄存器分配没有做。汇编使用nasm,语法则是类C语法(因为我实在是不习惯tiger语言的语法,而完全按照c语法来实现有的地方很麻烦)
寄存器没有分配
-----------------------
现在可以编译了吗,生成的代码可以跑吗?
使用VS2005的C++版本作为开发环境吗?
我看这本书看得稀里糊涂的,呵呵,太笨了!
你也使用LR语法分析吗?用工具Lex这些工具了吗?
呵呵,我看代码里面还有python的代码哦.呵呵
谢谢,楼主是强人,呵呵
这本书讲的太简略了,绝对不适合初学者。
讲具体构建一个编译器的书很多啊,强烈推荐我们用的教材《编译原理与实践》 ,书中完成了一个4000多行的类C教学编译器TINY C(麻雀虽小五脏俱全)。Kenneth C. Louden著,机械工业出版社出版。
ps,补充一下,这本书还是很好的,有虎书(应该没记错-_-||)的称号,只是他确实不适合初学者。
《编译原理与实践》并没有实现TINY C,只是最后提到了一下。书中实现的是另一个更简单的几乎没什么意义的TINY。不过这本书前端部分讲得非常详细,很适合初学者
I got lots of trouble.... & no clue....