通过野牛规则传递变量信息

时间:2018-05-16 18:58:19

标签: bison

我们说我有以下两条规则:

rule1: names INTEGER    {*do something1*}

names: ID
     | names ID         {*do something2*}

如何在做某事2 操作中包含INTEGER信息? 在这个具体示例中,我想在每个ID旁边打印信息INTEGER(来自名称)。

1 个答案:

答案 0 :(得分:2)

您无法向该方向传递信息。在*do something2*执行时,即在读取每个名称之后,解析器甚至还没有看到整数。整数来自输入中的名称之后,输入从头到尾线性读取 - 前面没有偷看。

因此,如果要将名称与整数一起打印,唯一的方法是在读取整数之后

要实现这一点,您可以使*do something1*将名称存储在数组或其他数据结构中。然后*do something2*可以迭代*do something1*生成的数据结构,并将每个名称与整数一起打印。

你甚至可以更进一步,让你的所有动作都返回AST节点,然后只有在整个输入被解析后才能在AST上进行迭代打印。