xtext,导入我自己的mydsl文件
Xtext, import my own mydsl file
在我的语法中,我有一个包含规则如下:
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")
}
不包括 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
}
}
在我的语法中,我有一个包含规则如下:
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")
}
不包括 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
}
}