首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展Java语法的最简单方法是什么(卫生的宏)

问扩展Java语法的最简单方法是什么(卫生的宏)
EN

Stack Overflow用户
提问于 2011-12-15 05:14:54
回答 2查看 507关注 0票数 3

我正在寻找一种扩展java语法的方法,基本上我想实现lispish“宏”系统,在那里我可以有一个预处理器,可以在编译时修改AST。

插入java编译器的最简单方法是什么,以便我可以根据自己的语法扩展修改AST,以便编译器仍然能够捕获类类型转换异常等等。我也想阅读AST,并根据发现的内容对其进行修改。基本上,我想在java中使用卫生的宏。

我知道project lombok,但据我所知,这几乎是唯一一个扩展了AST的库/项目,但我想要做的是更复杂一点。

我为什么要这样做?我想尝试用Java添加一个模式匹配语法,类型推断,真正可读的函数语法等等。

EN

回答 2

Stack Overflow用户

发布于 2011-12-15 05:29:35

我不知道COTS Java编译器是否会配合您扩展它的语法。我认为它不会重新生成源代码,但是如果你只想在展开宏后编译程序,你可能并不关心。

如果您想扩展语法,您可能至少需要一个解析器生成器,即grammer for Java,然后开始修改。ANTLR也可以,而且我相信它有一个可用的Java语法。您需要构建一个漂亮的打印机来重新生成宏解析的代码,并将其提供给编译器;我不认为ANTLR提供了这个现成的功能。

作为一个实际问题,我怀疑您可能需要符号表信息,以便Hygen宏可以在扩展时进行检查和调整。在这种情况下,您可能会得到一个开放源码的Java编译器(Jikes)并修改它。可能的情况是,这样的开放源码编译器不符合最新的Java标准。

如果想要一些合理最新东西,可以解析Java,可以修改语法,并具有完整的符号表支持,您可以考虑我们的DMS Software Reengineering Toolkit及其Java Front End。DMS提供解析、树构建、符号表构建、对AST的过程性访问/修改、美观的打印以重新生成源代码,以及您为DMS定义的语法(如果您将它们的语法添加到Java语法中,则包括您的生成宏)的源代码到源代码的转换。

票数 1
EN

Stack Overflow用户

发布于 2013-12-03 23:28:00

如果您正在使用Eclipse IDE,您可以查看Eclipse Xtend项目。

它支持通过active annotations使用自定义宏扩展Java。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8511738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档