- 1、本文档共81页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Part6属性文法和语法制导翻译剖析
L-属性定义的语法制导翻译 设计L属性定义的语法制导翻译需要注意以下几点: 基本设计原则:当某个动作引用一个属性时,这个属性是可用的。也就是说,一个动作不会引起一个没有计算出来的属性。 只有综合属性时 为每一个语义规则建立一个赋值动作,并把该动作放在产生式右部的末尾 T→T1*F T.val := T1.val ×F.val T→T1*F {T.val := T1.val ×F.val} L-属性定义的语法制导翻译 同时存在综合属性和继承属性时: 产生式右部符号的继承属性必须在这个符号以前的动作中计算出来 一个动作不能引用该动作右部符号的综合属性 产生式左部非终结符的综合属性只有在其引用的所有属性值都计算出来以后才能计算。计算该属性的动作通常放在产生式右部的末尾。 下面的翻译模式不符合上面的定义: S→A1A2 {A1.in := 1; A2.in := 2} A→a {print(A.in)} 按深度优先遍历时,要打印第二个产生式里的继承属性A.in时,该属性还没有被定义。 L-属性文法举例 产生式 语义规则 S→B B.ps := 10 S.ht := B.ht B→B1B2 B1.ps := B.ps B2.ps := B.ps B.ht := max(B1.ht, B2.ht) B→ B1 sub B2 B1.ps := B.ps B2.ps := shrink(B.ps) B.ht := disp(B1.ht, B2.ht) B→text B.ht := text.h ×B.ps S→{B.ps := 10} B {S.ht := B.ht} B→{B1.ps := B.ps} B1 {B2.ps := B.ps} B2 {B.ht := max(B1.ht, B2.ht)} B→ {B1.ps := B.ps} B1 sub {B2.ps := shrink(B.ps)} B2 {B.ht := disp(B1.ht, B2.ht)} B→text {B.ht := text.h ×B.ps} L-属性文法的自顶向下翻译 在预测分析的过程中实现L-属性文法 为了明显的看出动作和属性计算发生的属性,我们使用翻译模式而不是属性文法。 为了构造不带回溯的自顶向下语法分析,必须消除文法中的左递归。 将前面讲过的方法扩充,从翻译模式中消除左递归(LL(1)文法构造的步骤),这种方法也适用于带有综合属性的翻译模式。 举例 E→E1+T {E.val := E1.val + T.val} E→E1-T {E.val := E1.val - T.val} E→T {E.val := T.val} T→(E) {T.val := E.val} T→num {T.val := num.val} E→T {R.i := T.val} R {E.val := R.s} R→+ T {R1.i := R.i + T.val} R1 {R.s := R1.s} R→- T {R1.i := R.i - T.val} R1 {R.s := R1.s} R→ε {R.s := R.i} T→( E ) {T.val := E.val} T→num {T.val := num.val} 9-5+2 R - T num R ε E T num R + T num val=9 val=9 i=9 val=5 val=5 i=4 val=2 val=2 i=6 s=6 val=6 一个符号继承属性必须由出现这个符号之前的动作来计算,产生式左边非终结符的综合属性必须在它所依赖的所有属性都计算出来之后才能计算 消除左递归的一般方法 假设有如下的翻译模式 A→A1Y {A.a := g(A1.a, Y.y)} A→X {A.a := f(X.x)} 每个文法符号都有综合属性,g和f是任意函数。 文法可以转换为: A→XR R→YR | ε 考虑语义动作,变为: A→X {R.i := f(X.x)} R {A.a := R.s} R→Y {R1.i := g(R.i, Y.y)} R1 {R.s :=
您可能关注的文档
最近下载
- 小学生助人为乐PPT帮助他人快乐自己主题班会演讲ppt.pptx
- 3104112《心理健康与职业生涯学习指导》(答案).pdf VIP
- 企业文化与商业伦理(东北大)中国大学MOOC慕课 客观题答案.docx
- TCHSA-013-2023-牙周病患者正畸治疗指南.pdf VIP
- 云米互联网洗衣机(10KG)-产品说明书.pdf
- 小学语文主题式大单元整体教学研究课题报告(立项) .pdf
- 六年级下册道德与法治第4课《地球—我们的家园》第一课时 教案教学设计.doc
- 《心理健康》大学主题班会.ppt VIP
- IBM-长安汽车基于产品为主线的组织及管理体系诊断项目_福特案例研究-2016.pptx VIP
- 2023北京海淀三年级(上)期末语文试卷含答案.docx
文档评论(0)