【问题标题】:Initialising my Lexer throws an error in Antlr4初始化我的 Lexer 会在 Antlr4 中引发错误
【发布时间】:2013-10-22 19:57:30
【问题描述】:

您好,团队,
我是 Antlr 的新手,我花了 4 天时间尝试学习、安装、运行教程并与我的 IDE 集成。 :(

我可以在终端中成功运行这个 [tutorial][1]。我现在的目标是使用 AntlrWorks2 在 Netbeans 中运行相同的教程,我已经从 [Here][2] 蚕食了 Main。

代码可以编译,但是当我运行时,我从 Lexer 的 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)

回答: antlr4: ATN version 2 expected 3

【问题讨论】:

    标签: java parsing antlr antlr4 antlrworks2


    【解决方案1】:

    听起来可能是版本问题。 ANTLR 生成具有特殊格式的序列化 ATN(增强转换网络),可以从版本更改为版本,如 4.0 到 4.1。有可能您在一个版本中从命令行生成的加载源代码和 NetBeans 中的最新 AW2 正在尝试使用不同版本来读取它。

    【讨论】:

    【解决方案2】:

    “您的解析器是使用 ANTLR 4.0 生成的,但您正在尝试使用 ANTLR 4.1 执行它。最可能的原因是使用 ANTLRWorks 2.0 生成解析器,该解析器在内部使用 ANTLR 4.0。我正在处理中发布 ANTLRWorks 2.1 将纠正这种不匹配。” - 280Z28

    Answer is Here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      相关资源
      最近更新 更多