Рассмотрим следующую модель Ecore (в нотации Xcore):
class Foo {
contains Element[] elements
}
class Bar extends Foo {
int n
}
class Element {
String name
}
и следующие правила Xtext:
FooBar: Foo | Bar;
Foo: {Foo} 'foo' '{' elements+=Element (',' elements+=Element)* '}';
Foo: {Bar} 'bar' n=INT '{' elements+=Element (',' elements+=Element)* '}';
Element: {Element} name=ID;
так что текстовые модели выглядят так:
foo {one, two}
bar 2 {three, four}
Есть ли способ реорганизовать повторение в сторону от правил? Я знаю, что мог бы ввести новый EClass ElementContain
и сделать так, чтобы правила для Foo
и Bar
ссылались на его правило, однако это загромоздило бы метамодель.