Xtext,导入我自己的mydsl文件

时间:2016-12-28 15:05:23

标签: java xtext xtend

在我的语法中,我有一个包含规则如下:

Script:
    includes+=(Include)* assignments+=(Assignment)* clock=Clock? tests+=Test*
;

Include:
    'INCLUDE' importURI=STRING
;

我想要做的是包含与" main"相同的文件。文件。

我正在处理一个关于.mydsl文件的interpreter

/* Main exec methode  */

def dispatch void exec(Script s) {

    s.includes.forEach[ i | i.exec]  
    s.assignments.forEach[a | a.exec]
    s.clock.exec
    s.tests.forEach[t|t.exec]
}

/* include methode */
def dispatch void exec(Include i) {

    System.out.println( i.importURI + " included")

}

1 个答案:

答案 0 :(得分:0)

Xtext导入不包括在内。 Xtext根本不支持包含。 Xtext支持的所有内容都是交叉引用。您可以使用基于命名空间或导入基于uri的全局范围来确定如何找到其他文件中的元素。假设您确实想要在解释器中跟踪包含文件

Script:
    includes+=(Include)*
;

Include:
    'INCLUDE' includedScript=[Script|STRING]
;

名称提供者

public class MyDslQNP extends DefaultDeclarativeQualifiedNameProvider {

    QualifiedName qualifiedName(Script script) {
        return QualifiedName.create(script.eResource().getURI().trimFileExtension().lastSegment(), script.eResource().getURI().fileExtension());
    }

}

然后您可以在翻译中跟踪参考

class MyDslRuntimeModule extends AbstractMyDslRuntimeModule {

    override bindIQualifiedNameProvider() {
        MyDslQNP
    }

}