Xtext:从MyDsl引用Java类

时间:2016-11-01 11:03:47

标签: java enums reference xtext xbase

在我的DSL中,我想要一个看起来像的代码:

SomeType varName;

SomeType是Java类。

稍后,如果让我们说SomeType是一个枚举java类,有人写

varName=SOME_VALUE

我想进行验证,看看SomeType.java实际上是否有SOME_VALUE作为其枚举值。 我看过这个教程 https://eclipse.org/Xtext/documentation/305_xbase.html

但我不确定这是我需要的(我需要导入.mydsl文件,而不仅仅是jvm)。 任何帮助,将不胜感激。 感谢。

1 个答案:

答案 0 :(得分:1)

如果要引用Java类型,请使用org.eclipse.xtext.xbase.Xtype作为超级语法。然后你可以写一个像

这样的规则
VariableDeclaration:
    type=JvmTypeReference name=ValidID ';';

表达您的代码示例。

如果你还想表达作业,我建议使用org.eclipse.xtext.xbase.Xbase作为超级语法(继承自Xtype)并使用XExpression规则在任何你想引用Java元素的地方,例如。

VariableAssignment:
    variable=[VariableDeclaration|ValidId] '=' expression=XExpression;

为了简化操作,您还可以使用XExpression进行变量声明(XVariableDeclaration是一个特殊的XExpression)和赋值(XAssignment是另一个特殊的XExpression)。这样可以写出像

这样的东西
{
    var SomeType varName
    varName = SomeType.SOME_VALUE
}

只需调用XBlockExpression(由大括号括起的复合表达式):

MyFunkyRule:
    ...
    expressionBlock=XBlockExpression
    ...