【问题标题】:Bison one or more occurrences in grammar file野牛在语法文件中出现一次或多次
【发布时间】:2015-05-27 23:04:00
【问题描述】:

我需要解析的程序应该是这样的:

program   : [declaration]+
          ;

这应该意味着:程序由一个或多个声明组成。 轮到声明当然以类似的方式定义,依此类推...

目前,我在 Bison 解析器的 + 上遇到错误。 如何使用 bison 以正确的方式定义 一个或多个 条件?

【问题讨论】:

    标签: parsing compiler-construction bison


    【解决方案1】:

    显然,

    Bison 不支持用 + 或 * 符号来表示这些东西。

    我是如何解决的:

    program     : declarations
            ;
    
    declarations    : declaration declarations
            | declaration
            ;
    

    【讨论】:

    • 这不是一个或多个,而是零个或多个。对于一个或多个你想用声明替换/* empty */
    • 此解决方案是右递归的,这不是使用 LALR(1) 解析器的正确方法。它应该是左递归的。
    【解决方案2】:

    一个或多个:

    declarations
        : declaration
        | declarations declaration
        ;
    

    零个或多个:

    declarations
        : /* empty */
        | declarations declaration
        ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      相关资源
      最近更新 更多