繁体   English   中英

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

[英]What is the easiest way to extend Java syntax (hygienic macros)

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

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

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

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

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

它支持通过活动注释使用自定义宏扩展Java。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM