语法制导翻译.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
谢 谢 语法制导翻译 静态语义分析 这一步才真正开始考虑程序设计语言的实际意义 静态语义分析的作用:检查出源程序中的静态语义错误 并且将语义正确的语句翻译成中间代码 该过程中通常使用的方法是语法制导翻译 * 由苏州翻译公司推荐 * 第四章 语法制导翻译生成中间代码 语法制导翻译是处理语义的基本方法,它以语法分析为基础,在语法分析得到语言结构的结果时,对附着于此结构的语义进行处理,如计算表达式的值、生成中间代码等。 主要内容包括: 语法制导翻译的基本概念 中间代码简介 符号表简介 典型声明语句与可执行语句的翻译 * 4.1 语法制导翻译简介 语法与语义 语法与语义的关系 语法是指语言的结构、即语言的“样子”;语义是指附着于语言结构上的实际含意 ,即语言的“意义”。 语义不能离开语法独立存在; 语义远比语法复杂; 同一语言结构可包含多种含意,不同语言结构可表示相同含意; 语法与语义之间没有明确的界线。 [例1] 猫吃老鼠与老鼠吃猫,晒被子与晒太阳(语法正确不一定语义正确) * 4.1 语法制导翻译简介 语义分析的两个作用 检查是否结构正确的句子所表示的意思也合法; 执行规定的语义动作,如: 表达式求值 符号表填写 中间代码生成等 语义分析的方法 语法制导翻译 基本思想:将语言结构的语义以属性的形式赋予代表此结构 的文法符号,而属性的计算以语义规则的形式赋予由文法符 号组成的产生式,在语法分析推导或者规约的每一步骤中, 通过语义规则实现对属性的计算。 * 4.1 语法制导翻译简介 属性与语义规则 语法制导翻译的基本思想 为每个产生式配上语义规则并且在适当的时候执行这些规则 具体方法: 将文法符号所代表的语言结构的意思,用附着于该文法符号的属性表示; 用语义规则规定产生式所代表的语言结构之间的关系(即属性之间的关系),即用语义规则实现属性计算。 语义规则的执行:在语法分析的适当时刻(如推导或归约)执行附着在对应产生式上的语义规则,以实现对语言结构语义的处理,如计算、查填符号表、生成中间代码、发布出错信息等。 * 4.1 语法制导翻译简介 属性的表示 .attr 如:E.val(值),E.type(类型),E.code(代码序列), E.place(存储空间) 属性在程序设计中的具体表示可以根据实际情况采用适当 的数据结构或者程序代码来实现 语义规则定义 定义4.1 对于产生式A→α,其中α是由文法符号X1X2...Xn组成的序列,它的语义规则可以表示为(4.1)所示关于属性的函数: b := f(c1, c2, ..., ck) (4.1) * 4.1 语法制导翻译简介 A→α 的语义规则 b := f(c1, c2, ..., ck) (4.1) 语义规则中的属性存在下述性质与关系。 若b是A的属性,c1, c2, ..., ck是α中文法符号的属性,或者A的其它属性,则称b是A的综合属性。 若b是α中某文法符号Xi的属性,c1, c2, ..., ck是A的属性,或者是α中其它文法符号的属性,则称b是Xi的继承属性。 称(4.1)中属性b依赖于属性c1, c2, ..., ck。 若语义规则的形式如下述(4.2),则可将其想像为产生式左部文法符号A的一个虚拟属性。属性之间的依赖关系,在虚拟属性上依然存在。 f(c1, c2, ..., ck) (4.2) (4.1)中属性之间的依赖关系,实质上反映了属性计算的先后次序,即所有属性ci被计算之后才能计算属性b。 * 4.1 语法制导翻译简介 语义规则的两种形式 语法制导定义 用抽象属性和运算符号表示的语义规则 翻译方案 用具体属性和运算表示的语义规则 语义规则也被习惯上称为语义动作。 二者作用等价,语法制导定义适用于设计阶段,翻译方案适用 于实现阶段。 * 4.1 语法制导翻译简介 [例4.1] 将中缀形式的算术表达式转换为后缀表示。其语法制导定义和翻译方案可分别表示如下。其中print(E.post)是L的虚拟属性,即L.p := print(E.post)。翻译方案中的.lexval表示词法分析返回的记号num的值。 产生式 语法制导定义 翻译方案 L → E print(E.post) print_post(post); E → E1 + E2 E.post := E1.post || E2.post || +; post(k) := +; k := k+1

文档评论(0)

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

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

1亿VIP精品文档

相关文档