语义分析和代码生成

语义分析和代码生成

ID:46570350

大小:359.84 KB

页数:49页

时间:2019-11-25

语义分析和代码生成_第1页
语义分析和代码生成_第2页
语义分析和代码生成_第3页
语义分析和代码生成_第4页
语义分析和代码生成_第5页
资源描述:

《语义分析和代码生成》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第9章语义分析和代码生成9.1语义分析的概念程序语言是用上下文无关文法描述的。在语法分析中,我们严格按文法来检查语句的语法是否正确,但有些语句,单看语法结构并没有错误,但和该语句所处的上下文联系考虑就有错误,那么,我们把这种错误就称为语义错误。语义分析就是处理这种语义错误。考虑下段程序:{inta;intb;reala;d=a+b;}第3行语句reala,c;为声明语句,单看这一行没有语法错误,但和上一行语句比较,发现变量a属于重复定义。第4行语句为表达式语句,单看这一行也没有错误,但查询前面的声

2、明语句,发现变量d没有声明。因此,我们可看到语句的正确与否还与上下文密切相关。第9章语义分析和代码生成语义分析主要借助符号表记录的信息来实现语义分析动作。常见的语义分析动作有:1)对表达式中的操作数进行类型的一致性检查。对于强类型语言,要求表达式中的各个操作数、赋值语句左部的变量和右部的表达式的类型应该相同;若不相同则报告语义错误,并要求程序员作显式转换。对于无此项要求的语言,编译程序也要进行类型检查,当发现类型不一致时,则自动作相应的类型转换。2)语义分析的另一个重要功能是要分析由语法分析所识别

3、出来的语句的意义并作相应的语义处理。例如,对声明语句,用户通过这类语句声明程序中要使用的变量,并说明其种类和类型等特性。语义分析程序就要将变量名及其有关属性填入符号表,以备后面使用。对于程序中的可执行语句,则要根据该语句的语义生成相应的中间代码或目标代码。9.2中间代码源程序的中间形式(也称中间代码)是在编译程序将高级语言程序翻译为汇编语言或机器代码的过程中产生的,在编译过程中起着桥梁的作用。如果不使用中间代码,若有M种语言要在N种机器上运行,则需要编制M*N套编译程序;而如果采用中间代码,则只需

4、编制M+N套编译程序。使用中间代码有如下优点:在生成中间代码时,可以不考虑机器的特性,使得编制生成中间代码的编译程序变得较为简单。由于中间代码形式与具体机器无关,所以,生成中间代码的编译程序很方便地被移植到别的机器上,只需为该中间代码开发一个解释器或者将中间代码翻译为目标机指令就能在目标机上运行。在中间代码上更便于做优化处理。使用中间代码的主要缺点是编译的效率比直接产生机器码编译的效率要低一些。中间代码的选择也是一个重要的研究课题。人们期望能找到这样的一种中间语言,它即适合于将各种高级程序设计语言

5、翻译成这种中间语言,又能比较方便地将这种中间语言翻译成各种类型机器的目标语言。目前,中间代码有很多种,下面介绍几种常见的中间代码。9.2.1波兰后缀表示波兰后缀表示是使用较早并且流行至今的一种中间代码形式。对于波兰后缀表达式,处理起来比较容易。在将中缀表达式转换成波兰后缀表示的算法中,设置一个操作符栈,当扫描到操作数时,就立即输出该操作数。当遇到操作符时,则要与栈顶操作符比较其优先级,若栈顶操作符优先级高于栈外操作符,则输出该栈顶操作符;反之,则栈外操作符入栈。而对于赋值表达式,只需定义赋值操作符

6、“=”的优先级低于可在表达式中出现的其他操作符,那么可使用同一算法将其转换成波兰后缀表示。例如,对于算术表达式F*3.1416*R*(H+R)可转换成波兰后缀表示:F3.1416*R*HR+*对于赋值表达式:S=F*3.1416*R*(H+R)可转换为:SF3.1416*R*HR+*=9.2.1波兰后缀表示波兰后缀表示除可用来表示表达式类的语言结构以外,也能够通过操作符的扩充来表示其他的语言结构。增加相应的操作符就可以表示条件转移、下标变量语法单位的语言结构。例如,条件语句:ifthe

7、nelse可转换成波兰后缀表示:BZBR在该波兰表示中,引入了BZ和BR结构。BZ是二目操作符,如果的计算结果为0(false),则产生到的转移,而的入口地址。BR则是一个单目操作符,它产生到的转移,而是一个紧跟在后面的语句的入口地址。9.2.2N-元表示N-元表示是一种常见的中间代码形式。N-

8、元表示中,每一条指令由n个域所组成。第一个域说明操作符,剩下的n-1个域则用来表示操作数。可以将N-元表示的标准格式翻译为寄存器机器的代码,因为在该表示中,操作数常常是作为某些前步计算的结果列出的。N-元表示中最常见的有三元式和四元式。1、三元式三元式的每条指令只有3个域。如算术表达式X+Y,可用一个三元式(+,X,Y)来描述。三元式的第一个域是操作符(+),第二和第三个域分别是两个操作数(Y和Z)。三元式的缺点是优化较困难。三元式的一般表示如下:<操作符>,<操作数1>,<操作数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。