Xtext перекрестные ссылки не работают правильно? - PullRequest
0 голосов
/ 02 мая 2020

В моем 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

    ]
}

Ниже выреза я хочу, чтобы в качестве опций отображались только fi sh и meat.

Я читал о перекрестных ссылках, но могу ' заставить его работать при использовании enum для ограничения ввода пользователя.

1 Ответ

0 голосов
/ 02 мая 2020

Xtext может ссылаться на вещи только с name s. у вас нет name с, у вас есть ingredient_name. также имена должны быть Strings по умолчанию. => Вы должны реализовать IQualifiedNameProvider (обычно это подкласс DefaultDeclarativeQualifiedNameProvider`) https://www.dietrich-it.de/xtext/2011/07/16/iqualifiednameproviders-in-xtext-2-0.html

...