语法制导的翻译.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 语法制导的翻译 陈 林 引言  使用上下文无关文法引导语言的翻译 CFG的非终结符号代表了语言的某个构造 程序设计语言的构造由更小的构造组合而成 一个构造的语义可以由小构造的含义综合而来  比如:表达式x+y的类型由x、y的类型和运算符+决定 也可以从附近的构造继承而来  比如:声明int x;中x的类型由它左边的类型表达式决定 语法制导定义和语法制导翻译  语法制导定义 将文法符号和某些属性相关联 并通过语义规则来描述如何计算属性的值 E →E +T E.code=E .code||T.code || ‘+’ 1 1  属性code代表中缀表达式的逆波兰表示(后缀表示法),规则 说明加法表达式的逆波兰表示由两个分量的逆波兰表示并置, 然后加上‘+’得到  语法制导翻译 在产生式体中加入语义动作,并在适当的时候执行 这些语义动作 E → E +T {print ‘+’;} 1 语法制导的定义(SDD)  SDD是上下文无关文法和属性/规则的结合 属性和文法符号相关联,按照需要来确定各个文法 符号需要哪些属性 规则和产生式相关联  对于文法符号X和属性a,用X.a表示分析树中的某 个标号为X的结点的值  一个分析树结点和它的分支对应于一个产生式规则, 而对应的语义规则确定了这些结点上的属性的取值 分析树和属性值(1)  假设我们需要知道一个表达式的类型,以及对应代码 将它的值存放在何处,我们就需要两个属性:type, place  产生式规则:E →E +T 1  语义规则:(假设只有int/float类型)  E.type = if (E .type T.type) T.type else float 1  E.place = newTempPlace(); //返回一个新的内存位置;  产生式规则:F →id  F.type = lookupIDTable(id.lexValue)-type;  F.place = lookupIDTable(id.lexValue)-address; 分析树和属性值(2) E.Type = FLOAT E E.Place = tmp2 E.Type = FLOAT T.Type = INT E.Place = a E + T T.Place = tmp T.Type = FLOAT T T * F F.Type = INT T.Place = a F.Place = c 假设a,b,c是已经声明 的全局变量,a的类型 F.Type = FLOAT F F id id.lexValue=c 为FLOAT,b,c的类型为 F.Place = a INT id.lexValue=a id id id.lexValue=b 中间未标明的T和F的 type和address都是INT 和b; •a+b*c的语法分析树以及属性值 继承属性和综合属性 • 综合属性(synthesized attribute):在分析树结点N

文档评论(0)

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

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

1亿VIP精品文档

相关文档