2016-11-17 5 views
-1

Вопрос может показаться очевидным, но я только начинаю с Xtext. Итак, создав проект xtext и запустив файл mydsl.xtext.
запускает новую итерацию затмения. Я создаю новый .mydsl-файл в новом проекте. Но я не знаю, что делать дальше! Как запустить файл .mydsl? Как использовать мой DSL ??
Все учебники Xtext останавливаются после создания DSL и не показывают, как его использовать. Я слежу the 15 minutes Xtext tutorial
Мой код - это код слова hello, заданный затмением, на самом деле ничего особенного.Как запустить файл Xtext .mydsl?

+0

Когда новый экземпляр eclipse открывается, создайте новый проект и внутри него создайте новый файл с расширением вашего DSL-файла. Если вы все сделали правильно, этот файл будет открыт с помощью редактора Xtext вашего DSL, и редактирование должно работать так, как указано в вашей грамматике. – lwi

ответ

0

Результат проекта Xtext - это специфический для домена язык, который может быть проанализирован, проверен, привязан и использован для генерации кода внутри IDE (Eclipse или Intellij, насколько я знаю) и безголовый.

В зависимости от особенностей, которые вы хотите иметь в своем DSL, вам необходимо изменить и создать разные классы внутри вашего проекта XText.

Обычно первые шаги включают в себя:

  • Создайте свою грамматику (.xtext файл), чтобы указать, как DSL должен быть разобран и выглядеть синтаксически.
  • Run поколение языка для грамматики (правой кнопкой мыши на файле .xtext -> работать как -> генерировать XText артефакты)
  • запустить другое затмение экземпляра (запустить как -> Eclipse, приложение), чтобы увидеть вашу грамматику в действии , Для этого создайте новый проект и поместите файл с файлом DSL, заканчивающимся внутри проекта. В диалоговом окне вы попросите добавить проект проекта DSLs к проекту. Согласитесь и попробуйте отредактировать файл. этот файл должен вести себя так, как указано в вашей xtext-грамматике.
+0

Возможно, я ошибался, поэтому извините за это. я спрашиваю о следующем шаге. Я создал проект и файл с моим файлом DSL, и он ведет себя так, как ожидалось. но haw я запускаю последний файл. тот, который использует мой DSL.I думал, что ожидание может дать мне способ выполнить мои проекты maven или gradle. –

0

если вы хотите ява основной читать модель и выполнить генератор, вы можете посмотреть на этом фрагменте

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.

Смежные вопросы