Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 初始化我的Lexer会在Antlr4中抛出一个错误_Java_Parsing_Antlr_Antlr4_Antlrworks2 - Fatal编程技术网

Java 初始化我的Lexer会在Antlr4中抛出一个错误

Java 初始化我的Lexer会在Antlr4中抛出一个错误,java,parsing,antlr,antlr4,antlrworks2,Java,Parsing,Antlr,Antlr4,Antlrworks2,大家好, 我是Antlr的新手,我花了4天时间学习、安装、运行教程并与我的IDE集成( 我可以在终端中成功运行此[tutorial][1]。我现在的目标是使用AntlrWorks2在Netbeans中运行相同的教程,我从[Here][2]中拆下了主教程。 代码可以编译,但是当我运行时,我从Lexer的init中得到一个“java.lang.ExceptionInInitializerError” 1: 2:) 语法: grammar Split; @header { package

大家好,
我是Antlr的新手,我花了4天时间学习、安装、运行教程并与我的IDE集成(

我可以在终端中成功运行此[tutorial][1]。我现在的目标是使用AntlrWorks2在Netbeans中运行相同的教程,我从[Here][2]中拆下了主教程。

代码可以编译,但是当我运行时,我从Lexer的init中得到一个“java.lang.ExceptionInInitializerError”

1:
2:)

语法:

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';
主要内容:

}

错误:

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)
运行:
线程“main”java.lang.ExceptionInInitializeError中出现异常
MyMain.mytrunt(MyMain.java:28)
在操场上.MyMain.main(MyMain.java:21)
原因:java.lang.UnsupportedOperationException:java.io.InvalidClassException:org.antlr.v4.runtime.atn.atn;无法反序列化版本为2(应为3)的ATN。
反序列化(ATNSimulator.java:132)
在操场上.AutoGen.SplitLexer.(SplitLexer.java:78)
... 还有两个
原因:java.io.InvalidClassException:org.antlr.v4.runtime.atn.atn;无法反序列化版本为2(应为3)的ATN。
... 4更多
Java结果:1
生成成功(总时间:1秒)


回答:

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

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


是的,我在这里找到了答案。
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)