- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)