【摘要】:用继承属性表示程序设计语言结构中的上下文依赖关系很方便。其中,T.type是综合属性,其值由说明中的类型关键字确定;id.entry用来指向符号表中标识符id的入口;语义规则L.inherit:=T.type用来把说明中的类型赋值给继承属性L.inherit。表6-2说明语句的属性文法以语句“real id1,id2,id3”为例,其带注释的语法树如图6-2所示。id1、id2、id3的类型分别由其父节点L的属性inherit给出。
继承属性的计算采用的是自上而下的方法,也就是说,语法树中一个结点的继承属性的值由其父结点和(或)兄弟结点的属性值来确定。用继承属性表示程序设计语言结构中的上下文依赖关系很方便。下面给出一个使用和计算继承属性的简单例子。
例6.2 对于类似“int i,j,k”或“real r,s,t”形式的说明语句,该例通过继承属性将类型信息提供给变量声明中的各个标识符,相应的属性文法如表6-2所示。其中,T.type是综合属性,其值由说明中的类型关键字确定;id.entry用来指向符号表中标识符id的入口;语义规则L.inherit:=T.type用来把说明中的类型赋值给继承属性L.inherit。然后,利用语义规则把继承属性L.inherit沿着语法树往下传,而过程addtype则把每个标识符的类型填入符号表的相应表项中。
表6-2 说明语句的属性文法
(www.xing528.com)
以语句“real id1,id2,id3”为例,其带注释的语法树如图6-2所示。id1、id2、id3的类型分别由其父节点L的属性inherit给出。为了确定这三个属性值,需要先求出树根的左子结点的属性值T.type,然后在根的右子树中自上而下计算三个L结点的属性inherit的值。在每个结点L处还要调用过程addtype,以达到往符号表中插入标识符类型信息的目的。
图6-2 real id1,id2,id3的带注释的语法树
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。