0

こんにちはチーム、
私は Antlr を初めて使用し、学習、インストール、チュートリアルの実行、および IDE との統合に 4 日間を費やしました。:(

この [チュートリアル][1] をターミナルで正常に実行できます。私の目標は、AntlrWorks2 を使用して Netbeans で同じチュートリアルを実行することです。[Here][2] から Main を共食いしました。

コードはコンパイルされますが、実行すると、レクサーの init から「java.lang.ExceptionInInitializerError」が発生します。

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)

ANSWER: antlr4: ATN バージョン 2 予想 3

4

2 に答える 2

2

バージョンの問題があるようです。ANTLR は、4.0 から 4.1 のようにバージョンごとに変更できる特別な形式を持つシリアル化された ATN (拡張遷移ネットワーク) を生成します。あるバージョンのコマンドラインから生成された読み込み中のソース コードを、NetBeans の最新の AW2 が別のバージョンで読み込もうとしている可能性があります。

于 2013-10-23T01:38:52.560 に答える
0

「あなたのパーサーは ANTLR 4.0 で生成されましたが、ANTLR 4.1 で実行しようとしています。これの最も可能性の高い原因は、内部で ANTLR 4.0 を使用するパーサーを生成するために ANTLRWorks 2.0 を使用していることです。私は ANTLRWorks をリリースしている最中です。 2.1 はこの不一致を修正します。」- 280Z28

答えはここにあります

于 2013-10-23T02:07:35.997 に答える