编译原理语法制导翻译和中间代码生成.doc

编译原理语法制导翻译和中间代码生成.doc

ID:51049113

大小:168.00 KB

页数:13页

时间:2020-03-08

编译原理语法制导翻译和中间代码生成.doc_第1页
编译原理语法制导翻译和中间代码生成.doc_第2页
编译原理语法制导翻译和中间代码生成.doc_第3页
编译原理语法制导翻译和中间代码生成.doc_第4页
编译原理语法制导翻译和中间代码生成.doc_第5页
资源描述:

《编译原理语法制导翻译和中间代码生成.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、第七章语法制导翻译和中间代码生成编译程序的任务是把源程序翻译成目标程序,这个目标程序必须和源程序的语义等同,也就是说,尽管它们的语法结构完全不同,但它们所表达的结果应完全相同。通常,在词法分析程序和语法分析程序对源程序的语法结构进行分析之后,要么由语法分析程序直接调用相应的语义子程序进行语义处理,要么首先生成语法树或该结构的某种表示,再进行语义处理。编译中的语义处理是指两个功能:第一,审查每个语法结构的静态语义,即验证语法结构合法的程序是否真正有意义。第二,如果静态语义正确,语义处理则要执行真正的翻

2、译,即,要么生成程序的一种中间表示形式(中间代码),要么生成实际的目标代码。为什么有的编译程序直接生成目标代码,有的编译程序采用中间代码,所谓中间代码,也称中间语言,是复杂性介于源程序语言和机器语言的一种表示形式。一般,快速编译程序直接生成目标代码,没有将中间代码翻译成目标代码的额外开销。但是为了使编译程序结构在逻辑上更为简单明确,常采用中间代码,这样可以将与机器相关的某些实现细节置于代码生成阶段仔细处理,并且可以在中间代码一级进行优化工作使得代码优化比较容易实现。本章重点:属性文法、语法制导翻译方

3、法的基本思想、几种典型的中间代码形式、一些语法成分的翻译工作。第一节属性文法现在很多编译程序采用语法制导翻译方法。这仍不是一种形式系统,但它是比较接近形式化的。这种方法使用属性文法为工具来说明程序设计语言的语义。一个属性文法包含一个上下文无关文法和一系列语义规则,这些语义规则附在文法的每个产生式上,在语法分析过程中,完成附加在所使用的产生式上的语义规则描述的动作,从而实现语义处理。首先简单介绍属性文法。属性,常用以描述事物或人的特征、性质、品质等等。比如,谈到一个物体,可以用“颜色”描述它,谈起某人

4、,可以使用“有幽默感”来形容他。对编译程序使用的语法树的结点,可以用“类型”、“值”或“存储位置”来描述它。形式上讲,一个属性文法是一个三元组,A=(G,V,F),一个上下文无关文法G;一个属性的有穷集V和关于属性的断言或谓词的有穷集F。每个属性与文法的某个非终结符或终结符相联。每个断言与文法的某产生式相联。如果对G中的某一输入串而言(句子),A中的所有断言对该输入串的语法树结点的属性全为真,则该串也是A语言中的句子。编译程序的静态语义审查工作就是验证关于所编译的程序的断言是否全部为真。比如,有文法

5、G为:E→T1+T2

6、T1orT2T→num

7、true

8、false因为T在同一个产生式里出现了两次,使用上角标将它们区分开。对输入串3+4的语法树如图7-1-1(a){T1.t=int}ET+T43(a){T2.t=int}E{T1.t=T2.t}T+T43(b)图7-1-1静态语义审查属性文法记号中常使用N.t的形式表示与非终结符N相联的属性t。比如可把完成对上面表达式的类型检查的属性文法写成图7-1-2的形式。与每个非终结符T相联的有属性t,t要么是int,要么是bool。与非终结符E的产生式相

9、联的断言指明:两个T的属性必须相同。图7-1-1(b)是图7-1-1(a)语法树结点带有语义信息的表示。E→T1+T2{T1.t=intANDT2.t=int}T→true{T.t:=bool}E→T1orT2{T1.t=boolANDT2.t=bool}T→false{T.t:=bool}T→num{T.t:=int}图7-1-2类型检查的属性文法属性文法最早出自克努特笔下。他把属性分成两类:继承属性和综合属性,我们不对属性文法进行理论上的研究而仅仅将它做为工具描述语义分析。在编译的许多实际应用中

10、,属性和断言以多种形式出现,也就是说,与每个文法符号相联的可以是各种属性、断言、以及语义规则,或者某种程序设计语言的程序段等等。下面再给出一些例子。例1:简单算术表达式求值的语义描述。产生式语义规则(0)L→Eprint(E.val)(1)E→E1+TE.val:=E1.val+T.val(2)E→TE.val:=T.val(3)T→T1*FT.val:=T1.val×F.val(4)T→FT.val:=F.val(5)F→(E)F.val:=E.val(6)F→digitF.val:=digit.

11、lexval在该描述中,每个非终结符都有一个属性:一个整数值的称作val的属性。按照语义规则对每个产生式来说,它的左部E,T,F的属性值的计算来自它右部的非终结符,这种属性称作综合属性。单词digit仅有综合属性,它的值是由词法分析程序提供的。和产生式L→E相联的语义规则是一个过程,打印由E产生的表达式的值。我们可以理解为L的属性是空的或是虚的。第二节语法制导翻译概论在语法分析过程中,随着分析的步步进展,根据每个产生式所对应的语义子程序(或语义规则描述的语义动作)进行

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

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

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