编译原理 复习资料

发布时间 : 星期四 文章编译原理 复习资料更新完毕开始阅读

教材资料

授课顺序:1

教学目的:正确理解什么是编译程序;了解编译程序工作的基本过程及其各阶段的基本任

务;熟悉编译程序总框;了解编译程序的生成过程和构造工具。 教学重点与难点:

编译程序工作的基本过程及其各阶段的基本任务,编译程序总框。

授课学时:2学时 教学方式:多媒体讲授 教学内容:

第一章 引论 1.1 什么是编译程序

一、基本概念

1、翻译程序:是指这样的一种程序,它能够把一种语言程序(源语言程序)转换成另一种功能等价的语言程序(目标语言程序)。

2、编译程序是一种翻译程序,其源程序是高级语言,目标语言程序是低级语言。通常是一次性翻译方式。如TC等高级语言编译程序。

3、解释程序也是一种翻译程序,它与编译程序的区别:立即执行源程序,通常是逐句翻译执行。如BASIC、SQL、JAVA的BYTECODE解释程序等。

二、高级语言程序的处理过程

高级程序设计语言程序的典型处理过程如下图所示:

1.2编译过程和编译程序结构

一、编译过程的阶段划分

一般编译程序的工作过程按阶段进行,每个阶段将源程序从一种表示形式转换成另一种表示形式。典型的阶段划分方法是将整个编译过程分为如下六个阶段:

1、词法分析:

任务:对构成源程序的字符串进行扫描和分解,识别出单词(如标识符等)符号。

输入:源程序

输出:单词符号序列

例子:有待分析源程序: main() {

int x=10,y; }

词法分析后的输出:

1)保留字: main 2)界符:左圆括号 ( 3)界符:右圆括号) 4)界符:左大括号{ 5)保留字:int 6)标识符:x 7)运算符:=

8)常数:10 ,界符:, 9)标识符:y 10)界符:;

11)界符:右大括号 }

2、语法分析

任务:根据语言的语法规则对单词符号串(符号序列)进行语法分析,识别出各类语法短语(可表示成语法树的语法单位),判断输入串在语法上是否正确。

输入:单词序列

输出:语法分析后的单词序列 3、语义分析

任务:按语义规则对语法分析器归约出的语法单位进行语义分析,审查有无语义错误,为代码生成阶段收集类型信息,并进行类型审查和违背语言规范的报错处理。 输入:语法分析后的单词序列

输出:语义分析后带语义信息的单词序列

4、中间代码生成(并非所有的编译程序都包含此阶段)

任务:将语义分析得到的源程序变成一种结构简单、含义明确、易生成、易翻译成目标代码的内在代码形式。常用的中间代码形式是四元式(算符,运算对象1,运算对象2,结果)。 输入:语义分析后的单词序列 输出:中间代码

5、代码优化(可放到目标代码生成阶段后)

任务:对中间代码或目标代码进行变换改造等优化处理,使生成的代码更高效。 输入:中间代码或目标代码

输出:优化后的中间代码或目标代码 6、目标代码生成

任务:将中间代码生成特定机器上的绝对或可重定位的指令代码或汇编指令代码。 输入:语义分析后的单词序列或优化后的中间代码 输出:目标代码

二、编译程序结构

上述六个阶段的任务分别由六个模块来完成。一个完整的编译程序还应包括表格管理和出错处理程序。典型编译程序结构框图如下:

三、编译阶段的组合 1、前后端组合法

编译前端:与源语言有关与目标机无关的部分(第1-4阶段)。 编译后端:与目标机有关的部分(第6阶段) 注:第5阶段置前或后端都可以。组合方式:

1)同一源语言的编译前端+不同后端=不同机器上同一源语言的编译程序;

2)不同源语言的编译前端生成同一种中间语言+使用共同后端=同一机器上不同语言的编译程序。

2、遍组合法

遍/趟:对源程序或源程序的中间结果从头到尾扫描一次称为一遍。每一遍扫视完成一个或几个阶段的工作。一个编译程序可由一遍或多遍完成.实际编译程序分遍的主要参考因素是源语言与目标机器的特征。

1.3编译技术和软件工具

一、编译技术的发展

1950S早期:算术工式译成机器代码。 1950S中期:FORTRAN编译系统。

1950S末期:自动生成工具出现,如:LEX、YACC。 1960S:自展技术。

1971年:用自展技术生成PASCAL编译程序。 现代:并行编译技术。

二、编译技术与软件工具

1、先进的软件开发技术和软件工具能提高编程效率、缩短调试时间。 2、编译程序本身是一种软件工具。

3、大部分软件工具的开发常用到编译技术和方法。

4、进行源程序处理的软件工具实质上都在不同程度上用到了编译程序各个部分的技术和方法。如:

(1)语言结构化编辑器(语法);

(2)语言程序调试工具(语法、语义);

(3)语言程序测试工具(静、动态测试,发现错误);

(4)高级语言之间的转换工具;

(5)程序格式化工具、程序理解工具等。

1.4程序设计语言规范

从支持的计算模式来看,程序设计语言(是指书写计算机程序的高级语言)规范有如下几种:

1、强制命令式语言,即过程式语言

该型 语言中,一个过程可看作是一系列动作,其动作由命令驱动,以语句形式表示,一个语句接一个语句的执行。属于这种规范的语言如PASCAL、C、FORTRAN等,C++、Ada、COBOL等也支持这种模式。本课程介绍的编译技术针对这型语句。 2、函数式语言,即应用式语言

该型语言注重程序所表示的功能,程序的开发过程是从前面已有函数出发构造出更加复杂的函数,对初始数据集进行操作,直到最后形成的函数可以得到最终结果。属于这种规范的语言如ML、LISP等。

3、基于规则(逻辑)的语言

该型语言程序的执行过程是检查一定的使能条件,满足时,则执行适当的动作。如逻辑程序设计语言PROLOG,其基本的使能条件是某种谓词逻辑表达式;再如YACC,其使能条件是程序的形式语法(BNF)。 4、面向对象语言

该型语言的主要特点是提供抽象数据类型,支持封装性、继承性和多态性。C++、Ada、Java等也支持这种模式。

1.5编译程序的构造

一、编译程序的构造途径 1、用某种程序语言编写;

2、用编译程序自动构造工具构造。

3、通过现有的编译基础设施进行改造和组装。

二、T型图

T型图是用来表示一个编译程序所涉及到的三个方面的语言的一种工具,将源语言S通过用语言H书写的编译器翻译成目标语言T的编译程序可用如下T型图THST表示。

T型图的两种组合方式:

三、编译程序的自展

联系合同范文客服:xxxxx#qq.com(#替换为@)