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的继承属性。


本文标签: 文法 属性 语义 描述 定义