有关cr编译器的使用方法的书籍
⑴ 能不能推荐一些c语言面向对象编程的书籍。。 关键就是c语言如何实现面向对象的思想的书籍。。
你学过javaScript你就感觉as很简单的,他们很相似的。我是学动漫的,首先我们的课是先学JavaScript然后我感觉学as是真的很简单的。ActionScript 动作脚本是遵循 ECMAscript第四版 的 Adobe Flash Player 运行时环境的编程语言。它在 Flash 内容和应用程序中实现交互性、数据处理以及其他功能。
ActionScript是Flash的脚本语言,与JavaScript相似,ActionScript是一种面向对象编程语言。
呵呵
你看一下面的几个问答吧
问:我最近想去学flash制作,在网上找了找,发现有很多制作软件,如flash MX,flash MX2004和flash cs3 Pro,哪款比较好啊?
答:
2000年 flash 5.0
2002年 flash mx (就是flash 6.0)
2004年 flash mx2004 (就是flash 7.0)
2005年 flash 8.0
2006年 flash cs3 (就是flash 9.0)
2008年 flash cs4 (就是flash 10.0)
目前的最新版本是flash cs4 功能非常强大,不仅支持骨骼动画,还支持3维等等,verycd上有视频教程,可以去学习一下。
不过初学的话,个人建议你从flash cs3开始,以便今后玩flash cs4,因为他们的操作性很相似,Flash 8现在虽然还是很多人在用,但是已经渐渐被新软件的新功能所取代。
FLASH CS3的好用之处::
1.cs3是ADOBE收购micromedia后的大作,无论从动画设计上,还是程序语言上都有质的飞跃。比如钢笔功能更加强大,超级强大的绘图功能,这些都让矢量图制作者提高了效率,使用更方便。
2.FLASH CS3引入了面向对象的AS3语言,使得AS不在是一个简简单单的脚本语言,而摇身变成一种强大的高级程序语言。另外,FLASH CS3也全面支持AS之前的版本,从AS1到AS2均支持。
3.作为初学者,因为没有基础,不存在用惯一个版本的软件,用新版本时要重新熟悉的问题,所以应尽量选择最新版本的软件进行学习,因为时代是在进步的,老版本的软件,学完了也就淘汰了,再学新的,还得重新熟悉界面及操作习惯。
4.目前由于flash cs4 10月份刚刚推出,目前CS4的教材并不多也不系统,所以建议以FLASH CS3作为学习的开始,而且FLASH CS4的界面和CS3差不多,只是加了些新功能。
问:怎样学会flash编程,要有什么基础,要学c语言吗,哪里有教程啊?该怎么学啊??
答:
如果你只是了解一下,网上的视频教程很多,可以去看一看。
但是如果你是很想学会,那么我建议你,要学习一门知识,就必须看系统的教材。因此不推荐看视频教程,网上的视频教程虽然很多,但是都很难系统性的教会你代码的结构、编程的思想。所以我的建议是买书学习。最好不要看电子书,个人觉得,看电子书的人,都喜欢跳着看,这样看就失去了意义。这样看下来,好像学会了,其实什么原理都没搞懂。
要真正的买一本书,一页一页的翻着看,看一遍不够,一本书至少3遍甚至n遍。还要多加练习。学习编程,首先从hello world开始,然后就是要每天写,经常写,这样才有进步。
很多人也有这样的担心,怕自己没有语言基础,例如没有学习过C等。其实大可不必担心,语言只是一种工具而已,目前的主流语言就好象同素异形体一样,看似有区别,其实都差不多。这就好像你会使用WIN98,升级到了WIN XP,你也不会说,连怎么打开文件都要重头学习一样。学习编程的关键是学习编程的思想,所以好的书教你怎么理解编程思想,差的书只是叫你怎么写代码,其中区别很大。
AS2的书,这里不做推荐了,我也没看过什么好点的书,我学AS2完全就是看帮助学会的,主要是有JS基础。
这里推荐一本AS3的书:《action script3.0殿堂之路》
问:我是老程序员了,对Javascript和Java都比较擅长,现在想学Flex,但不知道有什么经典一点的书籍?
答:
1.初学者,推荐《action script3.0殿堂之路》,也有人推荐《as3权威宝典》个人觉得那书写的不行。
2.flex的话,推荐《flex第一步》
3.as3语言掌握的7788了以后,可以去看以下一些书籍
4.实用书籍:
Action Script3.0 Cook Book —— 类似帮助手册的书籍
Action Script3.0 设计模式 —— 一本讲述程序设计思想的书籍,强烈推荐
问:flash as2.0 与 as3.0的本质区别?
答:
首先说下as2,as2实际上是as1的升级版,引入一面向对象的概念,但并不是完全面向对象的语言,只是在编译过程中支持OOP语法。as2的面向对象虽然不全面,但是却是首次将OOP带到了FLASH,而AS3是一个完全基于OOP的标准化面向对象语言,最重要的就是as3不是as2的简单升级,而完全是两种思想的语言。可以说,as3全面采用了面向对象的思想,而as2则仍然停留在面向过程阶段,举个例子,就像VB和C#的对比。
所以as3绝不是as2的升级版,在as3里,可以看到java和c#的影子,确实,这三种语言大部分思想都是一致的,只有一些小的区别,比如as3引入了命名空间的概念,但是不支持比如委托,在包封装及外部访问上也引入了一些新概念。
在编译阶段,as2采用的是AVM1(actionScript vitual machine),而as3采用的是AVM2。新一代虚拟机采用了OOP思想,在执行速度上比起avm1也快了10倍。还提供了异常处理。以前我们在使用AS2时,一旦出错,AVM1选择的是静默失败,让人根本不知道什么地方出错了,会浪费大量的时间去查错,而AVM2与目前主流的编译器一样,会有异常处理,运行出错会输出错误提示,工作效率大大提高。如果做个对比,我想说,AVM1就是大刀长矛,而AVM2就是手枪,大刀和长矛也能杀敌,但是只在面对弱智的敌人才能发挥作用,面对一个大型项目,不用点现代化工具是不行滴。
as2与as3的部分区别,只说一些大的区别,小的不同太多,就不谈了:
1.运行时异常机制处理,这个刚才说过了。
2.事件机制,这也是很多人拿起as3就不知所措的原因,初学者会发现连一个按钮点击的方法都写不出来。实际上as3的事件机制采用的是监听的方式,和as2时代的onClipEvent不同,as3里所有的事件都是需要触发器,监听器,执行器三种结构的,这样做的好处就是使得这个语言非常的坚强,非常的标准化。不像as2,奇形怪状的代码漫天飞,可以这样写,也可以那样写,代码变得繁复难懂,可读性太差,执行效率也大大降低。要特别说明的是,as3的所有事件都直接继承event对象,而event是直接继承自大老板Object类,结构多么完美。所以在as3中,所有的事件都继承自相同的父亲,结构相同,提高了重用性。
3.封装性,这是as3与as2最大的不同,as3引入了封装的概念,使得程序安全性大大提高,各个对象之间的关系也通过封装,访问控制而得以确定,避免了不可靠的访问给程序带来的意外产生。
4.XML,我觉得这是最令人激动人心的改变,现在as3程序员可以很轻松也很自豪的说,我们是使用XML人群中最快乐的人。AS2时代对XML的存取仍然需要解析,而AS3则创新的将XML也视作一个对象,存取XML就像存取普通对象的属性一样方便,用点语法就可以,无疑大大提高了效率。
5.最关键的一点,容器的概念,AS3采用了容器的思想,告别了as2一个MovieClip打天下的局面。对于as2程序员来说,可能不能理解,我mc用的好好的,干嘛不让我用啊。但是当你真正的了解as3的思想的时候,当你真主的体会到OOP的好处的时候,你会觉得as3的容器的思想的完全正确的。as2时代,我们做什么都用mc,而as2时代的mc也是直接继承自object,这给了mc极大的权限,极其多的方法属性,而有时我们只需要放一个背景图,并不需要它动,这样做就造成了极大的浪费。说实在话as2和as3比起来就是浪费之神,所以as2编出的swf绝对比as3编译出来的swf要大上几倍。as3把所有你用到的显示对象都分开,mc的属性方法都被瓜分开来,举个例子,你去水果超市买水果,就肯定比直接去大型超市买要方便,更节约时间,时间就是金钱,那就是很大的节省。
当然还有许许多多的不同,比如程序执行机制,设计模式,结构框架等等,这里就不在一一赘述。
问:怎么才能成为编程高手?
答:
可以说,学会编程并不难,怎么才能写出好的程序,这是很多人所困惑的事情,我有时候也是左思右想,觉得自己写出来的东西太在是太垃圾了。那么真正的高手他们在做些什么呢?他们到底因为什么才能成为高手呢?
其实,我们很多人都仅仅停留在会写程序的阶段,并没有去研究,一个程序怎么写才算是合理的,什么样的结构,才是最完善的,什么样的布局才是可扩展的。什么样的代码才是最高效的。而这正是高手花功夫去研究的事情,也是为什么高手能做的更好的原因。
我总结了一下,觉得以下才是一个程序员应该思考的路:
1.第一类人:会写程序,这没什么,人人都能办到。(70%的程序员都在这里)
2.第二类人:有一定的结构思想,能做设计结构上的调整。能走到这一步,应该可以算真正入门了。(15%的程序员在这里,很不幸,本人也在这里。)
3.第三类人:熟练应用各种设计模式,到了这里,才算涉足高级编程领域。这样的人才能算高手。(10%左右,我想黑羽同志应该属于这个级别)
4.第四类人:有算法分析和创意思维,能做到这一步的人,写出来的程序就不叫程序了,叫伟大发明!(5%左右,微软和谷歌的专家们在这里)
5.第五类人:这一类人是我不敢想象的,已经超出我的思考范畴了。(趋向0%)
⑵ 帮介绍本Visual C++的从入门到深入的书
学习C++从入门到精通的的十本最经典书
1.《C++Primer》
有“C++的网络全书”,C++程序员人手必备。对语法、语义的描述非常细致和严谨,适合有一定经验的C、C++程序员作为工具书和理论指导书使用,但由于其有一定深度,而没有进阶顺序的章节安排,所以不适合初学者做为教材使用,价格略高。
难度:★★☆
质量:★★★★★
广度:★★★★★
深度:★★★★
性价:★★★☆
2.
《C++Primer Plus》
初学C++不错的书,覆盖面较全,章节安排比较合理,由浅入深,也很容易,故因此失去了一些深度。价格比较便宜,但翻译质量略有不足。
难度:☆
质量:★★★☆
广度:★★★★
深度:★★★
性价:★★★☆
3.
《Essential C++》
lippman的一部面向初学者的作品。在他写了那么后一本primer之后,为何还要写这么薄这么浅的书呢?其实primer对于初学者来说太笨重了,而这本书却是从不同的方面——C++的本质和组织结构对语言进行阐释,可以帮助初学者对这门语言有一个大致的了解,但知识范围不很全面,不适合系统学习,读者需要一定的编程知识。
难度:★☆
质量:★★★★
广度:★★★☆
深度:★★★
性价:★★☆
4.
《Effective C++》、《More Effective C++》
C++真牛人大手笔,之以条款的形式回答了程序员在使用C++时经常提出的“因该注意些什么?”,“因该避免什么?”,“因该怎样去解决?”,“为什么?”等问题。C++程序员想要让自己的水平上更高的档次,此二书必看。价格稍贵,有一定难度,不适合初学者。
难度:★★★☆
质量:★★★★★
广度:★★★
深度:★★★★★
性价:★★
5.
《C++编程思想》
除了讲述语言之外,有一定的工程性,从设计者的角度来描述C++怎样应用在实际的项目中。语言描述的全面性欠佳,但还是有一定精度的,尤其是在一些小技巧方面。本书还引入了大量的战例,通过一个个的真实项目来引导你使用C++的思想去思考问题。翻译很差,有一定难度。
难度:★★☆
质量:★★★
广度:★★★☆
深度:★★★★
性价:★★★
6.
《C++大学教程》
正如其名,真正的大学教程,非常适合初学者学习,内容由浅入深,对C++各项特性的描述都很到位,章节的安排很有条理性,但深度略显不足,翻译质量不能称之为很好,有一定的疏漏,但对于厚度来讲,价格还算比较便宜。
难度:★
质量:★★★☆
广度:★★★★★
深度:★★★★
性价:★★★★☆
7.
《C++语言的设计和演化》
对于热爱C++的朋友来说,确实好书一本,可以当做小说来读,可以放在厕所或床头上以供消遣。本书对语言本身描述很少,并有一定难度。读者需要对C++有一定了解,不适合初学者阅读。
难度:★★★
质量:★★★
广度:★★☆
深度:★★★★
性价:★★★
8.
《C++程序设计语言》
C++之父所作,被称之为“C++圣经”。不仅对语言,而且对语言周边的一些如发展史、语义哲学都有比较详细的描述。对语言的描述较为全面,同时包含一部分和程序库相关联的知识,并有一定深度,适合有一定语言基础的初学者,翻译质量不错,价格适中。
难度:★☆
质量:★★★★☆
广度:★★★★☆
深度:★★★★
性价:★★★☆
9.
《深度探索C++对象模型》
第一代C++编译器开发主管所写。如果你想成为真正的C++高手,看这本书,他为你讲述了编译器在处理各种语法时在“后台”所做的事。对C++有较深入了解的读者会在读后有恍然大悟之感。候杰翻译,质量相当不错,但内容太深,只适合对C++有较深了解的读者,价格偏贵。
难度:★★★★☆
质量:★★★★★
广度:★★★
深度:★★★★★
性价:★★
10.
《C++程序设计教程》(钱能-清华版)
国人所着,国人水平实在有限,深度和广度欠佳,放在这十大里实在是因为再挑不出好书了。可圈可点之处有讲解较为清析、简单,符合中国学生思路,价格便宜。
难度:☆
质量:★★★
广度:★★★☆
深度:★★★
⑶ 哪本"编译原理"的书比较好
我们学校用的是《编译原理》与《编译原理与实践》这两本书,这两本书都是国外的教材。我觉得《编译原理与实践》这本书不错,自学应该能看懂,而且代码比较多,书最后还有整个小型编译器的源代码。
编译不好学,你就慢慢学吧。
下面的资料请作参考:
当代编译技术三大圣经级别的教材
1.龙书(Dragon book)
书名是Compilers: Principles,Techniques,and Tools
作者是:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman
内容简介
《编译原理》作者Alfred V.Aho、Ravi Sethi和Jeffrey D.Ullman是世界着名的计算机 科学家,他们在计算机科学理论、数据库等很多领域都做出了杰出贡献。《编译原理》 是编译领域无可替代的经典着作,被广大计算机专业人士誉为“龙书”。《编译原理》一 直被世界各地的着名高等院校和科研机构(如贝尔实验室、哥伦比亚大学、普 林斯顿大学和斯坦福大学等)广泛用作本科生和研究生编译原理与技术课程的 教材,《编译原理》对我国计算机教育界也具有重大影响。 书中深入讨论了编译器设计的重要主题,包括词法分析、语法分析、语法制 导分析、类型检查、运行环境、中间代码生成、代码生成、代码优化等,并在 最后两章中讨论了实现编译器的一些编程问题和几个编译器实例,而且每章都 提供了大量的练习和参考文献。
与上一版相比,《编译原理》第二版进行了全面的修订,涵盖了编译器开发方面的最新进展。每章中都提供了大量的系统及参考文献。《编译原理》是编译原理课程方面的经典教材,内容丰富,适合作为高等院校计算机及相关专业本科生及研究生的编译原理课程的教材,也是广大技术人员的极佳参考读物。
作者简介
Alfred V.Aho,美国歌伦比亚大学教授,美国国家工程院院士,ACM和IEEE会士,曾获得IEEE的冯·诺伊曼奖。着有多部算法、数据结构、编译器、数据库系统及计算机科学基础方面的着作。
Monica S.Lam,斯坦福大学计算机科学系教授,曾任Tensilica的首席科学家,也是Moka5的首任CEO。曾经主持SUIF项目,该项目产生了最流行的研究用编译器之一。
Ravi Sethi,Avaya实验室总裁,曾任贝尔实验室高级副总裁TLucent Technologies通信软件的CTO。他曾在宾夕法尼亚州立大学、亚利桑那州立大学和普林斯顿大学任教,是ACM会士。
Jeffrey D.Ullman斯坦福大学计算机科学系教授和Gradiance CEO,他的研究兴趣包括数据库理论、数据库集成、数据挖掘和利用信息基础设施教学等。他是美国国家工程院院士、IEEE会士,获得过ACM的KarIstrom杰出教育家奖和Knuth奖。
第一版中文版
第二版中文版
2.鲸书(Whale book)
书名是:Advanced Compiler Design and Implementation
作者是:Steven S.Muchnick
内容简介
本书迎接现代语言和体系结构的挑战,帮助读者作好准备,去应对将来要遇到的编译器设计的问题。
本书涵盖现代微处理器编译器的设计和实现方面的所有高级主题。本书从编译设计基础领域中的高级问题开始,广泛而深入地阐述各种重要的代码优化技术,分析各种优化之间的相对重要关系,以及实现这些优化的最有效方法。
本书特点
●为理解高级编译器设计的主要问题奠定了基础
●深入阐述优化问题
●用Sun的SPARC、IBM的POWER和PowerPC、DEC的Alpha以及Intel的Pentium和相关商业编译 器作为案例,说明编译器结构、中间代码设计和各种优化方法
●给出大量定义清晰的关于代码生成、优化和其他问题的算法
●介绍由作者设计的以清晰、简洁的方式描述算法的语言ICAN (非形式编译算法表示)。
本书是经典的编译器着作,与“龙书”齐名,称为鲸书。书中针对现代语言和体系结构全面介绍了编译器设计与实现的高级论题,从编译器的基础领域中的高级问题开始,然后深入讨论了各种重要的代码优化。本书专为编译器专业人士和计算机专业本科生,研究生编写,在设计和实现高度优化的编译器以及确定优化的重要性和实现优化的最有效的方法等方面,为读者提供了非常有价值的指导。
作者简介
Steven S.Muchnick,曾是计算机科学教授,后作为惠普的PA-RISC和SUN的SPARC两种计算机体系结构的核心开发成员,将自己的知识和经验应用于编译器设计,并担任这些系统的高级编译器设计与实现小组的领导人。他在研究和开发方面的双重经验,对于指导读者作出编译器设计决策极具价值。
3.虎书(Tiger book)
书名是:Modern Compiler Implementation in C /Java /ML,Second Edition
作者是:Andrew W.Appel,with Jens Palsberg
内容简介
《现代编译原理——C语言描述(英文版)/图灵原版计算机科学系列》全面讲述了现代编译器的各个组成部分,包括:词法分析、语法分析、抽象语法、语义检查、中间代码表示、指令选择、数据流分析、寄存器分配以及运行时系统等。与大多数编译原理的教材不同,《现代编译原理——C语言描述(英文版)/图灵原版计算机科学系列》采用了函数语言和面向对象语言来描述代码生成和寄存器分配,对于编译器中各个模块之间的接口都给出了实际的 C 语言头文件。 全书分成两部分,第一部分是编译的基础知识,适用于第一门编译原理课程(一个学期);第二部分是高级主题,包括面向对象语言和函数语言、垃圾收集、循环优化、 SSA(静态单赋值)形式、循环调度、存储结构优化等。
本书是一本着名的编译原理课程的教材。国际上众多名校均采用本书作为编译原理课程的教材,包括美国麻省理工学院、加州大学伯克利分校、普林斯顿大学和英国剑桥大学等。本书在国外享有“虎书”的称号,与有“龙书”之称的《编译原理》(Alfred Aho 等编着)齐名。与编译原理方面的其他名着相比,本书出版时间晚,内容新。 书中专门为学生提供了一个用 C 语言编写的实习项目,包括前端和后端设计,学生可以在一学期内创建一个功能完整的编译器。
作者简介
Andrew W.Appel,美国普林斯顿大学计算机科学系教授,第26届ACM SIGPLAN-SIGACT程序设计原理年会大会执行主席,1998-1999年在贝尔实验室做研究工作。主要研究方向是计算机安全、编译器设计、程序设计语言等。
⑷ 51单片机汇编语言基础书籍: 谁有推荐关于学习51单片机汇编语言基础的书籍 比较好的
《MCS-51/96系列单片机原理及应用》,这个主要是针对汇编的,但是摸索透了之后也要学着接触C。
还有,如果想真正学好单片机,光看书是肯定不行的,在网上买一块开发板,照着实验过一遍,保准你不说精通也学成高手了。
⑸ 有没有讲编译器如何优化代码的书,有关C语言的,推荐一下
代码优化啊,现代编译器采用优化方法都差不多,看编译原理就行了,编译原理也就后面会用一个小章带过。常用的比如:循环展开,寄存器使用优化,常量直接算出来,除法优化,分支判断优化等等很多很多。据说除法优化后和乘法相比慢不了多少,没测过。
其实真正应该看的是计算机组成原理,当你理解了计算机工作机制后,这些优化方法都很容易理解,而且你也会发现,程序的运行效率的提高,一方面要靠处理器,比如流水线,超标量,多级缓冲等技术,另一方面就是编译器的优化。
⑹ 有没有教如何编写编译器程序的计算机方面的书籍呢
编译原理
作者: (美)Alfred V.Aho Monica S.Lam Ravi Sethi Jeffrey D.Ullman [作译者介绍]译者: 赵建华 郑滔 戴新宇此书被称为 龙书可见在编译原理类书籍中的地位
⑺ 怎样去写一个编译器(用C语言写C语言编译器),需要哪些知识做铺垫,可以给一下相关网站和书籍的推荐吗
写编译器重点就是设计并实现一些数据结构和算法,语言特点太多的话,代码写起来不容易,建议你找一个小语言尝试下,不要一开始就去尝试成熟语言。否则你会在写完语法分析程序以后,遭遇到很大的困难。多数人都是在写语义分析程序的时候,突然发现自己设计的数据结构很烂,后边越写越要命。
如果你想入门编译器的话,那么可以看《编译原理与实践》,整本书先将编译器理论,然后后边教你一步步实现c-miuns(c的子集)的编译器,包括lex,yacc,都在几千行代码左右。这本书讲的比较简单易懂一点
也可以学学斯坦福大学的编译器设计公开课(aiken设计了一个叫cool的语言,专门用来教人写编译器),课程地址上面有人给了:Compilers。这门课以前有个实验环境(据说已经给了,我以前写的时候还是用的网上一个不完整的实验环境),把和编译器知识无关的内容都给你写好了,你只需要在固定的地方填上你的内容就可以写出你的编译器(不要觉得很简单哦,人家的代码写的很精巧的,读完就发现写个好编译器还是很费脑子的),另外,这个实验环境有个特点,就是在每一步都提供标准程序做对比,你可以在写完一部分以后就同标准程序对比,及时发现错误。这种方式为写编译器又提供了很多帮助
先找个小的,慢慢研究,弄懂了整体的结构再说
⑻ C++算法的书籍(适合初学的)
高一凡的数据结构与算法,c++版,适合初学者
⑼ 有没有比龙书通俗易懂的编译原理书籍
大学课程为什么要开设编译原理呢?这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,可是编译原理却一直作为大学本科的必修课程,同时也成为了研究生入学考试的必考内容。编译原理及技术从本质上来讲就是一个算法问题而已,当然由于这个问题十分复杂,其解决算法也相对复杂。我们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比较专注解决一种的算法了。在20世纪50年代,编译器的编写一直被认为是十分困难的事情,第一Fortran的编译器据说花了18年的时间才完成。在人们尝试编写编译器的同时,诞生了许多跟编译相关的理论和技术,而这些理论和技术比一个实际的编译器本身价值更大。就犹如数学家们在解决着名的哥德巴赫猜想一样,虽然没有最终解决问题,但是其间诞生不少名着的相关数论。
推荐参考书
虽然编译理论发展到今天,已经有了比较成熟的部分,但是作为一个大学生来说,要自己写出一个像TurbocC,Java那样的编译器来说还是太难了。不仅写编译器困难,学习编译原理这门课程也比较困难。
第一本书的原名叫《CompilersPrinciples,Techniques,andTools》,另外一个响亮的名字就是龙书。原因是这本书的封面上有条红色的龙,也因为獗臼樵诒嘁朐?砘?嘴域确实?忻?所以很多国外的学者都直接取名为龙书。最近机械工业出版社已经出版了此书的中文版,名字就叫《编译原理》。该书出的比较早,大概是在85或86年编写完成的,作者之一还是着名的贝尔实验室的科学家。里面讲解的核心编译原理至今都没有变过,所以一直到今天,它的价值都非凡。这本书最大的特点就是一开始就通过一个实际的小例子,把编译原理的大致内容罗列出来,让很多编译原理的初学者很快心里有了个底,也知道为什么会有这些理论,怎么运用这些理论。而这一点是我感觉国内的教材缺乏的东西,所以国内的教材都不是写给愿意自学的读者,总之让人看了半天,却不知道里面的东西有什么用。
第二本书的原名叫《ModernCompilerDesign》,中文名字叫做《现代编译程序设计》。该书由人民邮电出版社所出。此书比较关注的是编译原理的实践,书中给出了不少的实际程序代码,还有很多实际的编译技术问题等等。此书另外一个特点就是其现代而字。在传统的编译原理教材中,你是不可能看到如同Java中的垃圾回收等算法的。因为Java这样的解释执行语言是在近几年才流行起来的东西。如果你想深入学习编译原理的理论知识,那么你肯定得看前面那本龙书,如果你想自己动手做一个先进的编译器,那么你得看这本《现代编译程序设计》。
第三本书就是很多国内的编译原理学者都推荐的那本《编译原理及实践》。或许是这本书引入国内比较早吧,我记得我是在高中就买了这本书,不过也是在前段时间才把整本书看完。此书作为入门教程也的确是个不错的选择。书中给出的编译原理讲解也相当细致,虽然不如前面的龙书那么深入,但是很多地方都是点到为止,作为大学本科教学已经是十分深入了。该书的特点就是注重实践,不过感觉还不如前面那本《现代编译程序设计》的实践味道更重。此书的重点还是在原理上的实践,而非前面那本那样的技术实践。《编译原理及实践》在讲解编译原理的各个部分的同时,也在逐步实践一个现代的编译器TinyC.等你把整本书看完,差不多自己也可以写一个TinyC了。作者还对Lex和Yacc这两个常用的编译相关的工具进行了很详细的说明,这一点也是很难在国内的教材中看到的。
推荐了这三本教材,都有英文版和中文版的。很多英文好的同学只喜欢看原版的书,不我的感觉是这三本书的翻译都很不错,没有必要特别去买英文版的。理解理论的实质比理解表面的文字更为重要。
编译原理的实质
几乎每本编译原理的教材都是分成词法分析,语法分析(LL算法,递归下降算法,LR算法),语义分析,运行时环境,中间代码,代码生成,代码优化这些部分。其实现在很多编译原理的教材都是按照85,86出版的那本龙书来安排教学内容的,所以那本龙书的内容格式几乎成了现在编译原理教材的定式,包括国内的教材也是如此。一般来说,大学里面的本科教学是不可能把上面的所有部分都认真讲完的,而是比较偏重于前面几个部分。像代码优化那部分东西,就像个无底洞一样,如果要认真讲,就是单独开一个学期的课也不可能讲得清楚。所以,一般对于本科生,对词法分析和语法分析掌握要求就相对要高一点了。
词法分析相对来说比较简单。可能是词法分析程序本身实现起来很简单吧,很多没有学过编译原理的人也同样可以写出各种各样的词法分析程序。不过编译原理在讲解词法分析的时候,重点把正则表达式和自动机原理加了进来,然后以一种十分标准的方式来讲解词法分析程序的产生。这样的做法道理很明显,就是要让词法分析从程序上升到理论的地步。
语法分析部分就比较麻烦一点了。现在一般有两种语法分析算法,LL自顶向下算法和LR自底向上算法。LL算法还好说,到了LR算法的时候,困难就来了。很多自学编译原理的都是遇到LR算法的理解成问题后就放弃了自学。其实这些东西都是只要大家理解就可以了,又不是像词法分析那样非得自己写出来才算真正的会。像LR算法的语法分析器,一般都是用工具Yacc来生成,实践中完全没有比较自己来实现。对于LL算法中特殊的递归下降算法,因为其实践十分简单,那么就应该要求每个学生都能自己写。当然,现在也有不少好的LL算法的语法分析器,不过要是换在非C平台,比如Java,Delphi,你不能运用YACC工具了,那么你就只有自己来写语法分析器。
等学到词法分析和语法分析时候,你可能会出现这样的疑问:词法分析和语法分析到底有什么?就从编译器的角度来讲,编译器需要把程序员写的源程序转换成一种方便处理的数据结构(抽象语法树或语法树),那么这个转换的过程就是通过词法分析和语法分析的。其实词法分析并非一开始就被列入编译器的必备部分,只是我们为了简化语法分析的过程,就把词法分析这种繁琐的工作单独提取出来,就成了现在的词法分析部分。除了编译器部分,在其它地方,词法分析和语法分析也是有用的。比如我们在DOS,Unix,Linux下输入命令的时候,程序如何分析你输入的命令形式,这也是简单的应用。总之,这两部分的工作就是把不规则的文本信息转换成一种比较好分析好处理的数据结构。那么为什么编译原理的教程都最终把要分析的源分析转换成树这种数据结构呢?数据结构中有Stack,Line,List这么多数据结构,各自都有各自的特点。但是Tree这种结构有很强的递归性,也就是说我们可以把Tree的任何结点Node提取出来后,它依旧是一颗完整的Tree。这一点符合我们现在编译原理分析的形式语言,比如我们在函数里面使用函树,循环中使用循环,条件中使用条件等等,那么就可以很直观地表示在Tree这种数据结构上。同样,我们在执行形式语言的程序的时候也是如此的递归性。在编译原理后面的代码生成的部分,就会介绍一种堆栈式的中间代码,我们可以根据分析出来的抽象语法树,很容易,很机械地运用递归遍历抽象语法树就可以生成这种指令代码。而这种代码其实也被广泛运用在其它的解释型语言中。像现在流行的Java,.NET,其底层的字节码bytecode,可以说就是这中基于堆栈的指令代码的。
关于语义分析,语法制导翻译,类型检查等等部分,其实都是一种完善前面得到的抽象语法树的过程。比如说,我们写C语言程序的时候,都知道,如果把一个浮点数直接赋值给一个整数,就会出现类型不匹配,那么C语言的编译器是怎么知道的呢?就是通过这一步的类型检查。像C++语言这中支持多态函数的语言,这部分要处理的问题就更多更复杂了。大部编译原理的教材在这部分都是讲解一些比较好的处理策略而已。因为新的问题总是在发生,旧的办法不见得足够解决。
本来说,作为一个编译器,起作用的部分就是用户输入的源程序到最终的代码生成。但是在讲解最终代码生成的时候,又不得不讲解机器运行环境等内容。因为如果你不知道机器是怎么执行最终代码的,那么你当然无法知道如何生成合适的最终代码。这部分内容我自我感觉其意义甚至超过了编译原理本身。因为它会把一个计算机的程序的运行过程都通通排在你面前,你将来可能不会从事编译器的开发工作,但是只要是和计算机软件开发相关的领域,都会涉及到程序的执行过程。运行时环境的讲解会让你更清楚一个计算机程序是怎么存储,怎么装载,怎么执行的。关于部分的内容,我强烈建议大家看看龙书上的讲解,作者从最基本的存储组织,存储分配策略,非局部名字的访问,参数传递,符号表到动态存储分配(malloc,new)都作了十分详细的说明。这些东西都是我们编写平常程序的时候经常要做的事情,但是我们却少去探求其内部是如何完成。
关于中间代码生成,代码生成,代码优化部分的内容就实在不好说了。国内很多教材到了这部分都会很简单地走马观花讲过去,学生听了也只是作为了解,不知道如何运用。不过这部分内容的东西如果要认真讲,单独开一学期的课程都讲不完。在《编译原理及实践》的书上,对于这部分的讲解就恰到好处。作者主要讲解的还是一种以堆栈为基础的指令代码,十分通俗易懂,让人看了后,很容易模仿,自己下来后就可以写自己的代码生成。当然,对于其它代码生成技术,代码优化技术的讲解就十分简单了。如果要仔细研究代码生成技术,其实另外还有本叫做《》,那本书现在由机械工业出版社引进的,十分厚重,而且是英文原版。不过这本书我没有把它列为推荐书给大家,毕竟能把龙书的内容搞清楚,在中国已经就算很不错的高手了,到那个时候再看这本《》也不迟。代码优化部分在大学本科教学中还是一个不太重要的部分,就是算是实践过程中,相信大家也不太运用得到。毕竟,自己做的编译器能正确生成执行代码已经很不错了,还谈什么优化呢?
编译原理的课程毕竟还只是讲解原理的课程,不是专门的编译技术课程。这两门课程是有很大的区别的。编译技术更关注实际的编写编译器过程中运用到的技术,而原理的课
⑽ 关于计算机编程c语言,java,自学看哪些书比较浅显易懂
其中《Head First Java》被亚马逊评为十大好书之一。在京东计算机类书籍中热度排名第16位,在Java类书籍中排名第2位。豆瓣评分为8.8分,有百分之54.4%的读者给出了五星评价。在知乎社区中有来自无数位的大神做推荐。哪本书适合推荐给 Java 初学者? - 书籍推荐
以上都是小编收集了大神的灵药,喜欢的拿走吧!喜欢小编就轻轻关注一下吧!