代码之家  ›  专栏  ›  技术社区  ›  pm100

为什么C语言生成的ANTLR抛出非存在异常?

  •  0
  • pm100  · 技术社区  · 8 年前

    antlr4 4.7.1在parse.cs文件中生成一行

    throw new RuntimeException("UNEXPECTED_CHAR=" + (_localctx._UNEXPECTED_CHAR!=null?_localctx._UNEXPECTED_CHAR.Text:null));
    

    例外不存在。手工编辑生成的代码很容易解决这个问题,但是每次迭代grammer edit都有点烦人。

    像这样使用内置的C支持

    java -jar c:\tools\antlr-4.7.1-complete.jar -Dlanguage=CSharp -visitor SQLite.g4
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   sepp2k    8 年前

    这一行不是来自antlr,而是来自您正在使用的语法文件。

    假设你正在使用 SQLite.g4 from the grammars-v4 repository ,罪魁祸首是 error 第37-42行的规则:

    error
     : UNEXPECTED_CHAR 
       { 
         throw new RuntimeException("UNEXPECTED_CHAR=" + $UNEXPECTED_CHAR.text); 
       }
    ;
    

    因此,您可以通过编辑语法以包含C代码而不是Java代码或根本不包含任何嵌入代码来解决问题(只需删除 错误 规则(以及它使用的一个实例)。