编译原理chapter8新.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理chapter8新

属性文法 语法制导翻译概论 中间代码的形式 简单赋值语句的翻译 布尔表达式的翻译; 翻译程序的任务是把源程序翻译成目标程序,这个目标程序必须和源程序的语义等同。通常,在词法分析程序和语法分析程序对源程序的语法结构进行分析之后,要么由语法分析程序直接调用相应的语义子程序进行语义处理,要么首先生成语法树或该结构的某种表示,再进行语义处理。 编译中的语义处理指两个功能:第一是审查每个语法结构的静态语义,即验证语法结构合法的程序是否真正有意义(静态语义分析或静态审查);第二是在静态语义正确,语义处理要执行真正的翻译,即要么生成程序的一种中间表示形式(中间代码),要么生成实际的目标代码。; 有的编译程序直接生成目标代码,有的编译程序采用中间代码。中间代码也称中间语言,是复杂性介于源程序语言和机器语言的一种表示形式。一般,快速编译程序直接生成目标代码,省掉了将中间代码翻译成目标代码的额外开销。但为了使编译程序结构在逻辑上更为简单明确,常采用中间代码,这样可将与机器相关的某些实现细节置于代码生成阶段仔细处理,并且可以在中间代码一级进行优化工作,使得代码优化比较容易实现。; ; 属性常用来描述事物的特征等。对编译程序使用的语法树的结点,可以用“类型”、“值”或“存储位置”等属性来描述。 形式上讲,一个属性文法是一个三元组A=(G,V,F):一个上下文无关文法G,一个属性的有穷集V,一个关于属性的断言或谓词的有穷集F。每个属性与文法的某个非终结符或终结符相联。每个断言与文法的某产生式相联。如果对G中的某一输入串,A中的所有断言对该输入串的语法树结点的属性全为真,则该串是A语言的句子。编译程序的静态语义审查工作就是验证关于所编译的程序的断言是否全部为真。; 属性文法最早出自克努特笔下,他把属性分为两类:继承属性和综合属性。在分析树中,一个结点的综合属性值是从其子结点的属性值计算出来的;而一个结点的继承属性值是由该结点兄弟结点和父结点的属性值计算出来的。这里不对属性文法进行理论上的研究,仅将它作为工具描述语义分析。在编译的许多实际应用中,属性和断言以多种形式出现,即与每个文法符号相联的可以是各种属性、断言、以及语义规则,或者某种程序设计语言的程序段等等。;例:有文法G: E-T1+T2|T1orT2 T-num|true|false 对输入串3+4的语法树如图: 属性文法记号中常用N.t的形式表示与非终结符N相联的属性t。比如可把完成对上面表达式的类型检查的属性文法写成如下图形式。与每个非终结符T相联的有属性t,t要么是int,要么是bool。与非终结符E的产生式相联的断言指明:两个T的属性必须相同。下图是上面输入串的语法树结点带有语义信息的表示。; 属性文法中,对应于每个产生式A-?都有一套与之相关联的语义规则,每条规则的形式为b:=f(c1,c2,…,ck)。 f是一个函数,b和c1,c2,…ck是该产生式文法符号的属性。 1)如果b是A的一个属性,c1,c2,…ck是产生式右部文法符号的属性或A的其他属性,则称b是A的综合属性。 2)如果b是产生式右部某个文法符号X的一个属性,并且c1,c2,…,ck是A或产生式右边任何文法符号的属性,则称b是文法符号X的继承属性。 上述两种情况都说属性b依赖于属性c1,c2,…ck。 注意:1)非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性;2)终结符只有综合属性,它们由词法分析程序提供。;例1:简单算术表达式求值的语义描述。 产生式 语义规则 0)L-E print(E.val) 1)E-E1+T E.val:=E1.val+T.val 2)E-T E.val:=T.val 3)T-T1*F T.val:=T1.val*F.val 4)T-F T.val:=F.val 5)F-(E) F.val:=E.val 6)F-digit F.val:=digit.lexval;例2:描述说明语句中各种变量的类型信息的语义规则。 产生式 语义规则 0)D-TL L.in:=T.type 1)T-int T.type:=integer 2)T-real T.type:=real 3)L-L1,id L1.in:=L.in

文档评论(0)

ajiangyoulin1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档