0

假设我有以下规则:

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

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

在这里,输出将如下:

Found ATOKEN
Found TOKEN

因为rule2会先减。有什么方法可以让我一拿到就打印出来TOKEN吗?

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

4

1 回答 1

1

Bison 允许操作在规则内(称为中间规则操作)。

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

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

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

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

于 2019-07-19T13:26:33.193 回答