java - Eclipse 的 ecj 编译器可扩展吗?

标签 java eclipse compiler-construction ecj

我对修改 Java 语法和一些隐式范例感兴趣。由于我使用 Eclipse 进行开发,它提供了自己的编译器,也可以独立使用,所以我想知道是否无法扩展 ecj 以遵守其他语法规则(并正确处理它们)。

我的语法更改都可以通过从 AST 中删除元素并创建一些新元素来解决,因此我认为我想要做的事情是可能的,而无需深入研究字节码。

本质上,我想要做的事情可以通过在实际编译之前“虚拟”修改源代码来完成。但我怀疑这样做会弄乱源映射,这会让调试变得很困难。

旁注:我知道 Lombok 项目,它扩展并改变了类编译,但是严格来说,Lombok 仅使用注释,并且不修改语法。所以我想做的是对语言规范更具侵入性。

最佳答案

正如评论中提到的对象团队:

(1) Object Teams 本身针对自己的语言扩展了 JDT OT/J这是Java的扩展。这是通过双重策略完成的:

  • 我们维护 fork org.eclipse.jdt.core 的。虽然这是相当繁重的工作,但它成功地证明了 JDT 架构适合修改。
  • 我们使用自己的概念 role objects以非侵入方式调整 IDE 其他部分(尤其是 org.eclipse.jdt.ui)的行为以反射(reflect) OT/J 的语义

(2) 我有一些(旧的)博客文章,演示了如何使用 OT/J 创建 JDT 的非侵入性变体,包括对扩展语法的支持:

免责声明:我是 OT/J 的作者及其实现的领导者,后来成为 Eclipse JDT 的提交者。

如有其他问题,请访问 forum .

关于java - Eclipse 的 ecj 编译器可扩展吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60170365/

相关文章:

java - 如何获取引用的项目或库的名称?

java - 在基于 tomcat 的 jersey 应用程序中使用 spring 核心功能

Python sh 导入导致 PyDev 中出现 Unresolved 导入错误

eclipse - 如何在eclipse中制作 "open resource"对话框只找到*.js文件,而不是*.jsp?

.net - 在库 : How to add DLL reference to component when component is located in project hosting the library? 中进行代码内编译

error-handling - 如何在Bison中防止默认 “syntax error”

c# - 为什么编译器不能弄清楚这一点? (特性)

java - DAO 接口(interface)、类和工厂

java - 如何获得可被第一个随机数整除的偶数/奇数随机数

java - 只有一种方法可以创建给定的子组件是通过 plus() 创建的