如何获取令牌的野牛语法规则

时间:2019-07-19 13:17:18

标签: bison bisonc++

假设我有以下规则:

rule1 : TOKEN rule2 TOKEN { printf("Found TOKEN\n") ; }

rule2 : ATOKEN { printf("Found ATOKEN\n") ; }

在这里,输出如下:

Found ATOKEN
Found TOKEN

因为rule2将首先减少。收到TOKEN后,我有什么办法可以打印一些东西?

NB 我知道当它与令牌匹配时,我可以从扫描仪中执行此操作,但是我需要从野牛中打印出来。

1 个答案:

答案 0 :(得分:1)

野牛允许动作在规则之内(称为mid-rule actions)。

在您的示例中,它们可以像这样使用:

rule1 : TOKEN { printf("Found TOKEN 1\n"); } rule2 TOKEN { printf("Found TOKEN\n") ; }

rule2 : ATOKEN { printf("Found ATOKEN\n") ; }

但是您应该仔细阅读文档,看看它是否具有您想要的语义效果。