文档介绍:第二章文法和语言
编译原理
第一章编译程序引论
第二章文法和语言
第三章词法分析
第四章自顶向下语法分析方法
第五章自底向上优先分析方法
第六章 LR分析方法
第七章语法制导翻译和中间代码生成
第八章运行时存储空间分配
第九章代码生成
第一章引论
第一章引论
什么叫编译程序
编译程序:是指这样的程序,它能够把某种语言的程序转换成另一种语言的程序,而后者与前者在逻辑上是等价的。如果源语言是诸如FORTRAN、Pascal、C、Ada、Smalltalk或Java这样的“高级语言”,而目标语言如汇编语言之类的“低级语言”这样的翻译程序则称之为编译程序。
本课程主要介绍设计和构造编译程序的基本原理和方法。
第一章引论
编译程序又简称为“编译器”
第一个编译器是20世纪50年代的后期出现的FORTRAN语言编译器。
同样,解释程序又简称为“解释器”,但是在概念上与编译器有明显区别:
编译程序是源转换系统,而解释程序是源程序的一个执行系统。
编译程序的结果是得到等价源程序的某种目标机程序,而解释程序的结果是得到源程序的执行结果,即它相当于执行源程序的抽象机。
第一章引论
注意编译程序与解释程序的区别,一个语言的解释程序是这样的程序:它以该语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。
术语“编译”的内涵是实现从源语言表示的算法向目标语言表示的算法的等价变换。
第一章引论
高级语言分类及其编译:
过程式语言:FORTRAN Pascal Ada C
(特点:面向驱动,面向语句,由系列的语句组成)
函数式语言:LISP ML ASL
(注重程序表示的功能,而不是一个语句接一个语句的执行)
从已有的函数出发构造更复杂的函数。
逻辑式语言:PROLOG
(检查一定的条件,当满足时,则执行适当的动作。)
对象式语言:SMALLTALK C++
(封装性、继承性、多态性)
第一章引论
这里主要研究过程式语言的编译
高级语言分类及其编译:
过程式语言:FORTRAN Pascal ADA C
函数式语言:LISP ML ASL
逻辑式语言:PROLOG
对象式语言:SMALLTALK C++
函数式语言与逻辑式语言,特别是逻辑式语言,其编译技术与过程式语言的差别比较大;因对象式语言的载体基本上是过程式的,所以其编译程序也不难理解。
第一章引论
编译过程概述
编译程序的工作,从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的。
掌握编译过程的五个基本阶段,是我们学习编译原理课程的基本内容,把编译的五个基本阶段与英译中的五个步骤相比较,有利于对编译过程的理解:
第一章引论
英译与编译的比较
1。识别出句子中的一个个单字
2。分析句子的语法结构
3。初步翻译句子的含意
4。译文修饰
5。写出最后译文
1。词法分析
2。语法分析
3。语义分析中间代码生成
4。优化
5。目标代码生成
第一章引论
源程序是以文本文件方式存在
注意:程序总是以字符串的方式存在。
第一章引论
词法分析
输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词(也称单词符号,或简称符号)
在词法分析阶段工作所依循的是语言的词法规则。描述词法规则的有效工具是正规式和有限自动机。
1。识别出句子中的一个个单字