4

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

1 回答 1

3

几年后,我希望你能很好地完成你的家庭作业:)

关于你的锻炼:

decl.t并且decl_tail.t是复制类型名称 ( ID.n) 并将其传递给解析树中的每个父产生式的合成属性

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

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

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

在此处输入图像描述

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

于 2013-10-31T04:56:31.137 回答