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

时间:2011-12-14 21:14:54

标签: java syntax macros code-generation abstract-syntax-tree

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

插入java编译器的最简单方法是什么,以便我可以根据我的个人语法扩展修改AST,这样编译器仍然可以捕获类转换异常等等。我还想阅读AST并根据找到的内容进行修改。基本上我想要使用java的卫生宏。

我知道project lombok,但这几乎只是我知道的实际上扩展AST的库/项目,但我想做的事情有点复杂。

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

2 个答案:

答案 0 :(得分:1)

我不知道COTS Java编译器是否会与您合作尝试扩展其语法。我不认为它会重新生成源代码,但是如果你只是想在扩展宏之后编译程序,你可能不在乎。

如果你想扩展语法,你可能至少要得到一个解析器生成器,Java的语法,并开始乱砍。 ANTLR会这样做,我相信它有一个Java语法可用。您需要构建一个prettyprinter来重新生成宏解析代码以提供给编译器;我不认为ANTLR提供现成的产品。

实际上,我怀疑你会想要符号表信息,卫生宏可以随着它们的扩展进行检查和调整。在这种情况下,您可能会获得一个开源Java编译器(Jikes)并将其破解。可能是这种开源编译器不符合最新的Java标准。

如果想要合理更新的东西,解析Java,会让你破解语法,并且拥有完整的符号表支持,你可以考虑我们的DMS Software Reengineering Toolkit及其Java Front End。 DMS提供解析,树构建,符号表构造,AST的程序访问/修改,重新生成源的精心打印,以及您为DMS定义的语法的源到源转换(包括您的hygenic宏,如果您将其语法添加到Java语法)。

答案 1 :(得分:1)

如果您使用的是Eclipse IDE,则可以查看Eclipse Xtend项目。

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