【问题标题】:Xtext cross-references not working correctly?Xtext 交叉引用不能正常工作?
【发布时间】:2020-05-02 14:53:25
【问题描述】:

在我的 dsl 中,我尝试了以下操作:

grammar org.xtext.example.mydsl.Recipe with org.eclipse.xtext.common.Terminals

generate recipe "http://www.xtext.org/example/mydsl/Recipe"


Model:
    recipe=Recipe;


enum Ingredients:
    Meat | Fish | Rice
;

enum Steps_Type:
    Cut | Boil | Prepare
;

Recipe:
    'Recipe'
    '{'
    ingredient+=Ingredient+
    step+=Step+
    '}'
;

Ingredient:
    'ingredient' ingredient_name=Ingredients quantity=INT ('kg' | 'g')
;

Step:
    '['
    step=Steps_Type
    ingredient=[Ingredient]
    ']'
;

我的问题出在台阶上。我只想显示我在食谱上声明的成分。 例如,如果我这样做:

Recipe {
    ingredient Fish 1 kg
    ingredient Meat 2kg
    [
        Cut

    ]
}

下切我只希望鱼和肉作为选项出现。

我已经阅读了有关交叉引用的信息,但是在使用枚举来限制用户输入时我无法让它工作。

【问题讨论】:

    标签: xtext cross-reference


    【解决方案1】:

    Xtext 只能引用 names 的内容。你没有names,你有ingredient_name。默认情况下,名称也必须是字符串。 => 你必须实现IQualifiedNameProvider(通常是 DefaultDeclarativeQualifiedNameProvider` 的子类)https://www.dietrich-it.de/xtext/2011/07/16/iqualifiednameproviders-in-xtext-2-0.html

    【讨论】:

    • 我怎样才能做到这一点?我尝试将 name 和 [Ingredient] 的成分名称切换为 [Ingredient|STRING] 我必须在语法之外实现代码吗?
    • 这不是我的意思:name=ID 和 ref=[Ingredient] 或者你只是实现 IQualifiedNameProvider
    • 你能举个例子吗?我有点迷路了
    • 如果我有一个 ID,我可以让它工作,但我不想使用一个
    • 再次:实现 IQualifiedNameProvider(并使用数据类型规则来处理来自枚举的关键字)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多