编译原理

Posted 162--麦振澎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译原理相关的知识,希望对你有一定的参考价值。

     编译原理是什么?编译原理计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 编译原理是计算机专业设置的一门重要的专业课程。虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力。这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,可是编译原理却一直作为大学本科的 必修课程,同时也成为了研究生入学考试的必考内容。编译原理及技术从本质上来讲就是一个算法问题而已,当然由于这个问题十分复杂,其解决算法也相对复杂。 我们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比较专注解决一种的算法了。在20世纪 50年代,编译器的编写一直被认为是十分困难的事情,第一Fortran的编译器据说花了18年的时间才完成。在人们尝试编写编译器的同时,诞生了许多跟 编译相关的理论和技术,而这些理论和技术比一个实际的编译器本身价值更大。就犹如数学家们在解决著名的哥德巴赫猜想一样,虽然没有最终解决问题,但是其间诞生不少名著的相关数论。
     学习编译原理有什么好处?1、可以更加容易的理解在一个语言种哪些写法是等价的,哪些是有差异的;2、可以更加客观的比较不同语言的差异;3、更不容易被某个特定语言的宣扬者忽悠;4、学习新的语言是效率也会更高;5、其实从语言a转换到语言b是一个通用的需求,学好编译原理处理此类需求时会更加游刃有余。而对于普通程序员,编译原理这门课主要掌握几点就够用了:1. 词法分析方面,掌握正则表达式,了解dfa/nfa。2. Parsing 方面,能读懂BNF,知道AST,会写简单的递归下降parser,会用antlr之类的parser generator。3. 优化方面,知道现代编译器的优化能力有多强,知道如何配合编译器写出高效易读的代码,避免试图outsmart编译器。4. 会实现简单的虚拟机(stack-based,不带GC),并把四则运算表达式翻译为虚拟机指令。
     如果不学习编译原理,对于一个程序员而言,可能永远给各种写编译器的人当奴隶,以为写程序只能按照他们设计的语言哲学来做。而在工作中,譬如做SQL,做debugger,做网站,做data mining,做Office,虽然不会编译原理也能做,但是学会了编译原理让我可以做得比别人好,这样无论跳到哪个组迟早都可以成为go to person,前途一片光明。
    那么,我们该如何学习编译原理呢?1、做好思想准备,不要畏难,书一遍没看懂没关系,要多看几遍,甚至几十遍,不是有句话么:书读百遍,其义自见;还要结合课本后面的习题多做思考和类比,这些都是最基本的办法,在学习的过程中归纳出自己的难点和疑惑点,然后重点突破;2、自己动手做一个虚拟机,在虚拟机的基础上开发自己的语言和编译器,加强实践,当然并不需要你把这些做的多么复杂,主要目的还是为了结合理论的学习,是为了更加深刻的理解书本上那些抽象的东西;但是谁又敢说,你不能由此发明了将来流行世界的新的语言和新的编译器呢?3、在了解了本篇文章所说的东西后,可以直接专注于编码(Lex,Yacc等)的研究,然后去配合理论的学习,可以在第一次学习的过程中忽略一些内容,等以后用的时候再来学习。

以上是关于编译原理的主要内容,如果未能解决你的问题,请参考以下文章

有没有比龙书通俗易懂的编译原理书籍

编译原理学了有啥用?

浏览网上资源,了解编译原理就是什么?学习编译原理有什么好处?不学有什么损失?如何学习编译原理?

零基础初学者学习编译原理

编译原理 141

我对编译原理的理解