给定类型声明的以下属性语法,我需要能够为任何给定的字符串生成一个解析树,例如“A,B:C;”,然后装饰树。
我通常可以为简单的属性语法执行此操作,并且当显而易见的属性是什么时,我无法解释out_tab
和in_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
答案 0 :(得分:2)
几年后,我希望你能完成你的家庭工作:)
关于你的运动:
decl.t
和decl_tail.t
是合成的属性,用于复制类型名称(ID.n
)并为解析树中的每个父作品传递
当达到生产decl -> ID decl_tail
时,in_tab
attributte会保留一种标识符和类型之间的关系列表(不清楚in_tab
的类型,但我们可以假设元组列表(identifier; type)
)。此属性是继承的,因此列表将开始在最顶层的生产(最左边的标识符)中构建,并继续从左到右构建它并在最右边的标识符中完成它。
然后在达到decl_tail -> : ID;
时完成列表的构建,因此使用合成属性(out_tab
)将结果再次合成到起始符号。
这张图是我能够做的最好的绘制装饰树和图依赖:
蓝色箭头是t
属性的合成,绿色箭头是in
列表的构造方式,红色箭头是结果如何合成到初始符号