1

XTextを使用して、ゲートからjape言語のツールサポートを構築したいと思います。Japeは基本的に注釈上のパターン言語です。これらの注釈に遭遇したときに実行するアクションを宣言します。問題は、アクションをJavaで記述できることです。しばらくの間jdtで苦労した後、解析されたコンテンツの一部でjdtを機能させることができませんでした。そこで私はあきらめて、XBlockExpressionでxbaseサポートを使用することにしました。

問題は、アクションで使用できるいくつかの変数があることです。たとえば、バインドしてからパターンから注釈を取得できる変数バインディングがあります。だから私の質問は、xblockスコープにそれらの変数を登録する方法です。ドキュメントを3時間読んだ後、私はまだどこにも近づいていません。

これが私の問題の最小限の文法です

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.xbase.Xbase

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

Model:
    greetings=Greeting;


Greeting:
    block=XBlockExpression;

次のような内容のファイルを解析したい:

{
    val testAS = bindings.get("test") as AnnotationSet
}

私は自分のスコーププロバイダーを接続することから始めましたが、それはあまり役に立ちませんでした。プロバイダーの実装は次のとおりです。

package org.xtext.example.mydsl;

import java.util.List;

public class MyScopeProvider extends XbaseScopeProvider {

    XbaseFactory factory = new XbaseFactoryImpl();

    @Override
    public IScope getScope(EObject context, EReference reference) {
        //System.err.println(context);
        //System.err.println(reference);
        List<IValidatedEObjectDescription> descriptions = Lists.newArrayList();
        XVariableDeclaration variableDeclaration = factory
                .createXVariableDeclaration();
        variableDeclaration.setName("bindings");
        IValidatedEObjectDescription variableDescription = createLocalVarDescription(variableDeclaration);

        System.err.println(variableDescription);

        IScope scope = super.getScope(context, reference);
        System.err.println(variableDeclaration);
        return new JvmFeatureScope(scope, "test", descriptions);
    }
}

どんな助けでもありがたいです

4

1 に答える 1

2

推論された型のフィールドまたは操作引数として暗黙的に使用可能な変数を追加する言語に JvmModelInferrer を実装するようにしてください。それはトリックを行います。このアプローチは、xtext.orgの 7 つの言語の例で適切に文書化されています。

于 2012-08-14T21:48:34.883 に答える