第一章 编译原理绪论(3)——编译程序的逻辑结构

                                                                   图1编译程序的逻辑结构

其中,虚线表示信息流程,实线表示控制流程。

1)、词法分析程序

       作为编译程序的输入,源程序仅仅是一个长长的字符串,扫描器将把这种形式的源程序转换为便于编译程序其余部分进行处理的内部格式。扫描器的工作任务如下:

①、识别出源程序中的各个基本语法单位(也称为单词或语法符号);

②、删除无用的空白字符、回车字符以及其它与输入介质相关的非实质性字符;

③、删除注释;

④、进行词法检查,报告所发现的错误。

2)、语法分析程序

       语法分析程序以词法分析程序所输出的用内部编码格式表示的单词序列作为输入,其任务是分析源程序的结构,判别它是否为相应程序设计语言中的一个合法程序。为了完成这种分析,一般的途径是由语法分析程序试着为其构造一棵完整的语法树。如果这种尝试成功,就表明该输入串在结构上的确是一个合乎语法的程序,否则,源程序中就必然存在语法错误。通常,这种语法树实质上是一个有标记的有序树形结构。它的叶子上的标记是程序中的各个单词,而其内部结点(包括根结点)上的标记,则是程序设计语言的有关语法构造名,即语法范畴。

       应当指出,上面所谓为源程序建立一棵语法树,仅仅是就概念上而不是就逻辑上而言的。在实际进行语法分析的过程中,并不一定真正为源程序建立一个树形的数据结构,也不一定需要对整个源程序产生一棵语法树,而是参照建立语法树的思路一步一步地进行语法分析。总之,语法分析是一个相当复杂的过程。

3)、语义分析程序

       对任何一种程序设计语言来说,它都具有两方面的特征,即语法特征和语义特征前者用来定义语言各语法成分的形式或结构后者则用来规定各语法成分的含义和功能即规定它们的属性或在执行时应进行的运算或操作。因此,在编译过程中也需要对源程序进行语义分析。

      经语法分析后,虽然明确了它的组成结构,但并不知道其中所出现的一些量的属性和意义,更不知道各语法结构具有何种功能。但经过语义分析之后,就会得知各语法成分的含义和用途以及应进行的运算和操作

      在进行语义分析的过程中,还应进行相应的语义检査,以保证源程序在语义上的正确性。

4)、中间代码生成

      为了处理上的方便,特别是为了便于代码的优化处理,通常在语义分析后不直接产生机器语言或汇编语言形式的目标代码,而是生成一种介于源语言和目标语言之间的中间语言代码。目前常见的中间代码形式有逆波兰表示、三元式、四元式及树形结构等等。

5)、代码优化程序

      为了得到质量较高的目标代码,常常在中间代码生成和目标代码生成两个阶段之间,插入一个代码优化的处理阶段。这里所说的目标程序的质量,通常有两个衡量的标准:一个是目标程序所占用存储空间的大小,即所谓空间指标;另一个是目标程序运行时所需的时间,即所谓时间指标。

6)、目标代码生成程序

       目标代码生成程序以语义分析(或优化处理)所产生的中间代码作为输入,其功能是根据前面各阶段对源程序进行分析和加工所得到的有关信息,将中间代码翻译为机器语言或汇编语言形式的目标程序。如果对源程序的编译不设置中间代码生成阶段,则在语法和语义分析之后将直接产生目标程序。

通常,目标代码可采用如下三种形式之一:

①、具有绝对地址的机器指令代码。它们在内存中有固定的存放位置,编译程序在生成这种形式的目标代码之后,可立即投入运行。

②、汇编语言形式的目标程序。此种形式的目标程序须经汇编程序进行汇编,以产生相应的机器代码。

③、模块结构的机器指令。此种形式的目标程序一般具有浮动地址,须经连接程序将它们和另外一些运行子程序连接装配之后才能投入运行。

7)、错误检查和处理程序

       程序人员在编写程序时,错误是难免的。一个仅能处理绝对正确源程序的编译程序并无实用价值。一个较完善的编译程序应具有广泛的程序查错能力,并能准确地报告源程序中错误的种类及错误出现的位置。同时,编译程序还应具有一定的“校错”能力。

8)、信息表管理程序

       在编译过程中,需要经常收集、记录或查询源程序中所出现的各种量的有关属性(信息)。为此,编译程序需要建立或持有一批不同用途的表格(如常数表、各种名字表、循环层次表等等),通常将它们统称为符号表

       在编译程序中,造表和查表的工作系由一组专用的程序来完成,它们被分别安插在编译程序的有关部分,这一组程序就组成了相应编译程序的表格管理程序。

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值