6语义的分析和中间代码生成.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 语义分析与中间代码生成;主要内容;源语言程序 ;语义处理的任务: 静态语义检查 静态语义检查:审查静态语义 (语义分析) 动态语义处理 动态语义处理:生成(中间/目标)代码; 在文法中,文法符号通常都有明确的意义,文法符号之间也有确定的语义关系。 用属性描述语义信息,用语义规则描述属性间的的关系,将语义规则与语法规则相结合。 ;基本思想: 根据翻译的需要设置文法符号的属性, 以描述语法结构的语义。例如,一个变量的 属性有类型,作用域,存储地址等。表达式的属性有类型,值等。属性值的计算和产生式相联系。随着语法分析的进行,执行属性值的计算,完成语义分析和翻译的任务。;语义处理的环境:符号表 为语义分析提供类型、作用域等信息。 为代码生成提供类型、作用域、存储类别、存储(相对)位置等信息。 ; 在语法分析过程中,随着分析的步步进展,根据每个产生式所对应的语义规则描述的语义动作(或语义子程序)进行翻译的办法称作语法制导翻译。;1、属性文法(syntax-directed definitions): 定义翻译所必须的语义属性和语义规则,一般不涉及计算顺序。是对上下文无关文法的推广。 2、翻译模式(translation schemes): 给出语义规则进行计算的顺序。;6.1 语法制导翻译; 属性通常分为两类:综合属性和继承属性。简单地说,综合属性用于“自下而上”传递信息,而继承属性用于“自上而下”传递信息。 ; 在一个属性文法中,?A→??P都有与之相关联的一套语义规则,规则形式为 b:= f(c1,c2,…,ck), f 是一个函数,而且或者; 1)非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性. 2)终结符只有综合属性,它们由词法程序提供.;例 简单计算器程序的属性文法;综合属性 ;例 S-属性文法;digit?lexval:=3;继承属性 每个文法符号可以和一个继承属性值 联系,属性值的设置和语法结构的语义以及翻译程序的需要有关。;例 进行变量说明的类型定义 real a,b,c ; 带有继承属性L.in的属性文法;;基于属性文法的翻译可按下图的流程处理。;1.依赖图 (依赖图的构造方法) for 分析树中每一结点n do for 结点n的文法符号的每一个属性a do 为a在依赖图中建立一个结点; for 分析树中每一个结点n do for 结点n所用产生式对应的每一条 语义规则 b:=f(c1,c2,…,ck ) do for i:=1 to k do 从结点ci到结点b构造一条有向边;; 带有继承属性L.in的属性文法;c.entry;T;2. 计算顺序 ◆拓扑排序 一个有向非循环图的拓扑排序是图中 结点的任何顺序m1,m2,…,mk,使得 边必须是从序列中前面的结点指向后面的 结点,也就是说,如果mi→mj是mi到mj的 一条边,那么在 序列中mi必须出现在mj的 前面。 ;T;上图的一个拓扑排序是: 1, 2, 3,4,5,6,7,8,9,10 a.entry b.entry c.entry T.type:=real; L.in:= T.type; addtype(c.entry, L.in); L.in := L.in; addtype(b.entry, L.in); L.in := L.in; addtype(a.entry, L.in);; 1 .分析树法 输入串 ? 分析树? 依赖图 ? 计算顺序 ;计算语义规则的方法;在单遍扫描中完成翻译 研究怎样实现这种翻译器,一个一般的属性文法的翻译器可能是很难建立的,然而有一大类属性文法的翻译器是很容易建立的. S-属性文法 适用于自底向上的计算 L-属性文法 适用于自顶向下的计算,也可用于 自底向上。 ; S-属性文法及其自下向

文档评论(0)

克拉钻 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档