2016-11-17 40 views
-1

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

+0

当新的eclipse实例打开时,创建一个新项目并在里面创建一个带有DSL文件扩展名的新文件。如果你一切正确,这个文件将用你的DSL的Xtext编辑器打开,编辑应该像你的语法中指定的一样工作。 – lwi

回答

0

Xtext项目的结果是由您自己设计的领域特定语言,可以在IDE(Eclipse或Intellij,据我所知)内进行解析,验证,链接和用于代码生成和无头。

根据您希望在DSL中拥有的功能,您必须在XText项目中更改和创建不同的类。

通常第一个步骤包括:

  • 创建你的语法(.xtext文件),指定你的DSL应该如何解析和语法上看起来。
  • 运行的语言生成的语法(右键点击.xtext文件 - >运行为 - >产生的Xtext文物)
  • 运行另一个Eclipse实例(如运行 - > Eclipse的应用程序)在行动中看到你的语法。为此,创建一个新项目,并将DSL文件的文件放在项目中。对话框会要求您将DSL项目的性质添加到项目中。同意并尝试编辑该文件。这个文件应该像xtext语法中指定的那样工作。
+0

我可能错误地表达了自己,所以很抱歉。我在问下一步。 我已经创建了项目和我的DSL文件结尾的文件,它的行为如预期。但嗨,我运行最后一个文件。那个使用我的DSL的人。我以为期望可以给我一种执行我的项目maven或gradle的方法。 –

0

如果你想要一个Java主读模式并执行发电机当你保存你可以看看这个片断

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); 
     } 
    } 

} 
0

yourdsl文件在你暂时打开的编辑器上,它会自动构建它。一旦它成功建立并且没有错误,你的工作区中就会有一个名为src-gen的目录。在那里,您将拥有您的dsl根据您的yourdsl Generator.xtext生成的文件。