我有一个代码生成器,它采用语法树并将其转换为源文件(文本)。
基本上,它遍历树的所有节点,将节点映射到文本,并将生成的文本追加到StringBuilder
。
现在我希望节点使用Xtend来实现文本映射器,如下所示:
public class NodeXMapper
{
private XtendRunner xtendRunner = ...;
public String map(final NodeX aNode)
{
return xtendRunner.runScript("def String map(NodeX aNode) {
''' «aNode.fieldX» - «aNode.fieldY» '''
}", aNode);
}
}
xtendRunner.runScript(String aScript, final Object... aParams)
是一个方法,它将参数aParams
传递给Xtend脚本aScript
并返回结果。
我该如何实施该方法?
更新1: Here我发现这段代码似乎在Java中运行Xtend代码:
// setup
XtendFacade f = XtendFacade.create("my::path::MyExtensionFile");
// use
f.call("sayHello",new Object[]{"World"});
但是我在Eclipse的 Type hiearchy 视图中找不到XtendFacade
类。
答案 0 :(得分:2)
您找到的解释器是针对旧的Xtend1语言,而不是您正在寻找的语言。
您要引用的新Xtend已编译,因此没有解释器。
但是,您可以使用Xbase构建解释的表达式语言。 See the documentation and Github有关如何执行此操作的示例。然后,您可以从Java运行表达式语言的解释器。