网站大量收购独家精品文档,联系QQ:2885784924

编译原理第四章.pptVIP

  1. 1、本文档共111页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 语法制导的翻译 贵州大学 计算机科学与技术学院 语义分析的概念 语法分析并未对程序内部的逻辑含义加以分析,因此编译程序接下来的工作是语义分析,即审查每个语法成分的静态语义。若静态语义正确,则生成与该语言成分等效的中间代码,或直接生成目标代码。 在语义分析时要进行语义检查,动态语义检查需要生成相应的目标代码,它是在运行时进行的,静态语义检查是在编译时完成的,它涉及几个方面: 类型检查:算符运算对象是否相容。 控制流检查:控制流语句必须使控制转移到合法的地方。 唯一性检查:很多场合要求对象只能被定义一次。 关联名字检查:有时,同一名字必须出现两次或多次。 语法与语义 语法是指语言的结构、即语言的“样子”;语义是指附着于语言结构上的实际含意 ,即语言的“意义”。例:猫吃老鼠与老鼠吃猫 语义分析的两个作用: 检查是否结构正确的句子所表示的意思也合法; 执行规定的语义动作,如:表达式求值、符号表填写、 中间代码生成等 语义分析的方法:语法制导翻译 语法制导翻译的基本思想是:文法中的每个符号都有一些编译程序关心的信息,称为文法符号的属性;为文法中的每个产生式给定一组计算相关属性的动作(称语义动作或翻译子程序),在执行语法分析 (使用语法规则进行推倒或归约)的同时,就执行该产生式对应的语义动作进行属性计算。即语法制导翻译是在语法规则的制导下,通过对语义规则的计算,完成对输入符号串的翻译。 本章内容 介绍语义分析方法:语法制导的翻译,包括它的两种具体形式(语义动作/规则和产生式相联系的方式):语法制导的定义和翻译方案 介绍语法制导翻译的实现方法 第四章 语法制导的翻译 4.1 语法制导的定义 4.2 S属性定义的自下而上计算 4.3 L属性定义的自上而下计算 4.4 L属性的自下而上计算 4.1 语法制导的定义(属性文法) 基础文法(上下文无关文法) 每个文法符号有一组属性(与文法符号的类型和值等有关的信息,在编译中用属性描述处理对象的特征) 随着编译的进展,对语法分析产生的语法树进行语义分析,且分析的结果用中间代码描述出来。对于一棵等待翻译的语法树,它的各个节点都是文法的一个符号X,该X可以是终结符或非终结符。根据语义处理的需要,在用产生式A ? ?Xβ进行归约或推导时,应能准确而恰当地表达文法符号X在归约或推导时的不同特征。例如,判断变量X的类型是否匹配,要用X的数据类型来描述;判断变量X是否存在,要用X的存储位置来描述;而对X的运算,则要用X的值来描述。因此,语义分析阶段引入X的属性,如X.type、X.place、X.val等来分别描述变量X的类型、存储位置以及值等不同的特征。 每个文法产生式A ?? 配有一组形式为b := f(c1, c2, …, ck )的语义规则(属性求值规则),其中f 是函数,b和c1, c2, …, ck 是该产生式文法符号的属性 综合属性:如果b是A的属性,c1 , c2 , …, ck 是产生式右部文法符号的属性或A的其它属性,则b是A的综合属性。如:E ? E1 + T {E.val := E1 .val + T.val} 继承属性:如果b是产生式右部某个文法符号X的属性, c1 , c2 , …, ck 是产生式右部文法符号的属性或A的属性,则b是X的继承属性。如:D ? TL {L.in := T.type} 属性b依赖于属性c1,c2,…,ck。属性之间的依赖关系,实质上反映了属性计算的先后次序,即所有属性ci被计算之后才能计算属性b 4.1.2 综合属性 在语法树中,一个结点的综合属性的值由其子结点的属性值确定。(用于“自下而上”传递信息) 使用自底向上的方法在每一个结点处使用语义规则计算综合属性的值 S属性定义:仅仅使用综合属性的语法制导定义 4.1.3 继承属性 在分析树中,一个结点的继承属性由此结点的父结点和/或兄弟结点的某些属性确定(用于“自上而下”传递信息) 用继承属性来表示程序设计语言结构中的上下文依赖关系很方便 4.1.4 属性依赖图 一棵分析树中的结点的继承属性和综合属性之间的相互依赖关系可以由称作依赖图的一个有向图来描述 为每一个包含过程调用的语义规则引入一个虚拟综合属性b,这样把每一个语义规则都写成 b:=f(c1,c2,…,ck) 的形式 依赖图中为每一个属性设置一个结点,如果属性b依赖于属性c,则从属性c的结点有一条有向边连到属性b的结点。 E→E1+E2 E.val:=E1.val+E2.val 句子real id1,id2,id3的带注释的语法树的依赖图 产 生 式 语 义 规 则 D→TL L.in := T.type T→int T.type :=

文档评论(0)

wuyoujun92 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档