为什么antlr for c#会生成代码抛出不存在的异常

时间:2018-06-29 17:21:34

标签: antlr4

ANTLR4 4.7.1在parse.cs文件中生成一行,内容为

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

该异常不存在。手动编辑生成的代码很容易解决,但是每次语法编辑器的迭代都非常烦人。

像这样使用内置的c#支持

java -jar c:\tools\antlr-4.7.1-complete.jar -Dlanguage=CSharp -visitor SQLite.g4

1 个答案:

答案 0 :(得分:1)

该行不是来自ANTLR,而是您正在使用的语法文件。

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

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

因此,您可以通过编辑语法来解决该问题,该语法要么包含C#代码而不是Java代码,要么根本不包含任何嵌入式代码(只需删除error规则(一个实例就可以了)一起使用)。