Antlr 在 idea 中正确使用的方式

Posted dsj2016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Antlr 在 idea 中正确使用的方式相关的知识,希望对你有一定的参考价值。

问题

Caused by: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with UUID 59627784-3be5-417a-b9eb-8131a7286089 (expected aadb8d7e-aeef-4415-ad2b-8204d6cf042e or a legacy UUID).

原因

目前我使用的idea是2017版本.导致其支持的antlr插件只有1.8.4.这个插件版本会使用antlr的4.7.8版本生成编译器代码.如果项目中maven依赖的antlr版本不是这个.就会如上述报错.而如果idea使用1.8.0版本的antlr插件.就会因为idea版本和插件版本不对应,而无法使用.

报错的具体原因是antlr在运行的时候会校验通过.g4文件生成的编译器和执行时的antlr版本是否一致:

if (!SUPPORTED_UUIDS.contains(uuid)) {
    String reason = String.format(Locale.getDefault(), "Could not deserialize ATN with UUID %s (expected %s or a legacy UUID).", uuid, SERIALIZED_UUID);
    throw new UnsupportedOperationException(new InvalidClassException(ATN.class.getName(), reason));
}

解决办法

使用命令行编译.g4文件生成class

antlr4 DecisionRule.g4 -o {编译结果输出目录} -listener -visitor -package {编译结果包}

其中-listener是是否生成listener的开关,默认就是打开的,所以不用管.而如果代码中使用了visitor,则需要加上:-visitor这个参数.

以上是关于Antlr 在 idea 中正确使用的方式的主要内容,如果未能解决你的问题,请参考以下文章

ANTLR4 在 IDEA 中使用 ANTLR 与 Java 程序集成

1.ANTLR4 helloworld基础开发与IDEA插件使用

1.ANTLR4 helloworld基础开发与IDEA插件使用

SparkIntelliJ IDEA中语法解析工具ANTLR v4的安装及语法解析

SparkIntelliJ IDEA中语法解析工具ANTLR v4的安装及语法解析

SparkIntelliJ IDEA中语法解析工具ANTLR v4的安装及语法解析