假设我有以下规则:
rule1 : TOKEN rule2 TOKEN { printf("Found TOKEN\n") ; }
rule2 : ATOKEN { printf("Found ATOKEN\n") ; }
在这里,输出将如下:
Found ATOKEN
Found TOKEN
因为rule2
会先减。有什么方法可以让我一拿到就打印出来TOKEN
吗?
注意我知道当它与令牌匹配时我可以从扫描仪中做到这一点,但我需要从野牛打印它。
Bison 允许操作在规则内(称为中间规则操作)。
在您的示例中,它们可以像这样使用:
rule1 : TOKEN { printf("Found TOKEN 1\n"); } rule2 TOKEN { printf("Found TOKEN\n") ; }
rule2 : ATOKEN { printf("Found ATOKEN\n") ; }
但是您应该仔细阅读文档,看看这是否具有您想要的语义效果。