admin 管理员组文章数量: 1086019
2024年4月15日发(作者:澳大利亚核潜艇)
中国科学技术大学陈意云编译原理全套参考资料chapter4
第四章 语法制导的翻译
在3.7节用Yacc写的例子中,我们看到一种有用的描述形式:语言结构的属性附加在
代表语言结构的文法符号上,这些属性值由附加在文法产生式的语义动作来计算,这些语
义动作在归约对应的产生式时进行计算,由此得到结果。这种描述形式可用来描述编译器
的语义分析,因此本章系统地研究这种称之为“语法制导下的语言翻译”的描述方法及其
实现。它的语义动作(有时称为语义规则)的计算可以产生代码、把信息存入符号表、显示
出错信息、或完成其它工作。语义规则的计算结果就是我们所要的记号流的翻译。
本章讨论语义规则和产生式相联系的两种方式:语法制导的定义和翻译方案。语法制
导定义是较抽象的翻译说明,它隐蔽了一些实现细节;而翻译方案陈述了一些实现细节,
主要是指明了语义规则的计算次序。在第五章说明语义检查和第七章描述中间代码生成
时,大量使用这两种方法。
本章还讨论语法制导定义和翻译方案的实现方法。概念上的方法是,首先分析输入的
记号串,建立分析树,然后从分析树得到描述结点属性间依赖关系的有向图,从这个依赖
图得到语义规则的计算次序,然后进行计算,最终得到翻译的结果。实际的实现并不需要
按上面步骤逐步进行,本章将讨论几种不同限制下的实现方法。
4.1 语法制导的定义
语法制导的定义是上下文无关文法的推广,其中每个文法符号都有一个属性集合,它
分成两个子集,分别叫做该文法符号的综合属性集合和继承属性集合。如果我们把分析树
上的结点看成是保存对应文法符号的属性的记录,那么属性对应记录的域。属性可以表示
任何东西:串、数、类型、内存单元,或其它想表示的东西。分析树结点的属性值由该结
点所用产生式的语义规则定义。在语法制导定义中,我们把其中的文法称为基础文法。
本节介绍语法制导定义的形式及其概念上的实现模型。
4.1.1 语法制导定义的形式
在语法制导定义中,每个文法符号有一组属性,每个文法产生式A , ,有一组形式为
b := f (c, c, …, c )的语义规则,其中f 是函数,b和c, c, …, c 是该产生式的文法符号的
12k12k
属性,并且:
(1) 如果b是A的属性,c , c , …, c 是产生式右部文法符号的属性或A的其它属12k
性,那么b叫做文法符号A的综合属性。
(2) 如果b是产生式右部某个文法符号X的属性,c , c , …, c 是A的属性或右部12k
文法符号的属性,那么b叫做文法符号X的继承属性。
版权声明:本文标题:中国科学技术大学陈意云编译原理全套参考资料chapter4 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713173526a622471.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论