哈工大编译原理5-1.ppt

  1. 1、本文档共71页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 语法制导翻译 翻译模式也叫翻译方案 5.2.2翻译模式 一个翻译模式是一个上下文无关文法, 其中被称为语义动作的程序段被嵌入到产生式的右部。 一个翻译模式类似于语法制导定义,只是语义规则的计算顺序是显式给出的。   这是一种语法分析和语义动作交错的表示法,   翻译模式给出了使用语义规则进行计算的顺序。可看成是分析过程中翻译的注释。   他表达在按深度优先遍历分析树的过程中何时执行语义动作. 例2: E→TE’ E’→+ T E’|ε T→id 一个简单的翻译模式(中缀变后缀) E→TE’ E’→+ T {print(+.lexeme)}E’|ε T→id{print(id.val)} 3+5的语义翻译过程 E E’ T Pr’3’ 3 T + Pr’+’ 5 E’ Pr’5’ ε 结果:35+ 翻译方案不仅要考虑“做什么”,还要考虑“怎么做” 某种意义上说,语法制导定义类似于算法,而翻译方案更象程序  带有继承属性L.in的翻译方案 D?T{ L?in:=T ? type }L T ?int { T ? type :=integer } T ?real { T ? type :=real } L ?{L1 ?in :=L ?in} L1,id{addtype(id ?entry,L ?in) } L ?id { addtype(id ?entry,L ?in) } 例5 . 3 变量说明的类型定义 int a,b,c D L.in=T.type L real L1.in=L.in , id3 L1.in=L.in , id2 id1 句子real id1,id2,id3的带继承属性的分析树 T T.type=real L L Add(L.in) Add(L.in) Add(L.in) 例:文法G的产生式如下: S→(L) S →a L →L,S L →S 1.试写出一个语法制导定义,输出配对括号个数 2.写一个翻译方案,打印每个a的嵌套深度 解:1.为S,L引入属性h 产生式 语法制导定义 S→(L) S →a L →L1,S L →S S’ →S S.h=0 S.h=L.h+1 L.h=L1.h+S.h L.h=S.h Print(S.h) ( a S S.h=0 L , ( a L.h=0 S S.h=0 L L.h=0 ) S S.h=1 L L.h=1 ) S S.h=2 (a,(a))的分析过程 2.为S,L引入属性d,翻译方案如下 S’ → S S→(L) S →a L →L1, S L → S {S.d=0} S {L.d=S.d+1} L ) {print(S.d)} {L1.d=L.d} L1, {S.d=L.d} S {S.d=L.d} S S’ S.h=0 S ( L.d=1 L ) L.d=1 L , S.d=1 S S.d=1 S Print(1) a ( L.d=2 L ) S.d=2 S Print(2) a (a,(a))的分析过程 5.3 S-属性定义及其自底向上的计算 state val top 在分析栈中使用一个附加的域来存放综 合属性值。 下图为一个带有综合属性值域的分析栈: Z Y Z …… Z.val Y.val Z.val …… ?A?? b:=f(c1,c2,…,ck) A ?b X ?x Y ?y Z ?z 例:A?XYZ A?b:=f(X ?x, Y ?y,Z ?z)            ci(1? i?k)是 ?中符号的属性。 其中:b是A的综合属性,         综合属性的值在自底向上的分析过程中,           每步归约时,计算相应的属性值。 X  Y   Z A state val ... ... A A .b top 定义式 A .b=f(X.x, Y.y, Z.z)(抽象) 变成 val[ntop]=f(val[top-2],val[top-1],val[top])(具体可执行代码)。 归约后,分析栈为: 在执行代码段之前执行:

文档评论(0)

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

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

1亿VIP精品文档

相关文档