第8章 语法制导翻译和中间代码生成new.ppt

第8章 语法制导翻译和中间代码生成new.ppt

  1. 1、本文档共131页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 语法制导翻译和中间代码生成new

第八章 语法制导翻译和中间代码生成 【学习目标】 明确语义分析在编译过程所处的阶段和作用。 掌握属性文法的基本概念。 使用属性文法和语法制导翻译方法描述具体的语义分析和产生中间代码。 主要是要让同学们了解: 1)语义的描述方式; 2)语义的处理方法。 【本章重点】 1.几种典型的中间代码(语言)的形式; 2.语义的描述方法— 着重介绍一种形式化的语义描述方法—属性文法; 3.语义的处理方法— 着重介绍语法制导的翻译法—包括它的两种具体形式:语法制导的定义和翻译方案 。 8.0 概述 编译程序的任务是把源程序翻译成目标程序,这个目标程序必须和源程序的语义等同,也就是说,尽管它们的语法结构完全不同,但它们所表达的结果应完全相同。 通常,在词法分析程序和语法分析程序对源程序的语法结构进行分析之后,要么由语法分析程序直接调用相应的语义子程序进行语义处理,要么首先生成语法树或该结构的某种表示,再进行语义处理。 8.1 属性文法(attribute grammar) 属性文法(也称属性翻译文法)是Knuth在1968年首先提出的。 它是在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)配备若干相关的“特性”(称为属性)。 这些属性代表与文法符号相关信息,例如它的类型、值、代码序列、符号表内容等等。 属性与变量一样,可以进行计算和传递。属性加工的过程即是语义处理的过程。 8.1.1 属性文法定义 定义1: 形式上讲,属性文法是一个三元组 :A=(G,V,F), 其中: G:是一个上下文无关文法; V:有穷的属性集,每个属性与文法的一个终结符或非终结符相联,这些属性代表与文法符号相关信息; F:关于属性的属性断言或一组属性的计算规则(称为语义规则) 。 断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相联的属性。 定义2: 一个属性文法是一个三元组:A=(G,V,F ),其中 G --基础文法(一个上下文无关文法) V --每个文法符号有一组属性 F --每个文法产生式A??有一组形式为b:=f(c1,c2,…,ck)的语义规则,其中f 是函数,b和c1,c2,…,ck是该产生式文法符号的属性。 图8.1 类型检查的属性文法 例8.1 有文法G为: E→T1 + T2|T1 or T2 T→num|true|false 对输入串3+4的类型检查的属性文法如图8.1。 8.1.2 属性的确定 写属性文法,首先应确定对于每个文法符号都有哪些属性,然后给每个属性起个名字,接着确定每个属性的类别。 要特别强调的是: (1)终结符只有综合属性,它们的值由词法分析器提供; (2)非终结符既可有综合属性也可有继承属性,文法开始符号的所有继承属性作为属性计算前的初始值要在计算(整个处理)开始时指定。 例8.2 简单算术表达式求值的语义描述。 产生式       语义规则 L→E print(E.val) E→ E1 + T E. val∶= E1. val+ T. val E→T E. val∶= T. val T→ T1 * F T. val∶= T1. val * F. val T→F T . val∶= F. val F→(E) F . val∶= E. val F→digit F . val∶= digit.lexval 例 8.3?描述说明语句中各种变量的类型信息的语义规则。 产生式       语义规则 (1)D→TL      { L.in∶=T.type} (2)T→int     { T.Type∶=integer} (3)T→real    { T.Type∶=real} (4)L→L1,id { L1.in∶=L.in;            addtype(id.entry,L.in)} (5)L→id      {addtype(id.entry,L.in)} 图8.4是句子int id1,id2的语法树,使用?表示属性的传递情况。在语法树中,一个结点的继承属性由此结点的父结点和/或兄弟结点的某些属性确定。与L产生式相联的语义规则中有一个过程调用addtype,过程addtype的功能是把每个标识符的类型信息登录在符号表的相关项中。 8.1.3 属性计算规则的确定 一般说来, ①对产生式右部符号的继承属性和产生式左部符号的综合属性都必须提供一个计算规则。属性计算规则中只能使用相应产生式

文档评论(0)

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

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

1亿VIP精品文档

相关文档