我想在XText的帮助下从 Gate 构建对 jape 语言的工具支持。Jape 基本上是一种超越注解的模式语言;您声明遇到这些注释时要采取的操作。问题是动作可以用java编写。在与 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);
}
}
任何帮助将不胜感激