0

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

SomeType varName;

SomeTypeJava 类在哪里。

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

varName=SOME_VALUE

我想做一个验证,看看 SomeType.java 是否真的SOME_VALUE在它的枚举中有一个值。我看到了这个教程 https://eclipse.org/Xtext/documentation/305_xbase.html

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

4

1 回答 1

1

如果您想要引用 Java 类型,请使用org.eclipse.xtext.xbase.Xtypeas super-grammar。然后你可以写一个规则

VariableDeclaration:
    type=JvmTypeReference name=ValidID ';';

表达您的代码示例。

如果您还想表达分配,我建议使用org.eclipse.xtext.xbase.Xbaseas super-grammar(它继承自 Xtype)并在您想从 Java 中引用元素的任何地方使用 XExpression 规则,例如

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

为了使事情更容易,您还可以将 XExpression 用于变量声明(XVariableDeclaration 是一种特殊的 XExpression)和赋值(XAssignment 是另一种特殊的 XExpression)。这将允许编写类似的东西

{
    var SomeType varName
    varName = SomeType.SOME_VALUE
}

一次调用 XBlockExpression(用大括号括起来的复合表达式):

MyFunkyRule:
    ...
    expressionBlock=XBlockExpression
    ...
于 2016-11-03T09:09:42.393 回答