0

我正在构建一个 Xtext DSL,我想在某些特定位置嵌入 Xbase 表达式,以使用 Xbase 解释器解释我的部分模型,但我无法在生成的编辑器中完成方法。

我重用了此处提供的示例:https ://www.eclipse.org/Xtext/documentation/201_sevenlang_introduction.html ,并设法将 Xbase 集成为我的语法的一部分。关键字完成建议工作正常(即do,,for... while),但我找不到完成 Java/Xbase 方法(例如newArrayList,或myArray.add(X))的方法。 下面的评论澄清:如果我var x = newArrayList在编辑器中编写该方法不是斜体样式,但我也没有任何错误。

这是我正在使用的语法的示例版本:

grammar org.xtext.example.common2.Common2 with org.eclipse.xtext.xbase.Xbase

generate common2 "http://www.xtext.org/example/common2/Common2"
import "http://www.eclipse.org/xtext/xbase/Xbase"

Test returns Test:
    {Test}
    'test'
    expressions+=Script
;

Script returns XBlockExpression:
    {Script}
    '{'
    (expressions+=XExpressionOrVarDeclaration ';'?)*
    '}'
;

我发现如果我将语法更改为以下语法,我可以按预期完成:

grammar org.xtext.example.common2.Common2 with org.eclipse.xtext.xbase.Xbase

generate common2 "http://www.xtext.org/example/common2/Common2"
import "http://www.eclipse.org/xtext/xbase/Xbase"

Test returns XBlockExpression:
    {Test}
    'test'
    expressions+=Script
;

Script returns XBlockExpression:
    {Script}
    '{'
    (expressions+=XExpressionOrVarDeclaration ';'?)*
    '}'
;

我的猜测是所有的树都必须由 XExpression 的实例组成才能完成,但我不明白为什么?对我来说Test不应该是XBlockExpression(在我的实际用例Test中有额外的属性/引用)的子类,但它应该包含一个XBlockExpression.

有没有办法做到这一点?任何帮助/资源都将不胜感激

注意 我已经检查了这个 SO 问题How to embed XBase expressions in an Xtext DSL,我已经xbase.lib在我的构建路径中。

4

0 回答 0