Xtext:从 MyDsl 引用 Java class
Xtext: Reference a Java class from MyDsl
在我的 DSL 中,我想要一个如下所示的代码:
SomeType varName;
其中 SomeType
是 Java class。
稍后,如果假设 SomeType 是一个枚举 java-class,并且有人写
varName=SOME_VALUE
我想进行验证以查看 SomeType.java 是否确实将 SOME_VALUE
作为其枚举中的值。
我看到了这个教程
https://eclipse.org/Xtext/documentation/305_xbase.html
但我不确定这是我需要的(我需要导入 .mydsl 文件,而不仅仅是 jvm)。
任何帮助,将不胜感激。
谢谢。
如果要引用 Java 类型,请使用 org.eclipse.xtext.xbase.Xtype
作为超级语法。然后你可以写一个像
这样的规则
VariableDeclaration:
type=JvmTypeReference name=ValidID ';';
表达你的代码示例。
如果你也想表达赋值,我建议使用 org.eclipse.xtext.xbase.Xbase
作为超级语法(它继承自 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
...
在我的 DSL 中,我想要一个如下所示的代码:
SomeType varName;
其中 SomeType
是 Java class。
稍后,如果假设 SomeType 是一个枚举 java-class,并且有人写
varName=SOME_VALUE
我想进行验证以查看 SomeType.java 是否确实将 SOME_VALUE
作为其枚举中的值。
我看到了这个教程
https://eclipse.org/Xtext/documentation/305_xbase.html
但我不确定这是我需要的(我需要导入 .mydsl 文件,而不仅仅是 jvm)。 任何帮助,将不胜感激。 谢谢。
如果要引用 Java 类型,请使用 org.eclipse.xtext.xbase.Xtype
作为超级语法。然后你可以写一个像
VariableDeclaration:
type=JvmTypeReference name=ValidID ';';
表达你的代码示例。
如果你也想表达赋值,我建议使用 org.eclipse.xtext.xbase.Xbase
作为超级语法(它继承自 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
...