- 1、本文档共42页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章——属性文法与语法制导翻译
第六章 属性文法和语法制导翻译;语义分析的功能;; 对一个属性文法,每个产生式A→α都有一套与之相关的语义规则,每条规则的形式为:
b := f ( c1,c2,...,ck )
其中:f是一个函数,而且:
或者(1)b是A的一个综合属性且c1,c2,...,ck是产生式右边文法符号的属性;
或者(2)b是产生式右部某个文法符号的一个继承属性并且c1,c2,...,ck是A或产生式右部任何文法符号的属性。
这两种情况均称属性b依赖于属性c1,c2,...,ck。;;;一个简单台式计算器的语法制导定义;语法制导翻译实现;依赖图;带有继承属性L.in的语法树;Real id1,id2,id3分析树的依赖图;Real id1,id2,id3分析树的依赖图;属性的计算顺序;属性计算方法;对无循环的属性文法进行属性计算的算法;例:;属性计算;属性计算方法;抽象语法树;如何建立表达式的抽象语法树;如表达式a-4+c的抽象语法树:;建立抽象语法树的语义规则;id;S—属性文法的自下而上计算;用LR分析器实现台式计算器;;状态;L-属性文法和自顶向下翻译;翻译模式(Translation Schemes);例(中缀表达式翻译成相应的后缀表达式)
E→TR
R→addop T {print(addop. Lexeme)} R1|ε
T→num {print(num.val)}
输入串9-5 + 2的语法树,每个语义动作都作为相应产生式左部符号的结点的儿子,按深度优先次序执行图中的动作后,打印输出95-2+。;建立翻译模式:;自顶向下翻译;例:E?E1+T {E.nptr:=mknode(‘+’,E1.nptr,T.nptr)}
E ? E1-T {E.nptr:=mknode(‘-’,E1.nptr,T.nptr)}
E ? T {E.nptr:=T.nptr}
转换成翻译模式:
E ?T{R.i :=T.nptr} R{E.nptr :=R.s}
R ?+T{R1.i := mknode(‘+’, R.i,T.nptr)}
R1{R.s := R1.s}
R ?-T{R1.i := mknode(‘-’, R.i,T.nptr)}
R1{R.s := R1.s}
R ?ε {R.s :=R.i}
; 自下而上计算继承属性 ;例:E→TR
R→+ T {print(‘+’)} R | - T {print(‘-’)} R |ε
T→num {print(num.val)}
可使用标记非终结符M和N转换为:
E→TR
R→+ T MR | - TNR |ε
T→num {print(num.val)}
M ?ε {print(‘+’)}
N ?ε {print(‘-’)} ;分析栈中的继承属性;;回顾Real id1,id2,id3分析树的依赖图;输入串real Real id1,id2,id3的分析过程当L的右??被归约时,T恰好在这个右部的下面;; 用综合属性代替继承属性;一个解决的方法是重新构造文法
文档评论(0)