2014-10-17 42 views
2

我有一個代碼生成器,它需要一個語法樹並將其轉換爲源文件(文本)。如何從Java調用Xtend代碼?

基本上,它遍歷樹的所有節點,將節點映射到文本並將結果文本附加到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"}); 

但在型我找不到XtendFacade類hiearchy視圖的Eclipse 。

+0

https://www.eclipse.org/forums/index.php/t/648897/ – 2014-10-17 08:21:19

+0

@ KonstantinV.Salikhov謝謝。該鏈接的答案是「簡單的解釋器示例包含在簡單的 算術示例中」。我在Eclipse的示例項目中找不到簡單的算術示例。它在哪裏? – 2014-10-17 08:28:22

+0

我想這是在這裏:https://github.com/eclipse/xtext/tree/master/examples/org.eclipse.xtext.xtext.ui.examples/contents/org.eclipse.xtext.example.arithmetics.ui – 2014-10-19 09:02:21

回答

2

你找到的解釋器是用於舊的Xtend1語言,這不是你正在尋找的。

你所指的新Xtend是編譯的,所以沒有解釋器。

但是,您可以使用Xbase構建解釋式表達式語言。 See the documentationand Github舉例說明如何做到這一點。然後你可以從Java運行你的表達式語言的解釋器。