【问题标题】:Xtext: Reference a Java class from MyDslXtext:从 MyDsl 引用 Java 类
【发布时间】:2016-11-01 11:03:47
【问题描述】:

在我的 DSL 中,我想要一个如下所示的代码:

SomeType varName;

SomeType 是一个 Java 类。

稍后,假设 SomeType 是一个枚举 java 类,并且有人写

varName=SOME_VALUE

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

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

【问题讨论】:

  • 这个问题很不具体。简单地用 xbase 做一些实验怎么样?

标签: java enums reference xtext xbase


【解决方案1】:

如果您想要引用 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
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多