首页 > 解决方案 > 是否可以在给定 ANTLR3(.g) 文件的情况下生成 java 访问者类

问题描述

我需要一些指导来解析“.drl”AKA Drools 规则文件。drl 文件由 ANTLR3 语法定义,可在此处找到。我以前使用IntelliJ 的ANTLR v4 语法插件使用 g4 语法,我可以轻松地生成 i)示例文件的解析树和 ii)该特定语法的 visitor.java 文件

我还需要为 ANTLR3 生成上述两个文件,即 i) Sample.drl 文件的解析树ii) DroolsRule.g 的 visitor.java 文件,它可以将 Sample.java 作为解析的输入。

我已尝试按照 Bart Kiers 回答此问题的步骤为 AST 生成 .dot 文件。但是在尝试在步骤 1 中生成词法分析器和解析器时,如前所述

java -cp antlr-3.3.jar org.antlr.Tool Java.g

我收到以下错误

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: antlr/ANTLRException
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: antlr.ANTLRException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

另外,我找不到是否可以生成visitor.java。使用 ANTLR3 的 DroolsRule.g 的类似函数。

标签: javadroolsantlr4abstract-syntax-treeantlr3

解决方案


推荐阅读