- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 属性文法和语法制导翻译;编译程序的功能和组织结构;本章学习内容;第六章 属性文法和语法制导翻译;6.1 属性文法;6.1 属性文法; 继承属性和综合属性
例:
E → P P.env := E.env;
E.val := P.val;
E1 → P+E2 P.env := E1.env
E2.env := E1.env
E1.val :=P.val+E2.val
P → n P.val :=n.val
P → id P.val :=Lookup(P.env,id.name)
P → (E) E.env := P.env
P.val := E.val;6.1 属性文法;6.1 属性文法;例6.1 计算器程序的属性文法(表6.1);6.1 属性文法;综合属性
只使用综合属性的属性文法称为S-属性文法。
在语法树中,一个结点的综合属性的值由其子结点的属性值确定。
综合属性值的计算正好可以和自下而上分析建立分析树结点的过程同步。
例 6 .2 输入:3*5+4n;digit?lexval:=3; ◆综合属性值的计算方法
对于s-???性定义
通常使用自下而上的分析方法;继承属性
继承属性值是由此结点的父结点和/或兄弟结点的某些属性值来决定的。
例 文法
D?TL T ?int | real L ?L1,id | id
描述说明语句中各种变量的类型信息的语义规则如下:; 表6.2 带有继承属性L.in的属性文法;分析real i1, i2, i3; 翻译的任务:对语法结构进行静态语义分析和正确性检查,若正确,则翻译成中间代码或目标代码。
使用的方法:语法制导翻译。
语法制导翻译: 由源程序的语法结构所驱动的翻译方式。;6.2 语法制导翻译的概述; 6.3 S-属性文法的自下向上的计算;增加属性值栈,属性值放到与符号栈同步操作的属性值栈中,当Si对应的符号为Xi时,Val[i]中就存放与Xi对应的属性值。分析栈结构为:; 6.3 S-属性文法的自下向上的计算;计算器程序的属性文法(表6.1);符号栈;例 简单算术表达式求值的属性文法
L →E {print(E.val)}
E→E1+T { E.val :=E1.val +T.val }
E→T { E.val :=T.val }
T→T1*digit { T.val :=T1.val * digit.lexval }
T→digit { T.val :=digit.lexval }?;步骤;6.3 S-属性文法的自下向上的计算;6.3 S-属性文法的自下向上的计算
文档评论(0)