1

Xtext2.0をMWE1とXPandで使用していますが、MWE2とXTendの問題はまったく同じだと思います。

私のXtext文法は次のようになります(抜粋):

grammer org.test.Test with org.eclipse.xtext.common.Terminals
generate test "http://www.test.org/test/Test

Model :
    "COMMON STUFF" 
    "{"
    (formatterDefs+=FormatterDef)*
    "}"
    ...

FormatterDef : "Formatter" name=ID  ":" formatter=STRING;

このmwe定義を使用する場合(抜粋):

<component class="org.eclipse.xtext.mwe.Reader" path="${project.src.directory}/xtext/model/" >      
    <register class="org.test.TestStandaloneSetup"/>        
<load slot='formatterDefs' type='FormatterDef'/>        
</component>

<component class="org.eclipse.xpand2.Generator">
    <metaModel class="org.eclipse.xtend.typesystem.emf.EmfRegistryMetaModel"/>
    <expand value="templates::Formatter::formatterTxt FOREACH formatterDefs"/>
</component>

したがって、スロットformatterDefsはすべてで埋められFormaterDef、これがテンプレートに使用され、すべての思考が正常に機能します。

Modelしかし、文法で名前が付けられたモデルルート要素を必要とするテンプレートがいくつかあります。だから使ってみた

<load slot='formatterDefs' type='FormatterDef'/>

<expand value="templates::Main::main FOREACH model"/>

代わりは。

しかし、私はこの警告を受け取ります:

org.eclipse.xtext.mwe.SlotEntry-タイプ「モデル」のエクスポートされた要素が見つかりませんでした->スロット「モデル」は空です。

そして、スロットには空のリストが含まれています。

だから私の質問は:私のテンプレートにルートを取得するために、私は何をする必要がありますか?Model

4

4 に答える 4

1

IQualifiedNameProviderをカスタマイズして、モデルに名前を付けることができます。

〜クリスチャン

于 2011-10-18T19:19:15.863 に答える
1

私は次のような意味でした

public class MyDslNameProvider extends DefaultDeclarativeQualifiedNameProvider {

    QualifiedName qualifiedName(Model m) {
        return QualifiedName.create(m.eResource().getURI().toString());
    }
}

public class MyDslRuntimeModule extends
                          org.xtext.example.mydsl.AbstractMyDslRuntimeModule {

    @Override
    public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() {
        return MyDslNameProvider.class;
    }   
}
于 2011-10-19T17:41:30.373 に答える
1

おそらく最善の方法は{Model}、ルールの最初にテキストを挿入して、確実に作成することです。

于 2011-10-23T17:06:15.753 に答える
0

解決策は、モデルの文法定義にIDを追加することでした。

Model : name = ID
  "COMMON STUFF" 
  "{"
  (formatterDefs+=FormatterDef)*
  "}"

以前は既存のModel要素がなかったことを理解しているため、IDを追加した後、Idを含むようにModel要素を作成する必要があります。

どんなに良い解決策があるかもしれません-それが投稿されたらすぐに私はそれを受け入れます。

于 2011-10-12T09:58:34.970 に答える