java - java 8 是否有与antlr4 一起使用的编译器代码?

标签 java antlr4

我在 GitHub 中找到了来自 antlr4 的存储库,其中包含 Java 8 的完整语法文件,如下所示: https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4

如果我使用antlr4,它将获取语法并创建词法分析器、解析器等。但这不足以复制现有的Java编译器。

我们需要 Java 代码来 Hook antlr4 生成的类(词法分析器、解析器等),以便我们可以将输入源文件转换为字节代码。 GitHub 上有一个名为 minijava 的项目,作者为 Java 的一个子集创建了一个编译器,如下所示: https://github.com/csaroff/MiniJava-Compiler?files=1

是否有类似 minijava 项目的编译器代码,但适用于整个 Java 8 语法?

最佳答案

问题是你想要完成什么。如果您真的想要进入编译器……JDK 是开源的 ( http://download.java.net/openjdk/jdk8/ )。可能不适合 ANTLR,但也许是你最好的选择。另一个选择是来自 eclipse 的 java 编译器,也是开源的。

但是您可能并不真的想摆弄编译器......而只想 Hook 编译过程以生成一些额外的代码?那么 Java 注解处理器 ( https://docs.oracle.com/javase/8/docs/api/javax/annotation/processing/Processor.html ) 就是您所寻找的。

或者也许您想对已经创建的类进行后处理?然后可能会使用一些字节码生成/操作框架(例如 http://jboss-javassist.github.io/javassist/ )。

我认为不存在“包含编译器其余部分的完整 ANTLR 语法”项目。

关于java - java 8 是否有与antlr4 一起使用的编译器代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40283452/

相关文章:

java - 将 Element 对象转换为 Int?

java - getWindowHandles() 在 Firefox 58 中不起作用。焦点保留在父选项卡上,不会转移到下一个选项卡

antlr4 - ANTLR - 用单引号括起来的数字

java - aws lambda 找不到 Gson 类

java - 嵌套迭代器

java - 为什么新文件 ("")不提供现有目录?

java - 如何在 ANTLR4 中生成 AST?

antlr4 - 标签 x 分配给一个不是集合的 block

java - 如何忽略不重要的节点?