Eclipse 的 ecj 编译器是可扩展的吗?
Is Eclipse's ecj compiler extensible?
我有兴趣修改 Java 语法和一些隐式范例。由于我使用 Eclipse 进行开发,它提供了自己的编译器,也可以独立使用,所以我想知道是否无法扩展 ecj 以遵守额外的语法规则(并正确处理它们)。
我的语法更改都可以通过从 AST 中删除元素并创建一些新元素来解决,因此我假设我想做的事情无需深入研究字节码即可实现。
本质上,我想做的事情可以通过'virtually'在实际编译之前修改源代码来完成。但是我怀疑这样做会弄乱源映射,这会使调试变得很糟糕。
旁注:我知道 Lombok 项目,它扩展和更改了 class 编译,但是 Lombok 仅使用注释,严格来说不修改语法。所以我想做的是对语言规范更具侵入性。
由于评论中提到了对象团队:
(1) Object Teams 本身为自己的语言 OT/J 扩展了 JDT,这是 Java 的扩展。这是在双重策略中完成的:
- 我们维持 org.eclipse.jdt.core 的 fork。虽然这是一项相当繁重的工作,但它成功地证明了 JDT 体系结构适合修改。
- 我们使用我们自己的 role objects 概念来非侵入性地 适应 IDE 其他部分的行为(特别是 org.eclipse.jdt.ui ) 来反映 OT/J
的语义
(2) 我有几篇(较旧的)博客文章演示了如何使用 OT/J 创建 JDT 的非侵入性变体,包括对扩展语法的支持:
- IDE for your own language embedded in Java? (part 1)
- IDE for your own language embedded in Java? (part 2)
- Get for free what Coin doesn’t buy you
免责声明:我是 OT/J 的作者并领导其实现,后来成为 Eclipse JDT 的提交者。
如需更多问题,请联系 forum。
我有兴趣修改 Java 语法和一些隐式范例。由于我使用 Eclipse 进行开发,它提供了自己的编译器,也可以独立使用,所以我想知道是否无法扩展 ecj 以遵守额外的语法规则(并正确处理它们)。
我的语法更改都可以通过从 AST 中删除元素并创建一些新元素来解决,因此我假设我想做的事情无需深入研究字节码即可实现。
本质上,我想做的事情可以通过'virtually'在实际编译之前修改源代码来完成。但是我怀疑这样做会弄乱源映射,这会使调试变得很糟糕。
旁注:我知道 Lombok 项目,它扩展和更改了 class 编译,但是 Lombok 仅使用注释,严格来说不修改语法。所以我想做的是对语言规范更具侵入性。
由于评论中提到了对象团队:
(1) Object Teams 本身为自己的语言 OT/J 扩展了 JDT,这是 Java 的扩展。这是在双重策略中完成的:
- 我们维持 org.eclipse.jdt.core 的 fork。虽然这是一项相当繁重的工作,但它成功地证明了 JDT 体系结构适合修改。
- 我们使用我们自己的 role objects 概念来非侵入性地 适应 IDE 其他部分的行为(特别是 org.eclipse.jdt.ui ) 来反映 OT/J 的语义
(2) 我有几篇(较旧的)博客文章演示了如何使用 OT/J 创建 JDT 的非侵入性变体,包括对扩展语法的支持:
- IDE for your own language embedded in Java? (part 1)
- IDE for your own language embedded in Java? (part 2)
- Get for free what Coin doesn’t buy you
免责声明:我是 OT/J 的作者并领导其实现,后来成为 Eclipse JDT 的提交者。
如需更多问题,请联系 forum。