【问题标题】:How to get bison grammar rule for tokens如何获得标记的野牛语法规则
【发布时间】:2019-07-19 13:17:18
【问题描述】:

假设我有以下规则:

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

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

在这里,输出将如下:

Found ATOKEN
Found TOKEN

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

注意我知道当它与 TOKEN 匹配时我可以通过扫描仪执行此操作,但我需要从 bison 打印它。

【问题讨论】:

    标签: bison bisonc++


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 现在它正在按我的意愿工作。我稍后会检查语义错误。感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多