编译原理chapter

编译原理chapter

ID:42329527

大小:564.56 KB

页数:81页

时间:2019-09-12

编译原理chapter_第1页
编译原理chapter_第2页
编译原理chapter_第3页
编译原理chapter_第4页
编译原理chapter_第5页
资源描述:

《编译原理chapter》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、属性文法语法制导翻译概论中间代码的形式简单赋值语句的翻译布尔表达式的翻译第八章语法制导翻译和中间代码生成1翻译程序的任务是把源程序翻译成目标程序,这个目标程序必须和源程序的语义等同。通常,在词法分析程序和语法分析程序对源程序的语法结构进行分析之后,要么由语法分析程序直接调用相应的语义子程序进行语义处理,要么首先生成语法树或该结构的某种表示,再进行语义处理。编译中的语义处理指两个功能:第一是审查每个语法结构的静态语义,即验证语法结构合法的程序是否真正有意义(静态语义分析或静态审查);第二是在静态语义正确,语义处理要执行真正的翻译,即要么生成程序的一种中间表示形式(中间代码),要么生成实际的

2、目标代码。2有的编译程序直接生成目标代码,有的编译程序采用中间代码。中间代码也称中间语言,是复杂性介于源程序语言和机器语言的一种表示形式。一般,快速编译程序直接生成目标代码,省掉了将中间代码翻译成目标代码的额外开销。但为了使编译程序结构在逻辑上更为简单明确,常采用中间代码,这样可将与机器相关的某些实现细节置于代码生成阶段仔细处理,并且可以在中间代码一级进行优化工作,使得代码优化比较容易实现。3现在很多编译程序采用比较接近形式化的语法制导翻译方法对语义处理工作进行比较规范和抽象的描述。这种方法使用属性文法为工具来说明程序设计语言的语义。一个属性文法包含一个上下文无关文法和一系列语义规则,这

3、些语义规则附在文法的每个产生式上,所谓语法制导翻译是指在语法分析过程中,完成附加在所使用的产生式上的语义规则描述的动作,从而实现语义处理。属性文法4属性常用来描述事物的特征等。对编译程序使用的语法树的结点,可以用“类型”、“值”或“存储位置”等属性来描述。形式上讲,一个属性文法是一个三元组A=(G,V,F):一个上下文无关文法G,一个属性的有穷集V,一个关于属性的断言或谓词的有穷集F。每个属性与文法的某个非终结符或终结符相联。每个断言与文法的某产生式相联。如果对G中的某一输入串,A中的所有断言对该输入串的语法树结点的属性全为真,则该串是A语言的句子。编译程序的静态语义审查工作就是验证关于

4、所编译的程序的断言是否全部为真。属性文法5属性文法最早出自克努特笔下,他把属性分为两类:继承属性和综合属性。在分析树中,一个结点的综合属性值是从其子结点的属性值计算出来的;而一个结点的继承属性值是由该结点兄弟结点和父结点的属性值计算出来的。这里不对属性文法进行理论上的研究,仅将它作为工具描述语义分析。在编译的许多实际应用中,属性和断言以多种形式出现,即与每个文法符号相联的可以是各种属性、断言、以及语义规则,或者某种程序设计语言的程序段等等。属性文法6例:有文法G:E->T1+T2

5、T1orT2T->num

6、true

7、false对输入串3+4的语法树如图:属性文法记号中常用N.t的形式表示

8、与非终结符N相联的属性t。比如可把完成对上面表达式的类型检查的属性文法写成如下图形式。与每个非终结符T相联的有属性t,t要么是int,要么是bool。与非终结符E的产生式相联的断言指明:两个T的属性必须相同。下图是上面输入串的语法树结点带有语义信息的表示。属性文法7属性文法中,对应于每个产生式A->都有一套与之相关联的语义规则,每条规则的形式为b:=f(c1,c2,…,ck)。f是一个函数,b和c1,c2,…ck是该产生式文法符号的属性。1)如果b是A的一个属性,c1,c2,…ck是产生式右部文法符号的属性或A的其他属性,则称b是A的综合属性。2)如果b是产生式右部某个文法符号X的一个

9、属性,并且c1,c2,…,ck是A或产生式右边任何文法符号的属性,则称b是文法符号X的继承属性。上述两种情况都说属性b依赖于属性c1,c2,…ck。注意:1)非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性;2)终结符只有综合属性,它们由词法分析程序提供。8例1:简单算术表达式求值的语义描述。产生式语义规则0)L->Eprint(E.val)1)E->E1+TE.val:=E1.val+T.val2)E->TE.val:=T.val3)T->T1*FT.val:=T1.val*F.val4)T->FT.val:=F.val5)F->(E)F.val:=E.val6)F->

10、digitF.val:=digit.lexval属性文法在该描述中,每个非终结符都有一个属性:一个整数值的称作val的属性。按照语义规则对每个产生式来说,它的左部E、T和F的属性值的计算来自它的右部的非终结符,这种属性称作综合属性。单词digit仅有综合属性,它的值是由词法分析程序提供的。和产生式L->E相联的语义规则是一个过程,打印E产生的表达式的值,可以理解为L的属性是空的或是虚的。9例2:描述说明语句中各种变量的类型信息的语义

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

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

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