我想創建我的第一個antlr4語法爲C#和我得到以下異常:ANTLR 4.5.3 C#詞法分析器初始化失敗(ATN UUID錯誤)
System.NotSupportedException:無法使用UUID反序列化ATN使用aadb8d7e-aeef-4415-ad2b-8204d6cf042e(預期的 ab35191a-1603-487e-b75a-479b831eaf6d或傳統的UUID)。在 Antlr4.Runtime.Atn.ATNDeserializer.Deserialize(CHAR []數據)
我的語法是相當簡單的從表達式字符串只是識別號碼和標識符。我只有詞法分析器,因爲我想從文本中獲取標記(數字和單詞),而沒有使用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看到的版本是一樣的版本的罐子:
"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文件並在運行時。
感謝您的澄清。我已經看到你的目標,但我很困惑什麼是官方/推薦版本。你有一些在C#中生成解析器的命令行示例(所有示例都暗示我需要在VS中設置MSBUILD)。目前我不確定是否完全支持dotnet核心,VS 2015 U3和xproj文件,所以它將有助於生成單個命令行生成C#文件。 –
@JovanMSFT我建議使用我的發行版,該發行版經過高度優化,並且與「標準」發行版相比,對於跨版本兼容性有更嚴格的限制。爲了制定xproj文件的構建策略,最好在前面給出的鏈接上的GitHub上打開一個問題。 –