解析 – 使用属性语法装饰解析树

给定类型声明的以下属性语法,我需要能够为任何给定的字符串生成一个解析树,例如“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

最佳答案 几年后,我希望你完成你的家庭工作:)

关于你的运动:

decl.t和decl_tail.t是合成的属性,它们复制Type名称(ID.n)并为解析树中的每个父作品传递它

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

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

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

《解析 – 使用属性语法装饰解析树》

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

点赞