首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >初始化我的Lexer会在Antlr4中引发一个错误

初始化我的Lexer会在Antlr4中引发一个错误
EN

Stack Overflow用户
提问于 2013-10-22 19:57:30
回答 2查看 4K关注 0票数 0

大家好,

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

我可以在终端成功运行本教程。我现在的目标是用AntlrWorks2在Netbeans上运行同样的教程,我已经从这里吃了主板。

代码会编译,但是当我运行时,我会从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/)

语法:

代码语言:javascript
运行
复制
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';

Main:

代码语言:javascript
运行
复制
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();
    }
}

}

错误:

代码语言:javascript
运行
复制
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

EN

Stack Overflow用户

回答已采纳

发布于 2013-10-23 01:38:52

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

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19527137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档