当前位置:文档之家› 第二章 高级程序设计语言

第二章 高级程序设计语言


第一章
引 论
编译程序的分类

根据不同的用途和侧重点:

诊断编译器:用于程序的开发和调试
优化编译器:具有优化能力,提高目标代码的效率 交叉编译器:该编译器产生不同于其宿主机的机器代码

宿主机:运行编译程序的计算机 目标机:运行目标代码的计算机
编译与解释 解释程序:它以该语言写的源程序作为输入,但不产生目标程序,而是边解释边执行 源程序本身。 编译与解释的区别:是否产生目标程序 解释程序的特点:结构简单,占用内存少,规模较小的语言采用,如BASIC;但效 率低
第一章 引 论
1.2.3 语义分析与中间代码的产生
语义:定义了各语法成分的功能和含义,即规定了他们的属性或在执行时应进行的运 算。
这一阶段通常包括两方面的工作:首先对各种语法范畴进行静态语义检查,如果正确则 进行另一方面的工作,即进行中间代码的翻译。
通常使用属性文法描述语义规则
所谓“中间代码”是一种含义明确,便于处理的记号系统。 中间代码除四元式外,还有三元式、间接三元式、逆波兰记号、树形表示等。 1.2.4 优化 优化的目的:生成高质量的代码 优化的任务:在于对前段产生的中间代码进行加工,以期在最后阶段产生更为高效 (省时间和空间)的目标代码 优化所依循的原则:是程序的等价变换规则 其方法有:公共子表达式的提取、循环优化、删除无用代码等。
end For k:=1 to 100 do
begin t=10*k; m:=m+t; n:=n+t; end
第一章 引 论
1.2.5 目标代码生成
这一阶段的任务:把中间代码(或经优化处理后)变换成特定机器上的低级语 言代码。生成的目标代码的形式依赖于硬件系统结构和机器指令含义。 主要工作:存储空间的分配,寄存器的调度,机器指令的选择等等 目标代码的形式:绝对指令代码;可重定位的指令代码;汇编指令代码
编译过程总结
词法分析 语法分析 语义分析与中间代码产生 优化 目标代码生成
第一章 引 论
1.3 编译程序的结构
源程序 词法分析器 表 格 管 理 优化器 中间代码 目标代码生成器
第一章 引 论 目标代码
单词符号
语法分析器
语法单位 语义分析与中间代码产生 中间代码




1.3.2 表格与表格管理 在编译程序使用的表格中最重要的是符号表它用来登记源程序中出现 的每一个名字以及名字的各种属性。如一个名字是常量名、变量名,还 是过程名等;如果是变量名它的类型又是什么、所占内存是多大、地址 是什么等。 1.3.3 出错处理 一个编译程序不仅能对书写正确的程序进行编译,而且应能对处现在 源程序中的错误进行处理。如果源程序有错,编译程序应设法发现错误 ,把有关错误报告给用户。这部分的工作是由专门的一组程序(叫做出 错处理程序)完程的。 1.3.4 遍 遍 :对源程序或源程序的中间结果从头到尾的一次扫描,并作有关的加工 和处理,生成新的中间结果或目标程序。 遍与各编译过程之间的关系:一遍可以包含几个阶段;一个阶段的工作 也可以分为若干遍,比如优化可以在多遍扫描中完成。 编译程序的组织:依赖于源程序,计算机的硬件,以及设计要求等
第一章
引 论
1.3.5 编译前端与后端 前端主要由与源语言有关但与目标机 无关的那些部分组成。 后端包括编译程序中与目标代码有关 的部分。 1.4 编译程序与程序设计环境 编译程序无疑是实现高级语言的一个最 重要的工具。但支持程序设计人员进行 程序设计开发通常还需要其它一些工具: 如编辑程序、连接程序、调试程序等。 编译程序与这些程序设计工具一起构成 所谓的程序设计环境。 编 在一个程序设计环境中,编译程序 译 起着中心的作用。连接程序、调试程序、 程序分析等工具直接依赖于编译程序所 后 产生的结果,而其它工具的构造也常常 端 要用到编译的原理、方法和技术。
第一章 引论
主要内容:介绍编译程序的概念,编译过程概述,编译程序的结构, 编译程序与程序设计环境,编译程序的生成等内容 基本要求:理解编译程序的作用,从宏观上理解组成、功能划分及开 发步骤。 重点与难点:编译程序的组成、功能划分。 1.1 什么叫编译程序

回:程序设计语言及程序设计语言的处理方式(编译和解释)
第一章
引 论
代码优化示例
For k:=1 to 100 do begin m:=i+10*k; n:=j+10*k; end For k:=1 to 100 do begin m:=i+10*k; n:=j+10*k; end
M=i;n=j;k=1 For k:=1 to 100 do begin m:=m+10; n:=n+10;
第一章
引 论
汇编程序 汇编程序:是指这样的程序,它能够把汇编语言的源程序转换成机器语言 的目标程序。 源程序:用汇编语言编写的程序 目标程序:用机器语言编写的程序 1.2 编译过程概述 主要工作:把高级语言写的程序翻译成等价的目标程序。 英译与编译的比较 编译 分 英译 1.词法分析 析 1.识别出句子中的一个个单词 过 2.语法分析 2.分析句子的语法结构 程 3.语义分析中间代码生成 3.初步翻译句子的含意 综 4.优化 合 5.目标代码生成 4.译文修饰 过 程 5.写出最后译文
第一章
引 论
1.2.1 词法分析 主要工作: 读入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词 (也称单词符号,或简称符号) 源程序的格式化处理:删除无用的符号(空格、回车符等),删除注释语 句 进行词法检查,报告发现的词法错误(拼写错误) 在词法分析阶段工作所依循的是语言的词法规则。描述词法规则的有效工具是正 规式和有限自动机。 例:for i:=1 to 30 do /* 循环语句*/ 1.2.2 语法分析 语法:定义了语言各语法成分的形式或结构 语法分析的任务:在词法分析的基础上,根据语言的语法规则,把单词符号划 分成各类语法单位(语法范畴),如“短语”、“句子”、 “子句”、“程序 段”等,确定整个输入串是否构成语法上正确的程序。 语法规则通常用上下文无关文法描述。
翻译程序:
编译程序:是指这样的程序,它能够把某种“高级语言”的程序转换成另 一种“低级语言”的程序,而后者与前者在逻辑上是等价的。 如果源语言是诸如FORTRAN、Pascal、C、Smalltalk或Java这样的“高级 语言”,而目标语言如汇编语言之类的“低级语言”这样的翻译程序则 称之为编译程序。
相关主题