2013-10-22 24 views
0

Hi Team,
我是Antlr的新手,我花了4天的時間學習,安裝,運行教程並與IDE集成。 :(初始化我的Lexer在Antlr4中拋出錯誤

我可以運行此[教程] [1]在終端成功。我現在的目標是運行NetBeans中的相同教程,AntlrWorks2我已經蠶食了主從[這裏] [2]。

代碼編譯,但是當我跑我得到一個 「java.lang.ExceptionInInitializerError」 由init詞法分析器的

1:http://www.antlr.org/wiki/display/ANTLR4/Getting+Started+with+ANTLR+v4
2:http://www.certpal.com/blogs/2011/01/antlr-tutorial-hello-antlr/

語法:

grammar Split; 

@header { 
    package PlayGround.AutoGen;  
} 

hi  : HELLO ID ;   // match keyword hello followed by an identifier 
ID  : [a-z]+ | [A-Z]+;  // match lower-case identifiers 
WS  : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines 
HELLO : '[H|h]ello'; 

主要:

public class MyMain { 

public static void main(String args[]) { 
    new MyMain().MyAttempt(); 
} 

public void MyAttempt() { 
    try { 
     String string = "Hello World"; 
     CharStream charStream = new ANTLRInputStream(string); 
/*Line 28*/ SplitLexer lex = new SplitLexer(charStream); /*Line 28*/ 
     org.antlr.v4.runtime.CommonTokenStream tokens; 
     tokens = new org.antlr.v4.runtime.CommonTokenStream(lex); 
     SplitParser parser = new SplitParser(tokens); 
     SplitParser.HiContext split = parser.hi(); 
     String toString = split.toString(); 
     System.out.println(toString); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

}

錯誤:

run: 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at PlayGround.MyMain.MyAttempt(MyMain.java:28) 
    at PlayGround.MyMain.main(MyMain.java:21) 
Caused by: java.lang.UnsupportedOperationException: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with version 2 (expected 3). 
    at org.antlr.v4.runtime.atn.ATNSimulator.deserialize(ATNSimulator.java:132) 
    at PlayGround.AutoGen.SplitLexer.<clinit>(SplitLexer.java:78) 
    ... 2 more 
Caused by: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with version 2 (expected 3). 
    ... 4 more 
Java Result: 1 
BUILD SUCCESSFUL (total time: 1 second) 

解答:antlr4: ATN version 2 expected 3

回答

2

這聽起來像可能是版本問題。 ANTLR生成序列化的ATN(增強轉換網絡),它具有特殊的格式,可以從4.0版本變爲4.1版本。從一個版本的命令行生成的加載源代碼和NetBeans中的最新AW2可能會嘗試使用不同的版本讀取它。

+0

是的,我剛剛在這裏找到答案。 http://stackoverflow.com/questions/18180103/antlr4-atn-version-2-expected-3 –

+0

WOAH!剛剛意識到你是誰,謝謝你的迴應。 –

0

「你的解析器是用ANTLR 4.0生成的,但是你試圖用ANTLR 4.1來執行它,最可能的原因是使用ANTLRWorks 2.0生成解析器,它在內部使用ANTLR 4.0。發佈ANTLRWorks 2.1的過程將糾正這種不匹配。「 - 280Z28

Answer is Here

相關問題