ANTLR 4.5.3 C# 词法分析器无法初始化(ATN UUID 错误)

ANTLR 4.5.3 C# lexer fails to initialize (ATN UUID error)

我正在尝试为 C# 创建我的第一个 antlr4 语法,但出现以下异常:

System.NotSupportedException: Could not deserialize ATN with UUID aadb8d7e-aeef-4415-ad2b-8204d6cf042e (expected ab35191a-1603-487e-b75a-479b831eaf6d or a legacy UUID). at Antlr4.Runtime.Atn.ATNDeserializer.Deserialize(Char[] data)

我的语法相当简单,只是从表达式字符串中识别数字和标识符。我只有词法分析器语法,因为我想从文本中获取标记(数字和单词),而没有一些 AST。它在初始化时立即失败:

lexer = new MyLexer(new AntlrInputStream("3"));

// fails in this line in constructor: Interpreter = new LexerATNSimulator(this,_ATN);

我没有为 VS 使用 Antlr 语言支持,因为我使用的是 dotnet 核心,其中我有 .xproj 而不是 .csproj,所以我不确定它是否受支持.但是,我认为这没有什么区别,因为我使用的是命令行:

java -jar antlr-4.5.3-complete.jar -Dlanguage=CSharp MyLexer.g4

我已经添加了 4.5.3 nuget 包,我可以在 project.json 中看到版本与 jar 版本相同:

"dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0",
      "type": "platform"
    },
    "Antlr4": "4.5.3"  
}
...
}

我也尝试过预发布版,但我遇到了同样的错误。

我在 java 版本中发现了类似的问题:Initialising my Lexer throws an error in Antlr4 但是,它在我的 C# 案例中无济于事,因为 ANTLR 版本不匹配存在问题,在这里我使用 4.5.3 生成 .cs 文件和运行时。

随 antlr.org 的 ANTLR 版本一起分发的 C# 目标是我原来的 C# 目标的一个分支,它不会生成与我通过 NuGet 分发的官方 C# 目标兼容的 C# 代码。您需要使用通过 NuGet 分发的代码生成器(在 4.5.3 的 Antlr4 包中,但在 4.5.4 中移动到 Antlr4.CodeGenerator)才能在运行时运行。

另外,请记住,堆栈溢出不是我密切监视的 C# 目标的支持渠道。在大多数情况下,如果您有问题、错误报告或增强请求,您会希望在 GitHub 上创建问题: https://github.com/tunnelvisionlabs/antlr4cs