正在加载图片...
China-pub.com 第6章语义分析 207 下载 在显示属性值时,也可以通过使用抽象语法树代替分析树进行简化。抽象语法树通常必须 用足够的结构来表达属性文法定义的语义。例如表达式(34-3)*42,其分析树和属性在图 6-2中已给出,通过图6-5的抽象语法树也能完全表达它的语义。 如下一个例子所示,语法树自身也可以用属性文法指定,这并不奇怪。 (6al=31*42=1302 (al=343=3) 0a兰3yoa3 图6-534-3)*42的抽象语法树,显示表6-2或表6-5中属性文法的val属性计算 例6.5给定例6.2的简单整数表达式文法,通过表6-6给出的属性文法可以定义表达式的抽象语 法树。在这个属性文法中,我们使用了两个辅助函数mkOpNode和mkNumNode。mkOpNode函 数有3个参数(一个操作符记号和两个语法树)并构成一个新的树节点,其操作符记号是第1个参 数,子节点是第2个和第3个参数。mkNumNode函数有一个参数(数字值)并构成一个叶子节点, 它表示具有这个值的一个数。在表6-6中我们把数字值写作number.lexval,表示它是由扫描器 构成的。事实上,根据不同的实现,这可以是实际的数字值,或用它的字符串表示(比较表66 中的等式和附录B中TINY语法树递归下降构造)。 表66简单整型算术表达式的抽象语法树的属性文法 文法规则 语义规则 ep,一ep,+tem exp,tree- mkOpNode (+exptree,term.tree) ep,一ep,-term exp tree mkOpNode (-exp,tree,term.tree) exp→erm exp.tree term.tree 1erm→erm,*factor mkOpNode (term,treefactor ee erm一factor factor.tree exp.tree jactor.tree= mkNumNode (number.lexval) 如何确保一个特定的属性文法是一致的和完整的,是使用属性文法的属性说明的一个主要 问题,也就是说,它能唯一定义给定的属性。简单的答案是到目前为止还不能做到。这个问题 与确定一个文法是否是二义的类似。实际上,这是用来确定一个文法充分性的分析算法,类似 的情形发生在属性文法的情况中。因此,下一节将研究属性计算的算法规则方法,确定一个属 性文法是否足够能定义属性值。 6.2属性计算算法 这一节将以属性文法为基础,研究编译程序中如何计算和使用由属性文法的等式定义的属 在显示属性值时,也可以通过使用抽象语法树代替分析树进行简化。抽象语法树通常必须 用足够的结构来表达属性文法定义的语义。例如表达式 ( 3 4 - 3 ) * 4 2,其分析树和v a l属性在图 6 - 2中已给出,通过图6 - 5的抽象语法树也能完全表达它的语义。 如下一个例子所示,语法树自身也可以用属性文法指定,这并不奇怪。 图6-5 ( 3 4 - 3 ) * 4 2 的抽象语法树,显示表6 - 2或表6 - 5中属性文法的v a l属性计算 例6.5 给定例6 . 2的简单整数表达式文法,通过表6 - 6给出的属性文法可以定义表达式的抽象语 法树。在这个属性文法中,我们使用了两个辅助函数 m k O p N o d e和m k N u m N o d e。m k O p N o d e函 数有3个参数(一个操作符记号和两个语法树 )并构成一个新的树节点,其操作符记号是第 1个参 数,子节点是第2个和第3个参数。m k N u m N o d e函数有一个参数(数字值)并构成一个叶子节点, 它表示具有这个值的一个数。在表 6 - 6中我们把数字值写作n u m b e r.l e x v a l,表示它是由扫描器 构成的。事实上,根据不同的实现,这可以是实际的数字值,或用它的字符串表示 (比较表6 - 6 中的等式和附录B中T I N Y语法树递归下降构造)。 表6-6 简单整型算术表达式的抽象语法树的属性文法 文 法 规 则 语 义 规 则 e x p1 → e x p2 + t e r m e x p1 .t re e = m k O p N o d e (+, e x p2 .t re e, t e r m. t re e) e x p1 → e x p2 - t e r m e x p1 .t re e = m k O p N o d e (-, e x p2 .t re e,t e r m. t re e) exp → t e r m e x p.t ree = t e r m.t re e t e r m1 → t e r m2 * f a c t o r t e r m1 .t ree = m k O p N o d e (*, t e r m2 .t re e,f a c t o r .t re e) t e r m → f a c t o r t e r m.t ree = f a c t o r. t re e f a c t o r → ( exp ) f a c t o r.t re e = e x P. t re e f a c t o r → n u m b e r f a c t o r.t ree = m k N u m N o d e (n u m b e r.l e x v a l) 如何确保一个特定的属性文法是一致的和完整的,是使用属性文法的属性说明的一个主要 问题,也就是说,它能唯一定义给定的属性。简单的答案是到目前为止还不能做到。这个问题 与确定一个文法是否是二义的类似。实际上,这是用来确定一个文法充分性的分析算法,类似 的情形发生在属性文法的情况中。因此,下一节将研究属性计算的算法规则方法,确定一个属 性文法是否足够能定义属性值。 6.2 属性计算算法 这一节将以属性文法为基础,研究编译程序中如何计算和使用由属性文法的等式定义的属 第 6章 语 义 分 析 2 0 7 下载
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有