首页 理论教育 编译原理与实践:综合属性的计算方法及简单例子

编译原理与实践:综合属性的计算方法及简单例子

时间:2023-11-17 理论教育 版权反馈
【摘要】:我们已经知道,综合属性的计算采用的是自下而上的方法,也就是说,语法树中一个结点的综合属性的值由其子结点的属性值来确定。通常把仅仅使用综合属性的属性文法称为S-属性文法。为了说明综合属性在语法树上的处理过程,下面给出一个使用和计算综合属性的简单例子。当在结点T处应用语义规则时,从左子结点得到T1.value的值为3,从右子结点得到F.value值为5,因此,在该结点中算得T.value的值为15。

编译原理与实践:综合属性的计算方法及简单例子

我们已经知道,综合属性的计算采用的是自下而上的方法,也就是说,语法树中一个结点的综合属性的值由其子结点的属性值来确定。通常把仅仅使用综合属性的属性文法称为S-属性文法。为了说明综合属性在语法树上的处理过程,下面给出一个使用和计算综合属性的简单例子。

例6.1 假设有一个表达式3*5+4,后跟符号#,由表6-1中的文法可知,该表达式的执行结果将打印出数值19。图6-1给出了输入串3*5+4#的带注释的语法树,在该语法树的树根处打印结果,其值为树根第一个子结点E.value的值。

图6-1 3*5+4#的带注释的语法树(www.xing528.com)

上述结果的计算过程是:首先考虑最底层最左边的内部结点F,它对应于产生式F→digit,相应的语义规则为F.value:=digit.lexvalue。由于其子结点digit的属性lexvalue的值为3,因此F.value的值也为3。同理,F的父结点T的属性value的值也是3。

再考虑产生式T→T1*F所对应的结点T,该产生式对应的语义规则为T.value:=T1.value*F.value。当在结点T处应用语义规则时,从左子结点得到T1.value的值为3,从右子结点得到F.value值为5,因此,在该结点中算得T.value的值为15。其他结点的计算与上述过程类似,最后,产生式L→E#所对应的语义规则打印出E的值。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈