- 1、本文档共70页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 语法制导翻译 例2: 一个简单的翻译模式(中缀变后缀) E→TR R→addop T {print(addop.lexeme)}R1|ε T→num{print(num.val)} 3+5的语义翻译过程 E R T Pr’3’ 3 T + Pr’+’ 5 R 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.h=L.h+1 S →a S.h=0 L →L1,S L.h=L1.h+S.h L →S L.h=s.h S’ →S 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.d=0} S S→( {L.d=S.d+1} L) S →a {print(s.d)} L →{L1.d=L.d} L1, {S.d=L.d}S L →{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])(具体可执行代码)。 归约后,分析栈为: 在执行代码段之前执行: ntop:=top-r+1 执行代码段后执行: top:=ntop; 其中:r是句柄的长度, ntop为归约后栈顶 例5.10 用LR分析器实现台式计算器 产生式 代码段(和表5.1对比) L?En printf(val[ntop]) E ?E+T val[ntop]:=val[top-2]+val[top] E ?T T ?T*F val[ntop]:=val[top-2]*val[
文档评论(0)