语义分析与代码生成

语义分析与代码生成

ID:46223215

大小:112.02 KB

页数:52页

时间:2019-11-21

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

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

1、第七章语义分析与代码生成7.1语法制导翻译编译程序的实质性工作是翻译,即为源程序生成冃标代码。为此,我们必须知道程序的含义是什么(语义分析)?应该翻译成什么(代码生成)?在三、四章,我们主要讨论了源程序的识别,即判定一个源程序是否符合源语言的文法。在讨论语法分析时曾说过,上下文无关文法不足以描述编程语言的全部语法特征。为了说明这一点,让我们来看一个例子:■VARi:integer;BEGIN■■■END;■■■如果j没有在外层块屮说明,那么赋值语句中出现的j就是非法的。这是一种上下文敏感的成分。为了清塑地说明这一点,假定j是

2、在自顶向下分析过程中由非终极符V变量〉导出的,在这次推导Z前的句型为aVARj:integer;Pv变竝>Y其中为符号串。推导后的句型为aVARj:integer;PjY为了保证变量在使川前必须说明,需要冇如下形式的规则:VARj:integer;B<变量〉VARj:integer;0j而不是v变量〉j即v变量〉只有在一定的上下文中才可以展开成j。上下文敏感成分的分析实质上是语法分析的内容。但是,因为我们的语法分析是以上下文无关文法为基础的,没有考虑上下文敏感成分的处理,所以必须在语义分析时加以考虑。这相当于把语言的敏感成分

3、划归为语言的语义范畴(尽管在概念上并非如此)。比如说在处理说明VARj:integer时,语义分析应该将这个说明所提供的信息填入符号表,即完成対符号表的插入操作;当然也盂要完成其它的语义分析工作,而后在确定是否可用规则v变量〉fj进行推导时,就可通过对符号表的检索操作來完成。如果符号表中有标识符j,而Hj又是个变量标识符,就可以用此规则进行推导。除了敏感成分的处理之外,为了生成目标代码,所需要完成的一切操作都属于语义分析的范畴。考虑如下条件语句:IFETHENSiELSES2为它生成的Fl标代码应具冇图7.1的结构(称为它的

4、目标结构),其中,计算E的目标指令、Si和S?的目标指令是在处理表达式和语句时生成的,处理条件语句时所牛成的指令就是“jiimpfl。”和“jumph”。前者的含义为表达式E的值为false时,程序转向I。的指令继续执行,后者为无条件转到h的指令执行。问题在于编译程序在处理条件语句吋是从左向右进行的。因此,当要生成jumpf指令时,不知道1。的值,因为$的目标这时尚未牛成,不知道它究竟有多少条指令。在生成jump这条指令时也有同样问题。为了解决这个问题,在生成jumpf和jump指令时,应先记录这两条指令木身的位置,等以后再

5、回填它们的转向目标。假设当前要生成的指令位置为A条件语句的处理算法如下:IFsy=ifsyTHENinsymbol;expression;!处理表达式)IF表达式类型v>boolsTHENerror(n)ENDIF;lcl:=lc;生成jumpf指令;lc:=lc+l;IFsy=thensyTHENinsymbol;statement;!处理语句}IFsy=elsesyTHENlc2:=lc;生成jump指令;lc:=lc+l;回填jumpf指令的转向目标;insymbol;图7.1statement;!处理语句}回填jum

6、p指令的转向冃标;ELSE回填jumpf指令的转向目标ENDIFENDIFENDIF;町以看出,除了检查表达式类型外(頌感成分的处理),语义分析丄作述包括转向目标的回填等操作。与第四章给出的条件语句的语法分析算法相比,上述算法只是增加了如下几个操作::IF表达式类型v>boolsTHENerror(n);ENDIF;lcl:=lc;生成jumpf指令;lc:=lc+l;:lc2:=lc;生成jump指令;lc:=lc+l;冋填jumpf指令的转向H标;:回填jump指令的转向目标;:回

7、填jumpf指令的转向目标;这相当于说上而的处理算法是根据如下文法规则写成的:-IFv表达式xop1>THEN<语句>ELSEvop2>v语句><1F语句IFv表达式xop1>THENv语句〉即在文法规则中恢入了相应的语义加工操作。于是,语义分析及代码生成可以随着语法分析的进行,通过嵌入札I应的语义加工操作来完成。这种方法称为语法制导翻译,因为语言的文法规则确定了相应的语义分析类型及住成代码的性质,而且分析算法的主体控制是相应的文法规则。本章后血将结合实例讨论各种典型的语言结构的语义分析及代码

8、牛成。7.2目标机为了完成代码生成工作,必须冇一个提供运行环境的冃标机C最直接的方法是,在哪个机器上运行的编译程序就牛成那个机器的目标代码,或牛成那个机器的汇编语言程序,然后经过汇编程序汇编成可以执行的机器语言程序。汇编后产生的冃标代码可以具冇绝对地址,从而可以装到内存的固定区域去执行;也

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

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

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