如何运行Xtext .mydsl文件?

时间:2016-11-17 09:41:41

标签: java eclipse dsl xtext

这个问题似乎很明显,但我只是从Xtext开始。 因此,在创建xtext项目并运行mydsl.xtext文件之后 它启动了一个新的eclipse迭代。我在一个新项目中创建一个新的.mydsl文件。但我不知道接下来该做什么!如何运行.mydsl文件? 我如何使用我的DSL ?? 创建DSL后,所有Xtext教程都会停止,并且不会显示如何使用它。 我正在关注the 15 minutes Xtext tutorial 我的代码是ecl​​ipse给出的hello字代码,此时没有什么特别之处。

3 个答案:

答案 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工件)
  • 运行另一个eclipse实例(运行为 - &gt; Eclipse Application)以查看您的语法。为此,创建一个新项目并将带有DSL文件的文件放在项目中。对话框将要求您将DSL项目性质添加到项目中。同意并尝试编辑该文件。此文件的行为应与xtext语法中指定的一致。