2016-12-14 16 views
0

我想創建我的第一個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文件並在運行時。

回答

1

從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

+0

感謝您的澄清。我已經看到你的目標,但我很困惑什麼是官方/推薦版本。你有一些在C#中生成解析器的命令行示例(所有示例都暗示我需要在VS中設置MSBUILD)。目前我不確定是否完全支持dotnet核心,VS 2015 U3和xproj文件,所以它將有助於生成單個命令行生成C#文件。 –

+0

@JovanMSFT我建議使用我的發行版,該發行版經過高度優化,並且與「標準」發行版相比,對於跨版本兼容性有更嚴格的限制。爲了制定xproj文件的構建策略,最好在前面給出的鏈接上的GitHub上打開一個問題。 –

相關問題