我使用JAVACC来解析由bnf语法定义的带有初始非终结符G的某些字符串。
我想捕获TokenMgrError引发的错误。
我特别要处理以下两种情况:

  • 如果输入的某些前缀满足G,但不是从输入中读取了所有符号,则将此情况视为正常情况,并通过调用G()返回AST作为找到的前缀。
  • 如果输入的前缀不满足G,则从G()返回null。

  • 目前,在每种情况下,我都得到TokenMgrError。
    我开始修改生成的文件(即,将Error更改为Exception并添加适当的try/catch/throws语句),但是我发现它很乏味。另外,无法自动生成由JAVACC生成的修改文件。有没有更聪明的方式来做到这一点?

    最佳答案

    您始终可以通过包含以下内容消除所有TokenMgrErrors:

    <*> TOKEN : { <UNEXPECTED: ~[] > }
    

    作为最终规则。这会将您所有的问题推到语法级别,您通常可以更轻松地处理它们。

    关于error-handling - 忽略JAVACC中的MSGTokenError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17848241/

    10-12 19:43