编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的通常原理和基本方法。学好编译原理对于咱们之后在写程序的道路上会有很大的帮助,这门课程关注的是编译器方面的产生原理和技术问题,彷佛和计算机的基础领域不沾边,但是编译原理却一直做为大学本科的必修课程,同时也成为了研究生入学考试的必考内容。编译原理及技术从本质上来说就是一个算法问题而已,固然因为这个问题十分复杂,其解决算法也相对复杂。 咱们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比较专一解决一种的算法了。在20世纪 50年代,编译器的编写一直被认为是十分困难的事情,第一Fortran的编译器听说花了18年的时间才完成。在人们尝试编写编译器的同时,诞生了许多跟编译相关的理论和技术,而这些理论和技术比一个实际的编译器自己价值更大。就犹如数学家们在解决著名的哥德巴赫猜测同样,虽然没有最终解决问题,可是其间 诞生很多名著的相关数论 前端
翻译程序java
编译程序:较为复杂的翻译程序,源程序经过翻译程序变成目标程序,其中源程序就是常见的高级语言程序,例如C++、Java、Python;目标语言一般为机器级语言或者较低级的虚拟机语言,例如汇编语言、机器语言、Bytecode(Java字节码)算法
解释程序:以源程序做为输入,但不产生目标代码,边解释边执行源程序自己,实际上,许多编译程序的构造与实现技术一样适用于解释程序。咱们主要学习编译程序。后端
编译程序在逻辑结构上至少分为俩个阶段数据结构
分析阶段:理解源程序,挖掘源程序的语意工具
综合阶段:生成与源程序语义上等价的目标程序学习
也能够分为三个阶段优化
前端:实现主要的分析任务,一般以第一次生成中间代码为结束标志翻译
中端:实现各级中间代码上的操做设计
后端:实现主要的综合操做,一般以最后一级中间代码生成目标代码为结束标志
详细逻辑过程:
词法分析
语法分析
语义分析
中间代码生成
中间代码优化
目标代码生成
目标代码优化
扫描源程序字符流,识别出有词法意义的单词,返回单词的类别和单词的值,或词法错误的信息,
在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各种语法单位
对语法分析后的程序进行语义分析,不符合语义规则时给出错误信息
中间代码的翻译生成,中间代码是一种独立于具体硬件的记号系统,经常使用的中间代码:四元式、三元式、间接三元式、逆波兰记号、树形表示
对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生出更为高效的目标代码
将中间代码变换成特定机器上的低级语言代码
以基本块内的简单优化方法、控制流数据流分析基础等代码生成和优化相关的基本知识为主线,辅以优化技术的综述。
编译程序在工做过程当中须要保持一系列的表格,以登记源程序的各种信息和编译个阶段的进展情况,其中最重要的就是符号表,它用来登记源程序中出现的每一个名字以及名字的各个属性。当扫描器识别出一个名字后,它把该名字填入到符号表中,但这时不能彻底肯定名字的属性,它的各类属性要在后续的各阶段才能填入。例如,名字的类型等要在语义分析时才能肯定,而名字的地址可能要到目标代码生成才能肯定。
编译过程的每一阶段均可能检测出错误,其中,绝大多数错误能够在编译的前三阶段检测出来。错误一般分为语法错误和语义错误,语法错误是源程序中不符合语法或词法的规则的错误,能够在语法分析和语法分析阶段检测出来,语义错误是指源程序中不符合语义规则的错误,在语义分析阶段能检测出来,而又得语义错误要在运行时才能检测出来。
龙书:
英文名:Compilers: Principles,Techniques,and Tools
做者:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman
中文名:编译原理技术和工具
龙书是Alfred V. Aho等人于1986年出版的,因为出版年代较早,其中包含部分过期的技术而且没有反映一些新的编译技术。新编的《编译原理》抛弃诸如算符优先分析等过期技术,增长面向对象编译、类型检查等新技术
虎书:
英文名:Modern Compiler Implementation in C
做者:Andrew W.Appel,with Jens Palsberg
中文名:现代编译原理-C语言描述
虎书出版比较晚,与《编译原理》的知识点差很少,但增长了数据流分析、循环优化、内存管理等内容。与虎书比,《编译原理》更适合国内的编译原理课程教学。这本是C版,还有java版和ML版。
鲸书:
英文名:Advanced Compiler Design and Implementation
做者:Steven S.Muchnick
中文名:高级编译器设计与实现
鲸书侧重在对编译器后端优化的处理。在本科阶段的编译教学中旨在让学生对程序设计语言的编译全过程有系统的理解,所以会介绍编译器后端的处理技术,但不注重优化技术。鲸书更适合做为研究生的教材或参考书