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

How to get bison grammar rule for tokens

假设我有以下规则:

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

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

此处,输出如下:

Found ATOKEN
Found TOKEN

因为rule2会先减少。有什么方法可以让我在收到 TOKEN 后立即打印一些东西吗?

N.B 我知道当它与令牌匹配时我可以从扫描仪做到这一点,但我需要从野牛打印它。

Bison 允许在规则内执行操作(称为 mid-rule actions)。

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

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

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

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