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);
}
}
どんな助けでもありがたいです