编译原理第一章
- 格式:ppt
- 大小:274.00 KB
- 文档页数:41
编译原理第一章编译程序概论使用过计算机的人都知道,多数用户是应用高级语言来实现他们所需要的计算的。
在计算机上执行高级语言程序一般分为两步:第一步,用一个编译程序把高级语言翻译成机器语言程序;第二步,运行所得的机器语言程序求得计算结果。
计算机语言由单一的机器语言发展到现今内容迥异的数千种高级语言,就是因为有了编译技术。
因此,对于计算机专业的学生来说,理解编译程序的工作原理显得尤其重要。
本章重点:编译程序概念、编译过程概述、编译程序的结构。
第一节什么是编译程序通常所说的翻译程序是指这样的一个程序,它能够把某一种语言(称为源语言)改造为另一种语言(称为目标语言),而后者与前者在逻辑上是等价的。
如果源语言是诸如FORTRAN、PASCAL、ALGOL或COBOL这样的“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序就称为编译程序。
第二节编译过程概述编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。
从概念上来说,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的,图1-2-1给出了一个编译过程的各个阶段,这是一种典型的划分方法。
事实上,某些阶段可能组合在一起,这些阶段间的源程序的中间表示形式就没必要构造出来了。
图1-2-1中将编译过程划分成了词法分析、语法分析、中间代码生成,代码优化和目标代码生成六个阶段,我们将分别介绍各阶段的任务。
另外两个重要的工作:表格管理和出错处理与上述六个阶段都有联系。
编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及到构造、查找或更新有关的表格,因此需要有表格管理的工作。
如果编译过程中发现源程序有错误,编译程Array序应报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可有小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动校正错误,这些工作称之为出错处理。
第一章编译程序概述目录1.1 什么是编译程序1.2 编译过程概述1.3 编译程序的结构1.4 编译阶段的组合1.5 编译技术和软件工具1.1 什么是编译程序编译程序:是一个语言翻译程序,是将用高级语言书写的源程序翻译成等价的低级语言的翻译程序。
(C ,Pascal,Foxbase 等) (机器语言,汇编语言) 翻译程序:是把一种语言书写的程序(源程序)翻译成另一种语言(目标语言)的等价的程序。
编译程序的重要性:使得计算机用户不必考虑与机器有关的繁琐细节,使程序员和程序设计专家独立于机器。
编译程序的发展■第一个编译程序的出现:20世纪50年代早期,主要将算术公式翻译成机器代码■20世纪50年代中期,一批编译系统程序开发成功■20世纪50年代末,开始研究编译程序的自动生成工具(LEX 、Y ACC )■20世纪60年代,研究使用自展技术,1971年PASCAL 自展技术成功后,影响越来越大。
1.2 编译过程概述一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序从一种表示形式转换成另一种表示形式。
典型的划分方法:(下图)词法分析阶段:编译过程的第一个阶段从而识别出一个个单词。
(逻辑上紧密相连的一组字符,这些字符具有集体含义。
)单词:标识符,保留字,常数、算符,界符等语法分析:编译过程的第二个阶段依据语言的语法规则从单词符号串中识别出各种语法单位(如“程”,“语句”,“表达式”等)。
目的:检查各种语法单位在语法结构上的正确性。
例子中:符合赋值语句的语法规则,即:<变量>=<表达式>例:s=2*3.1416*r*(h+r)规则<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=<表达式>“+”<表达式> <表达式>::=“(”<表达式>“)”<表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数> ■词法分析和语法分析本质上都是对源程序的结构进行分析。
第一章习题解答2.编译程序有哪些主要构成成分?各自的主要功能是什么?编译程序的主要构成成分有:词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、表格管理程序及出错处理程序。
(1)词法分析程序:从左到右扫描源程序,识别单词及其有关属性;(2)语法分析程序:分析源程序的结构, 判别它是否为相应程序设计语言中的一个合法程序;(3)语义分析程序:审查源程序有无语义错误,为代码生成阶段收集类型信息;(4)中间代码生成程序:将源程序变成一种内部表示形式;(5)代码优化程序:对前阶段产生的中间代码进行变换或进行改造,使生成的目标代码更为高效;(6)目标代码生成程序:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码;(7)表格管理程序:保存编译过程中的各种信息;(8)出错处理程序:若编译过程中发现源程序存在错误,则报告错误的性质和错误发生的地点,有些还可以自动校正错误。
3.什么是解释程序?它与编译程序的主要不同是什么?解释程序接受某个语言的程序并立即运行这个源程序。
它的工作模式是一个个的获取、分析并执行源程序语句,一旦第一个语句分析结束,源程序便开始运行并且生成结果,它特别适合程序员交互方式的工作情况。
而编译程序是一个语言处理程序,它把一个高级语言程序翻译成某个机器的汇编或二进制代码程序,这个二进制代码程序再机器上运行以生成结果。
它们的主要不同在于:解释程序是边解释边执行,解释程序运行结束即可得到该程序的运行结果,而编译程序只是把源程序翻译成汇编或者二进制程序,这个程序再执行才能得到程序的运行结果。
(当然还有其他不同,比如存储组织方式不同)THANKS !!!致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求欢迎您的下载,资料仅供参考。
编译原理第1章第一章编译概述2.典型的编译程序可划分为几部分?各部分的主要功能是什么?每部分都是必不可少的吗?答:编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。
各部分的主要功能如下:词法分析程序又称扫描器。
进行词法分析时,依次读入源程序中的每个字符,依据语言的构词规则,识别出一个个具有独立意义的最小语法单元,即“单词”,并用某个单词符号来表示每个单词的词性是标识符、分界符还是数;语法分析程序的功能是:对词法分析的结果,根据语言规则,将一个个单词符号组成语言的各种语法类;语义分析的功能是确定源程序的语义是否正确;中间代码生成程序的功能是将源程序生成一种更易于产生、易于翻译成目标程序的中间代码;代码优化程序的功能是将中间代码中重复和冗余部分进行优化,提高目标程序的执行效率;目标代码生成程序的功能是将中间代码生成特定机器上的机器语言代码;符号表管理程序的功能是记录源程序中出现的标识符,并收集每个标识符的各种属性信息;错误处理程序的功能是应对在编译各个阶段中出现的错误做适当的处理,从而使编译能够继续进行。
编译程序的每部分都是必不可少的。
3.解释方式和编译方式的区别是什么?答:解释方式最终并不生成目标程序,这是编译方式与解释方式的根本区别。
解释方式很适合于程序调试,易于查错,在程序执行中可以修改程序,但与编译方式相比,执行效率太低。
4.论述多遍扫描编译程序的优缺点?答:优点:(1)可以减少内存容量的需求,分遍后,以遍为单位分别调用编译的各个子程序,各遍程序可以相互覆盖;(2)可使各遍的编译程序相互独立,结构清晰;(3)能够进行充分的优化,产生高质量的目标程序;(4)可将编译程序分为“前端”和“后端”,有利于编译程序的移植。
缺点是每遍都要读符号、送符号,增加了许多重复性工作,降低了编译效率。