代码之家  ›  专栏  ›  技术社区  ›  Jack Edmonds

我怎样才能让一个flex扫描器返回bison的错误标记?

  •  1
  • Jack Edmonds  · 技术社区  · 15 年前

    Bison使用一个特殊的错误标记(称为“错误”),可以在Bison解析器中使用它来从错误中恢复。有没有办法从flex生成的扫描仪返回这个特定的令牌?

    1 回复  |  直到 12 年前
        1
  •  1
  •   Patrick    15 年前

    “错误”标记不是真正的标记。它仅用于错误处理。

    http://dinosaur.compilertools.net/yacc/index.html 您可以阅读:令牌名错误是为错误处理保留的,不应天真地使用。

    在我自己的解析器中,我使用这样的错误标记(要解析类似C的宏语言:

    StatementList  :
                   |  StatementList Statement ';'
                   |  error ';'
    

    如果用户出错,yacc/bison将继续执行,直到下一个分号(语句结束),然后继续执行下一个语句。