【发布时间】:2020-03-08 19:28:46
【问题描述】:
所以我花了一整天的时间试图弄清楚如何使用 ANTLR。我有一堆 Java 源代码文件。我的目标是使用 ANTLR 为每个文件创建一个 AST。最后,AST 将被转换为 JSON,因此使用像 python 这样的动态语言来解析它们会更容易。转换将使用topic 中的解决方案(尽管如果有人有更好的解决方案,我会很高兴听到)。我设法在getting-started 页面中运行了基本示例。现在我试图弄清楚如何为我的一个 Java 源代码文件创建一个 AST。正如getting-started 页面中所说,我可以为此使用Java grammar。我已经下载了JavaParser.g4 和JavaLexer.g4。我试着跑了:
java -Xmx500M -cp "/p/antlr-4.8-complete.jar:$CLASSPATH" org.antlr.v4.Tool JavaParser.g4
但我得到了错误:
JavaParser.g4:32:21: cannot find tokens file ./JavaLexer.tokens
我想我需要以某种方式创建该文件,但从文档中我无法理解如何创建该文件。所以我试图在 Github 中找到那个文件,我找到了它here。我已经下载了,看起来还不错:
java -Xmx500M -cp "/p/antlr-4.8-complete.jar:$CLASSPATH" org.antlr.v4.Tool JavaParser.g4
javac JavaP*.java // Also tried javac Java*.java
java -Xmx500M -cp "/p/antlr-4.8-complete.jar:$CLASSPATH" org.antlr.v4.gui.TestRig JavaParser r -gui
但我明白了:
Exception in thread "main" java.lang.ClassCastException: class JavaParser
at java.lang.Class.asSubclass(Class.java:3404)
at org.antlr.v4.gui.TestRig.process(TestRig.java:135)
at org.antlr.v4.gui.TestRig.main(TestRig.java:119)
不确定我做错了什么,或者我是否在做正确的事情以解决我的问题。
我要做的就是创建文件/tmp/file.java 的AST,我什至不确定应该将它包含在命令中的哪个位置。
所以我的问题是:
- 如何为文件
/tmp/file.java创建 AST? - 是否可以在不实际编写 Java 代码的情况下创建 AST 文件?我看到很多地方他们建议编写 Java 代码并使用 Maven 或其他工具进行编译。如果可能,我宁愿不这样做,而是使用命令行选项。
- JSON 主题(上面提到的)更新已经有一段时间了。有什么改变吗?是否可以在不实际运行 Java 的情况下创建 JSON 报告?
如您所见,我真的很困惑,所以感谢您的帮助!
编辑:一个小小的说明 - 我不需要 AST 图像,而是创建 JSON 报告。如果没有简单的方法可以做到这一点,我确信 ANTLR 有一些原始文件,其中包含我可以解析并将其转换为 JSON 的信息。不过,原始数据在哪里?
【问题讨论】:
标签: java antlr antlr4 abstract-syntax-tree