Xtext 验证器 - 检查所有元素 X 以进行元素 Y 验证
Xtext validator - check all elements X for element Y validation
我在这里试图找出是否有人知道我如何在我的语法中制作一个验证器来检查我的步骤是否仅使用我之前在 'ingredients+=Ingredient+' 中声明的成分
我已经尝试了很多但都没有成功,我不知道如何才能获得在我的验证器函数中声明的所有成分。
为您准备好。
这是我语法的相关部分。
Model:
recipe+=Recipe*;
...
Ingredient:
'ingredient' (
(liquid_name=LIQUID_INGREDIENTS_NAME liquid_measure=LIQUID_TYPES_MEASURE)
|
(solid_Name=SOLID_INGREDIENTS_NAME solid_measure=SOLID_TYPES_MEASURE)
)
quantity=INT;
Step:
'['
action=ACTION_TYPES
('ingredient' ((ingredient_StepLiquid=LIQUID_INGREDIENTS_NAME)|(ingredient_StepSolid=SOLID_INGREDIENTS_NAME)) | 'place' place=TM_PLACES | 'utensil' utensil=TM_UTENSILS)
('time' minutes=INT ':' seconds=INT ',')?
('speed' velocidade=SPEED_TYPES ',')?
('temperature' temp=TM_TEMPS 'ºC')?
']';
Recipe:
'recipe' recipeName=STRING '{'
ingredients+=Ingredient+
steps+=Step+
'}';
正如@Christian Deitrich所说
我可以使用 eContainer,并通过我的步骤或通过我的语法在交叉引用的帮助下获得我的食谱。
我在这里试图找出是否有人知道我如何在我的语法中制作一个验证器来检查我的步骤是否仅使用我之前在 'ingredients+=Ingredient+' 中声明的成分 我已经尝试了很多但都没有成功,我不知道如何才能获得在我的验证器函数中声明的所有成分。
为您准备好。
这是我语法的相关部分。
Model:
recipe+=Recipe*;
...
Ingredient:
'ingredient' (
(liquid_name=LIQUID_INGREDIENTS_NAME liquid_measure=LIQUID_TYPES_MEASURE)
|
(solid_Name=SOLID_INGREDIENTS_NAME solid_measure=SOLID_TYPES_MEASURE)
)
quantity=INT;
Step:
'['
action=ACTION_TYPES
('ingredient' ((ingredient_StepLiquid=LIQUID_INGREDIENTS_NAME)|(ingredient_StepSolid=SOLID_INGREDIENTS_NAME)) | 'place' place=TM_PLACES | 'utensil' utensil=TM_UTENSILS)
('time' minutes=INT ':' seconds=INT ',')?
('speed' velocidade=SPEED_TYPES ',')?
('temperature' temp=TM_TEMPS 'ºC')?
']';
Recipe:
'recipe' recipeName=STRING '{'
ingredients+=Ingredient+
steps+=Step+
'}';
正如@Christian Deitrich所说
我可以使用 eContainer,并通过我的步骤或通过我的语法在交叉引用的帮助下获得我的食谱。