可以Xtext"分解"它生成具有多重继承的Ecore模型时的功能?

时间:2017-10-31 10:44:22

标签: xtext ecore

如果我有以下语法:

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

WithX:
    A | B | C;

A:
    "a" x=INT y=INT;

B:
    "b" x=INT y=INT;

C:
    "c" x=INT;

然后Xtext将生成以下Ec​​ore模型,其中包含一个很好的超类来分解x

Ecore model generated from the first grammar

但是,如果我在语法中添加规则以分解y

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

WithX:
    A | B | C;

WithY:
    A | B ;

A:
    "a" x=INT y=INT;

B:
    "b" x=INT y=INT;

C:
    "c" x=INT;

然后生成的Ecore模型不再对任何特征进行分解:

Ecore model generated from the second grammar

是否有任何等待x WithXy中的WithY获取:

1 个答案:

答案 0 :(得分:0)

我刚刚回答了我自己的问题。我只需在WithXWithY之间添加关系:

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

WithX:
    WithY | C;

WithY:
    A | B ;

A:
    "a" x=INT y=INT;

B:
    "b" x=INT y=INT;

C:
    "c" x=INT;

它现在生成:

Ecore model generated from fixed grammar

华友世纪:)