编译原理学习导论

编译原理学习导论

 

大学课程为什么要开设编译原理呢?这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,可是编译原理却一直作为大学本科的必修课程,同时也成为了研究生入学考试的必考内容。编译原理及技术从本质上来讲就是一个算法问题而已,当然由于这个问题十分复杂,其解决算法也相对复杂。我们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比较专注解决一种的算法了。在20世纪50年代,编译器的编写一直被认为是十分困难的事情,第一Fortran的编译器据说花了18年的时间才完成。在人们尝试编写编译器的同时,诞生了许多跟编译相关的理论和技术,而这些理论和技术比一个实际的编译器本身价值更大。就犹如数学家们在解决著名的哥德巴赫猜想一样,虽然没有最终解决问题,但是其间诞生不少名著的相关数论。

 

推荐参考书

虽然编译理论发展到今天,已经有了比较成熟的部分,但是作为一个大学生来说,要自己写出一个像Turboc C,Java那样的编译器来说还是太难了。不仅写编译器困难,学习编译原理这门课程也比较困难。

正是因为编译原理学习相对困难,那么就要求有好的教师和好的教材。教师方面不是我们能自己更改的,而在教材方面我们却可以按自己的意愿来阅读。我下面推荐几本好的编译原理的教材。我推荐的书籍都是国外的经典教材,因为在国内的教材中,确实还没发现什么让人满意的。

 

第一本书的原名叫《Compilers Principles,Techniques,and Tools,另外一个响亮的名字就是龙书。原因是这本书的封面上有条红色的龙,也因为这本书在编译原理基础领域确实太有名气了,所以很多国外的学者都直接取名为龙书。最近机械工业出版社已经出版了此书的中文版,名字就叫《编译原理》。该书出的比较早,大概是在8586年编写完成的,作者之一还是著名的贝尔实验室的科学家。里面讲解的核心编译原理至今都没有变过,所以一直到今天,它的价值都非凡。这本书最大的特点就是一开始就通过一个实际的小例子,把编译原理的大致内容罗列出来,让很多编译原理的初学者很快心里有了个底,也知道为什么会有这些理论,怎么运用这些理论。而这一点是我感觉国内的教材缺乏的东西,所以国内的教材都不是写给愿意自学的读者,总之让人看了半天,却不知道里面的东西有什么用。

第二本书的原名叫《Modern Compiler Design,中文名字叫做《现代编译程序设计》。该书由人民邮电出版社所出。此书比较关注的是编译原理的实践,书中给出了不少的实际程序代码,还有很多实际的编译技术问题等等。此书另外一个特点就是其“现代”而字。在传统的编译原理教材中,你是不可能看到如同Java中的“垃圾回收”等算法的。因为Java这样的解释执行语言是在近几年才流行起来的东西。如果你想深入学习编译原理的理论知识,那么你肯定得看前面那本龙书,如果你想自己动手做一个先进的编译器,那么你得看这本《现代编译程序设计》。

第三本书就是很多国内的编译原理学者都推荐的那本《编译原理及实践》。或许是这本书引入国内比较早吧,我记得我是在高中就买了这本书,不过也是在前段时间才把整本书看完。此书作为入门教程也的确是个不错的选择。书中给出的编译原理讲解也相当细致,虽然不如前面的龙书那么深入,但是很多地方都是点到为止,作为大学本科教学已经是十分深入了。该书的特点就是注重实践,不过感觉还不如前面那本《现代编译程序设计》的实践味道更重。此书的重点还是在原理上的实践,而非前面那本那样的技术实践。《编译原理及实践》在讲解编译原理的各个部分的同时,也在逐步实践一个现代的编译器Tiny C.

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 8
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论
### 回答1: 编译原理是一门技术性很强的课程,要想快速学习,需要以下几点: 1. 认真阅读课本:编译原理的课本通常都很简洁明了,读课本是学习编译原理的基础。 2. 动手实践:编译原理是一门实践性很强的课程,通过动手实践来加深对知识的理解。 3. 思考问题:编译原理有很多的理论和技术,通过思考问题来加深对知识的理解。 4. 与他人交流:与他人交流可以帮助你更好地理解编译原理,并且可以得到他人的见解和建议。 5. 多做题目:通过做题目来巩固所学的知识,并且可以检验自己的理解程度。 ### 回答2: 要快速学习编译原理,以下是一些建议: 1.掌握基础知识:编译原理是计算机科学的基础课程,首先要了解编译器的基本概念、工作原理和主要组成部分,如词法分析、语法分析、语义分析等。阅读相关教材或参考资料,建立起正确的基础知识。 2.理解算法编译原理中包含许多重要的算法,如DFA、NFA、LL、LR、中间代码生成等。学习并理解这些算法的原理和实现方法,能够帮助更好地理解编译原理的工作流程。 3.动手实践:实践是学习编译原理的重要环节,通过实际编写一个简单的编译器或解释器,可以更好地理解和巩固所学知识。可以使用编程语言或工具如Lex、Yacc等进行实践,编写简单的语言解析程序,从而加深对编译原理的理解。 4.参考资料和实例:除了教材,还可以查找一些编译原理的优秀参考资料和实例,如龙书《编译原理》、《现代编译原理》等。通过学习和分析实际的编译系统或编译器源代码,可以更好地理解编译原理的实际应用。 5.与他人讨论和学习:参加相关的课程或与同学、老师进行讨论学习,可以相互激发思考和解决问题的能力。也可以加入编译原理相关的学习群体或论坛,与更多的编译原理爱好者进行交流和学习经验。 总的来说,要快速学习编译原理,除了掌握基础知识和算法原理外,动手实践和与他人讨论是非常重要的环节。通过理论和实践的结合,可以更好地理解和掌握编译原理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HashCodeWithJava

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值