第一章 引论
- 格式:doc
- 大小:593.00 KB
- 文档页数:11
第一章引论1、教学目的及要求:本章主要介绍为什么需要编译程序以及编译程序的功能、体系结构、工作过程、组织方式,编译程序与高级程序设计语言的关系,以及编译自动化和并行编译程序等方面的基本知识。
◇ 明确编译程序的功能及其在计算机系统中的作用。
◇ 了解源语言程序被编译为目标程序的整个过程,这个过程一般划分为哪些阶段。
◇ 知道编译技术可用于哪类软件的设计和开发。
2、教学内容:编译程序,编译过程概述,编译程序的结构,编译程序与程序设计环境,编译程序生成,学习构造编译程序。
3、教学重点:重点:编译程序工作的基本过程及其各阶段的基本任务,编译程序总框。
4、教学难点:应该说,本章没有难以理解的内容,主要对编译程序的功能和结构做一综述。
5、课前思考◇ 什么是编译程序◇ 编译过程和编译程序的结构◇ 为什么要学习编译程序6、章节内容第一节翻译程序第二节编译程序的工作过程第三节编译程序的结构第四节编译程序的组织方式第五节编译程序的自展、移植与自动化第六节翻译程序编写系统第七节并行编译程序1.1 翻译程序一、程序设计语言的基础知识1、程序:一系列指令或语句,用来描述计算机依次要执行的一系列工作。
2、高级语言的特点:1)独立于计算机,具有良好的可移植性。
2)自动分配存储空间。
3)丰富的数据结构和控制结构。
4)接近自然语言,效率高,可读性好。
二、 翻译程序翻译程序将高级语言编写的程序翻译成一种能够被计算机执行的形式。
翻译有两种方式:一种是编译方式,另一种是解释方式。
(编译方式)优点:把用户输入映射成输出的过程迅速。
缺点:错误诊断效果不完美。
(编译器的重要任务之一就是报告它在翻译过程中发现的源程序中的错误)(解释方式)优点:便于对源程序进行调试和修改,错误诊断效果好。
缺点:加工处理过程的速度慢,效率低。
解释方式与编译方式的根本区别:在解释方式下,最终并不生成目标代码。
三、程序设计语言的转换 • 编译程序源语言是高级语言,目标语言是机器语言/汇编语言,则翻译程序称为编译程序。
•汇编程序源语言是汇编语言,目标语言是机器语言,则翻译程序称为汇编程序(assembler)。
•解释程序解释程序是另一类翻译程序,它同时处理源程序和数据,对源程序解释执行而不生成目标程序。
1.2 编译程序的工作过程与外文翻译类似,编译程序将首先根据源语言的定义来对源程序进行分析,之后进行综合从而得到与源程序等价的目标程序。
(编译过程与外文翻译过程对照)一、词法分析(lexical analysis)词法分析是编译过程的基础。
词法分析的任务是输入源程序,对构成源程序的字符串从左到右一个字符一个字符地进行扫描和分解,依据词法规则(或构词规则)识别出一个个的单词(单词符号或符号),转换成机器容易识别的内码形式。
内码用二元式(种别码,属性值)表示。
属性值(attribute-value):单词的机内表示。
单词种类(token-name):一类是特殊的单词,如保留字、运算符、分界符等等,这些都是源语言所提供的;另一类是普通单词,如用户在源程序中定义的标识符、常数等。
例如:程序段int x,a,b;x=a+b*50;词法分析后的结果为:(1)(保留字,int) (2)(标识符,x) (3)(界限符,,) (4)(标识符,a) (5)(界限符,,) (6)(标识符,b) (7)(界限符,;) (8)(标识符,x) (9)(运算符,=) (10)(标识符,a) (11)(运算符,+) (12)(标识符,b) (13)(运算符,*) (14)(整常数,50) (15)(界限符,;)二、语法分析(syntax analysis)语法分析的任务是根据语言的语法规则检查源程序是否合乎语法。
根据语言的语法规则(文法规则),把单词符号串组成各类语法单位(语法范畴),如:表达式、语句、分程序、程序。
语法分析有两种方法:推导(Derive)和归约(Reduce)语法分析对说明语句填写符号表,对一般语句则构造语法树(syntax tree)。
例如:赋值语句a=b+c*10经语法分析生成语法树赋值语句a=b+c*10语法树的另一种形式:三、语义分析(semantic analysis)语义分析的任务:1.分析语法成分的含义和用途,2.应进行的运算和操作,3.同时进行相应的语义检查。
如:在说明语句中是否有矛盾的类型说明;表达式中,类型是否匹配;过程调用中,实参和形参的配合。
依据:语义规则。
赋值语句a=b+c*10经语义分析生成语法树(考虑类型问题:a,b,c为实型):四、中间代码生成根据语义规则产生一种介于源语言与目标代码之间的一种中间代码。
中间代码是不依赖于机器但是又便于生成依赖于机器的目标代码的一种结构简单、含义明确的记号系统。
中间代码常用三地址码(three-address code)来表示:例: a=b+c*10中间代码的特点:简单规范、机器无关、易于优化与转换。
五、中间代码优化对前阶段产生的中间代码进行加工变换,以期在最后阶段能产生更为高效(省时间和空间)的目标代码。
变换的主要依据是等价变换规则优化主要包括:删除公共子表达式、合并已知量、删除无用赋值、循环优化、算符归约等等。
例:赋值语句a:=b+c*10的优化六、目标代码生成把中间代码变换成指定机器上的绝对指令代码或可重新定位的指令代码或汇编指令代码。
目标代码依赖于具体计算机的硬件系统结构和指令系统。
1.3 编译程序的结构有上节可知,一个典型的编译程序分为六个阶段,相应的编译程序也包括六个模块。
此外,编译程序还包括表格处理程序和出错处理程序。
1.4 编译程序的组织方式一、编译过程的前端和后端前端包括编译逻辑结构中的分析部分,即词法分析、语法分析、语义分析和中间代码生成,除此还包括符号表建造及相应分析中的错误处理以及与机器无关的优化部分。
后端包括与目标机有关的部分,即综合部分,它包括目标代码生成及生成期间对符号表的相应检索操作和错误处理操作,以及与机器相关的代码优化部分。
将编译系统划分为前后端,有利于移植编译系统和利用后端为同一目标机配置不同语言的编译系统。
二、编译过程的分遍对源程序(或其中间形式)从头至尾扫描一次并进行有关加工处理,生成新的中间形式或最终目标程序,称为一遍(pass)。
分遍原则∶①目标质量高低(高则多遍)。
②机器内存大小(小则多遍)。
③源语言简繁(繁则多遍)。
④设计人员多少(多则多遍)。
把前端组织成一遍扫描:把前端组织成多遍扫描:( 多遍:上一遍的输出是下一遍的输入。
)1.5 编译程序的自展、移植与自动化一、高级语言的自编译性具有自编译性的高级语言可以采用该语言来编写自己的编译程序。
如:C、PASCAL、ADA等。
一个具有自编译性的高级语言也可用于编写其它高级语言的编译程序。
二、编译程序的自展技术按照自展技术,需要把源语言L分解成一个核心部分L0与扩充部分L1,L2,…,Ln。
先用汇编语言或机器语言编写L0的编译程序,然后再用L编写L1的编译程序,用L i 编写Li+1的编译程序(i=1,2,…,n–1),最后得到源语言L的编译程序。
三、编译程序的移植编译程序可以通过移植得到,即可以将一个机器(宿主机)上的一个具有自编译性的高级语言编译程序搬迁到另一个机器(目标机)上。
可移植性是对这种搬迁过程中难易过程的一种度量。
如果工作量不大,则可称该程序是可移植的;若移植一个程序的开销远远低于最初研制该程序的开销,那么这种程序就是高度可移植的。
四、编译程序的自动化在编译程序自动化进程中,开发早且应用广泛的是词法分析程序生成器和语法分析程序生成器。
词法分析程序生成器LEX :它输入的是正规表达式,输出的是词法分析程序。
LEX 的基本思想是由正规表达式构造有穷自动机。
语法分析程序生成器YACC :基于LALR(1)文法的YACC(Yet Another Compiler Compiler)。
它接受LALR(1)文法,生成一个相应的LALR(1)分析表以及一个LALR (1)分析器,而且,YACC生成的语法分析器可以和扫描器连接。
LEX和YACC均为关于编译程序前端的生成器。
1.6 翻译程序编写系统将有助于减轻编写翻译程序(包括编译程序、汇编程序、解释程序)工作的任何软件系统或工具包,统称为翻译程序编写系统(Translator Writing System,简称TWS)。
产生式语言的编译程序和自动分析算法的构造程序都是TWS。
TWS可分为三类:1、自动产生编译程序的“编译程序的编译程序”。
只要给出某一高级程序语言的语法规则和语义描述,这类程序就能自动地生成相应语言的编译程序。
2、面向语法的符号加工程序。
这类程序比较通用。
3、由可扩充语言组成的集合。
这类TWS允许程序员利用已有的数据类型和语句去定义新的数据类型和语句。
第一章引论1.7 并行编译程序适合于SIMD和MIMD结构计算机,具有并行处理功能的编译程序称为并行编译程序(或并行编译器)。
并行编译程序的功能是,把串行的源程序或尚未充分并行化的并行源程序,自动转换成并行计算机系统上运行的并行目标程序或它所能接收的并行源程序。
本章小结1、翻译有编译和解释两种方式。
编译方式是先将源程序翻译成目标程序,然后再执行目标程序,相应的翻译程序称为编译程序。
解释方式是边翻译边执行,相应的翻译程序称为解释程序。
2、编译理论和技术主要研究和讨论编译程序的构造和设计原理。
3、编译程序一般包括词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、表格处理程序和出错处理程序等。
4、编译过程可采用“分遍”形式,即编译过程可由一遍或多遍完成。
5、对于具有自编译性的高级语言,可运行自展技术构造其编译程序,即将源程序分解成核心部分和扩充部分,对核心部分进行多次扩充之后可得到源语言。
6、一个具有自编译性的高级语言在宿主机上的编译程序可以移植到目标机上。
7、LEX是一个有代表性的词法分析程序生成器。
YACC是一种基于 LALR(1)分析法的语法分析程序生成器。
凡是有助于减少编写翻译程序工作的软件或工具包,统称为翻译程序的编写系统。
8、传统的串行编译程序只适于SISD结构计算机,具有并行处理功能的并行编译程序则适于SIMD和MIMD结构计算机。
作业:P10 1.1,1.4,1.5,1.611。