- 1、本文档共81页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 语法制导翻译 5.4 ~ 5.5 5.4 语法制导的翻译模式(Translation Scheme) 语法制导翻译(SDT)是SDD的实现。 语法制导翻译模式(SDT)是拓广的CFG, 在文法中嵌入语义动作,语义动作写在花括号“{}”里,可以出现在产生式右部适当位置。 当归约出产生式右部的某个非终结符号后,就执行紧接在该非终结符号右边的语义动作。 任何SDT可以通过先建立语法分析树,然后前序遍历执行语义动作。 但是,我们希望SDT能够在语法分析的同时进行,无需构造好分析树。这里讨论两类: 基础文法是LR,SDD是S-attributed; 基础文法是LL,SDD是L-attributed。 SDD vs. SDT 语义规则 语义动作 SDD vs. SDT 语义规则 语义动作 5.4.1 后缀SDT 自底向上分析S属性文法。 A ? X Y Z{语义动作} 5.4.2后缀SDT的语法分析实现 A ? X Y Z 例5.15 显式操作语法分析栈 3*5 n的分析计算过程 3*5 n的分析计算过程 3*5 n的分析计算过程 3*5 n的分析计算过程 3*5 n的分析计算过程 3*5 n的分析计算过程 3*5 n的分析计算过程 3*5 n的分析计算过程 5.4.3 产生式内部带语义动作的SDT B ? X {a} Y LR:归约出X之后立即执行动作{a} LL:试图展开Y之前执行动作{a} 例,中缀到后缀转换的SDD 例,中缀到后缀转换的SDT L ? E n E ? E1+ T {print(‘+’)} E ? T T ? T1* F {print(‘*’)} T ? F F ? (E) F ? digit {print(digit.lexval)} 例5.16 翻译为前缀表达式 L ? E n E ? {print(‘+’)} E1+ T E ? T T ? {print(‘*’)} T1* F T ? F F ? (E) F ? digit {print(digit.lexval)} 嵌入动作的分析树:3*5+4 5.4.4 从SDT中删除左递归 例5.17 带左递归的文法的翻译模式。 E ? E1 + T { print(‘+’); } E ? T 转换为: E ? TR R ? + { print(‘+’); } R R ? ? 例:一个一般化的例子 5.4.5 L属性定义的SDT 确定语义动作的执行时机 如何将语义动作嵌入产生式右部的适当位置? 原则: 2. 同时存在综合属性和继承属性,建立翻译模式的必要条件: 产生式右部符号的继承属性必须在这个符号以前的动作中计算出来; 一个动作不能引用该动作右边符号的综合属性; 产生式左边非终结符号的综合属性只有在它所引用的所有属性都计算出来以后才能计算。计算这种属性的动作通常可以放在产生式右端的末尾。 例5.18数学排版语言的翻译模式片断。 例5.18数学排版语言的翻译模式。 图5-25 盒子的大小和高度的语法制导定义 E sub 1的推导过程(忽略二义性问题) 如何消除二义性? 例5.19 S ? while (C) S1 5.5 实现L属性定义的翻译 建立注释语法分析树 构造语法分析树,加入动作,按照前序顺序执行 使用递归下降的语法分析器,在预测分析的过程中实现L属性定义。 例5.20 例5.22 5.5.1 从翻译模式中消除左递归 经过转换的带有右递归文法的翻译模式 表达式9-5+2的计算 例5.15 转换后的构造语法树的翻译模式 5.5.2 预测翻译器的设计算法5.1 预测语法制导翻译器的构造 算法5.1 预测语法制导翻译器的构造 例5.16 图5.28中的文法是LL(1)文法,适于自顶向下的分析。 从文法中非终结符号的属性,可以得到函数E,R和T的参数和返回值的类型。由于E和T没有继承属性,所以它们不含有参数。 R的翻译器代码基于产生式 R ? addop T R |?的语法分析过程: 5.5.4 L属性的自底向上 S-属性的自底向上计算 综合属性——在归约时执行计算动作 L-属性的自底向上计算 语义动作不在最右——内嵌的语义动作 继承属性的计算——关键问题 解决方法——引入标记 删除嵌入在翻译模式中的动作 语义动作如何执行 希望在归约时执行 所有的动作都出现在产生式的末尾 可以采用在翻译模式中插入标记非终结符号的方法。 例:引入标记非终结符号M,N,改写翻译模式: 分析栈中的继承属性 继承属性的值无非有两种来源 一开始就存在 来自综合属性,经过复制 来自综合属性,经过计算 继承属性来自综合属性,其值由复写规则决定,且继承属性的位置固定的情形。 翻译模式 图5.33 当L的右边符号被归约
您可能关注的文档
- 第五跨膜运输.ppt
- 电工试题建筑.doc
- 电工特种作业证初培题库.doc
- 第五矿井与采区通风系统.ppt
- 电工学(少学时)(第三)学习辅导与习题全解(唐介).ppt
- 第五老期常见心理问题和精神障碍的护理.ppt
- 电工学(一)电路的基本概念和基本定律.ppt
- 电工学第电动机.ppt
- 第五冷却系统.ppt
- 电工学第七第二课件.ppt
- 第18讲 第17课 西晋的短暂统一和北方各族的内迁.docx
- 第15讲 第14课 沟通中外文明的“丝绸之路”.docx
- 第13课时 中东 欧洲西部.doc
- 第17讲 第16 课三国鼎立.docx
- 第17讲 第16课 三国鼎立 带解析.docx
- 2024_2025年新教材高中历史课时检测9近代西方的法律与教化含解析新人教版选择性必修1.doc
- 2024_2025学年高二数学下学期期末备考试卷文含解析.docx
- 山西版2024高考政治一轮复习第二单元生产劳动与经营第5课时企业与劳动者教案.docx
- 第16讲 第15课 两汉的科技和文化 带解析.docx
- 第13课 宋元时期的科技与中外交通.docx
文档评论(0)