2015-03-12 4 views
0

Рассмотрим следующую Ecore модель (в Xcore обозначениях):Ecore EClass в XText

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 ссылаются на его правило, однако это загромождает метамодель.

ответ

1

в целом: нет. но если единственным отличием является первым ключевым словом:

FooBar: 
({Foo} 'foo' | {Bar}'bar') '{' elements+=Element (',' elements+=Element)* '}'; 
Element: {Element} name=ID; 
+0

Так что, если существуют контексты, где 'Bar' имеет смысл, но' Foo' не, я в значительной степени обязан использовать композицию вместо или в дополнение к наследование? –

+0

Да. Нет шаблонов/фрагментов для правил грамматики. Не стесняйтесь подавать запрос на улучшение в Eclipse Bugzilla –