l-语法制导翻译技术-5.ppt

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

* * * * * * * * * * * * * * * * * * * */84 总结 为了在分析的同时进行翻译,每个文法符号的属性都要入栈,综合属性可以放在与文法符号对应的栈中Val数组中,继承属性则放在标记非终结符对应的Val数组中,由于是L-属性定义,在标记非终结符处一定可以计算继承属性 引入标记非终结符对语法分析的影响 LL(1)文法引入标记非终结符后仍是LL(1)文法,不会产生分析冲突 LR(1)文法引入标记非终结符后不能保证还是LR(1)文法,可能导致分析冲突 */84 算法5.3:L属性定义的自底向上分析和翻译 输入:基础文法是LL(1)文法的L属性定义 输出:在分析过程中计算所有属性值的分析程序 方法: 假设: 每个非终结符号A都有一个继承属性A.i 每一个文法符号X都有一个综合属性X.s (1) 对每个产生式A?X1X2…Xn 引入n个新的标记非终结符号M1、M2、…、Mn 用产生式A?M1X1M2X2…MnXn代替原来的产生式 Xj的综合属性Xj.s存入Val数组中和Xj对应的条目 Xj的继承属性Xj.i出现在Val数组中和Mj对应的条目 继承属性Xj.i(也就是Mj.s)总是在Mj处计算,且发生在开始做归约到Xj的动作之前。 A的继承属性A.i在Val数组中紧靠和M1对应位置的下面 */84 (2) 在自底向上分析过程中,各个属性的值都可以 被计算出来 第一种情况:用Mj?? 进行归约 已知: 每个标记非终结符号在文法中是唯一的 知道Mj属于哪个形式为A?M1X1M2X2…MnXn的产生式 知道计算属性Xj.i需要哪些属性、以及它们的位置 ? M1 X1 M2 X2 … Mj-1 Xj-1 ? A.i X1.i X1.s X2.i X2.s … Xj-1.i Xj-1.s state val top-2(j-1) top-2(j-1)+2 top-2(j-2)+2 top top-2(j-1)+1 top-2(j-2)+1 top-1 Mj Mj.s ntop */84 第二种情况:用A?M1X1M2X2…MnXn进行归约时,只需计算综合属性A.s并存入新的栈顶 已知: A.i的值、及其位置? 在可归约串的下面 计算A.s所需要的属性值在栈中的位置? 在各有关Xj的位置上 state val ┉ M1 X1 M2 X2 ┉ Mn Xn ┉ A.i X1.i X1.s X2.i X2.s ┉ Xn.i Xn.s top top-2n top-2n+2 top-2n+4 state val ┉ A ┉ A.i A.s top top-1 */84 对改写产生式的简化,以减少可能导致的分析冲突: 如果Xj没有继承属性,不使用标记非终结符Mj 如果X1.i由复写规则X1.i:=A.i计算,可以省略M1 */84 四、用综合属性代替继承属性 例:PASCAL的变量声明语句可由如下文法产生: D?L:T T?integer|real L?L,id|id D L : T L , r L , q p real 问题: 标识符由L产生,而类型不在L的子树中 归约从左向右进行,类型信息从右向左传递 只用综合属性不能使类型和标识符联系在一起 不是L属性定义 . type . in . in . in . . . */84 解决方法 改写文法,使类型作为标识符表的最后一个元素 D?idL L?,idL|:T T?integer|real 改写后: 归约从右向左进行,类型信息从右向左传递 仅用综合属性即可把类型信息和标识符联系起来 D?idL addtype(id.entry,L.type) L?,idL1 L.type=L1.type; addtype(id.entry,L1.type) L?:T L.type=T.type T?integer T.type=integer T?real T.type=real D p L , q L : T real . type . type . type . . */84 补充:非L属性定义的翻译 上述翻译方法的局限:边分析边计算属性,访问结点的次序受到分析方法的限制,只能完成

文档评论(0)

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

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

1亿VIP精品文档

相关文档