在我的DSL中,我想要一个看起来像的代码:
SomeType varName;
SomeType
是Java类。
稍后,如果让我们说SomeType是一个枚举java类,有人写
varName=SOME_VALUE
我想进行验证,看看SomeType.java实际上是否有SOME_VALUE
作为其枚举值。
我看过这个教程
https://eclipse.org/Xtext/documentation/305_xbase.html
但我不确定这是我需要的(我需要导入.mydsl文件,而不仅仅是jvm)。 任何帮助,将不胜感激。 感谢。
答案 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
...