Ecore EClass继承在Xtext中

时间:2015-03-12 15:20:13

标签: inheritance xtext ecore

考虑以下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引用它的规则,然而,这会使元模型混乱。

1 个答案:

答案 0 :(得分:1)

一般来说:没有。但如果唯一的区别是第一个关键字:

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