这个问题似乎很明显,但我只是从Xtext
开始。
因此,在创建xtext项目并运行mydsl.xtext
文件之后
它启动了一个新的eclipse迭代。我在一个新项目中创建一个新的.mydsl文件。但我不知道接下来该做什么!如何运行.mydsl
文件?
我如何使用我的DSL
??
创建DSL
后,所有Xtext教程都会停止,并且不会显示如何使用它。
我正在关注the 15 minutes Xtext tutorial
我的代码是eclipse给出的hello字代码,此时没有什么特别之处。
答案 0 :(得分:1)
如果你想让java main读取模型并执行生成器,你可以查看这个片段
package org.eclipse.xtext.example.domainmodel;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.xtext.generator.GeneratorContext;
import org.eclipse.xtext.generator.GeneratorDelegate;
import org.eclipse.xtext.generator.IGeneratorContext;
import org.eclipse.xtext.generator.JavaIoFileSystemAccess;
import org.eclipse.xtext.util.CancelIndicator;
import org.eclipse.xtext.validation.CheckMode;
import org.eclipse.xtext.validation.IResourceValidator;
import org.eclipse.xtext.validation.Issue;
import com.google.common.collect.Lists;
import com.google.inject.Injector;
/**
* @author dietrich - Initial contribution and API
*/
public class Main {
public static void main(String[] args) {
// TODO traverse directory
List<String> files = Lists.newArrayList("model/a.dmodel", "model/b.dmodel");
Injector injector = new DomainmodelStandaloneSetup().createInjectorAndDoEMFRegistration();
ResourceSet rs = injector.getInstance(ResourceSet.class);
ArrayList<Resource> resources = Lists.newArrayList();
for (String file : files) {
Resource r = rs.getResource(URI.createFileURI(file), true);
resources.add(r);
}
IResourceValidator validator = injector.getInstance(IResourceValidator.class);
for (Resource r : resources) {
List<Issue> issues = validator.validate(r, CheckMode.ALL, CancelIndicator.NullImpl);
for (Issue i : issues) {
System.out.println(i);
}
}
GeneratorDelegate generator = injector.getInstance(GeneratorDelegate.class);
JavaIoFileSystemAccess fsa = injector.getInstance(JavaIoFileSystemAccess.class);
fsa.setOutputPath("src-gen-code/");
GeneratorContext context = new GeneratorContext();
context.setCancelIndicator(CancelIndicator.NullImpl);
for (Resource r : resources) {
generator.generate(r, fsa, context);
}
}
}
答案 1 :(得分:1)
当您在暂时打开的编辑器上保存。 yourdsl 文件时,它会自动构建它。一旦成功构建且没有错误,您的工作区内的项目内将有一个名为 src-gen 的目录。在那里,您将根据 yourdsl Generator.xtext生成dsl刚刚生成的文件。
答案 2 :(得分:0)
Xtext项目的结果是由您自己设计的领域特定语言,可以在IDE(Eclipse或Intellij,据我所知)内部进行代码生成的解析,验证,链接和使用,并且无头。
根据您希望在DSL中使用的功能,您必须在XText项目中更改和创建不同的类。
通常第一步包括:
.xtext
文件),以指定解析DSL的方式并在语法上进行查看。 .xtext
文件 - &gt;运行为 - &gt;生成Xtext工件)