1

我想在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);
    }
}

任何帮助将不胜感激

4

1 回答 1

2

您应该尝试为您的语言实现 JvmModelInferrer,在其中添加隐式可用变量作为推断类型中的字段或操作参数。那会成功的。该方法在xtext.org上的 7 个语言示例中有很好的记录

于 2012-08-14T21:48:34.883 回答