使用属性语法装饰解析树

时间:2011-10-13 03:06:12

标签: parsing grammar parse-tree

给定类型声明的以下属性语法,我需要能够为任何给定的字符串生成一个解析树,例如“A,B:C;”,然后装饰树。

我通常可以为简单的属性语法执行此操作,并且当显而易见的属性是什么时,我无法解释out_tabin_tab是什么。是的,这是我的作业,我不是要求解决方案,我要求就这些属性的含义以及可能帮助我的例子提供指导。

decl -> ID decl_tail
    decl.t := decl_tail.t
    decl_tail.in_tab := insert(decl,in_tab, ID.n, decl_tail.t)
    decl.out_tab := decl_tail.out_tab
decl_tail -> , decl
    decl_tail.t := decl.t
    decl.in_tab := decl_tail.in_tab
    decl_tail.out_tab := decl.out_tab
decl_tail -> : ID ;
    decl_tail.t := ID.n
    decl_tail.out_tab := decl_tail.in_tab

1 个答案:

答案 0 :(得分:2)

几年后,我希望你能完成你的家庭工作:)

关于你的运动:

decl.tdecl_tail.t是合成的属性,用于复制类型名称(ID.n)并为解析树中的每个父作品传递

当达到生产decl -> ID decl_tail时,in_tab attributte会保留一种标识符和类型之间的关系列表(不清楚in_tab的类型,但我们可以假设元组列表(identifier; type))。此属性是继承的,因此列表将开始在最顶层的生产(最左边的标识符)中构建,并继续从左到右构建它并在最右边的标识符中完成它。

然后在达到decl_tail -> : ID;时完成列表的构建,因此使用合成属性(out_tab)将结果再次合成到起始符号。

这张图是我能够做的最好的绘制装饰树和图依赖:

enter image description here

蓝色箭头是t属性的合成,绿色箭头是in列表的构造方式,红色箭头是结果如何合成到初始符号