T.M. SoftStudio

feci quod potui, faciant meliora potentes

Купить полную версию книги "Среда разработки Eclipse 4: Руководство разработчика"

Использование инструментов Eclipse Modeling Tools

Xtext

Проект Xtext позволяет для определенной модели создать язык программирования domain-specific language (DSL).

Платформа Xtext на основе определения грамматики DSL-языка обеспечивает создание набора компонентов среды выполнения языка программирования, включающего в себя анализатор кода языка, сериализатор, инструмент форматирования кода, компилятор, редактор кода и др.

Мастер Xtext Project раздела Xtext команды New | Other среды Eclipse c установленными Modeling-плагинами обеспечивает генерацию трех проектов в Workspace-пространстве – проекта Eclipse-плагина компонентов среды выполнения DSL-языка, проекта Unit-тестов и проекта плагина Eclipse-редактора DSL-языка.

После нажатия кнопки Finish мастера Xtext Project в Eclipse-редакторе откроется сгенерированный файл .xtext определения структуры DSL-языка:

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

Model:

greetings+=Greeting*;

Greeting:

'Hello' name=ID '!';

Для генерации набора компонентов среды выполнения DSL-языка в окне редактора файла .xtext нажмем правой кнопкой мышки и в контекстном меню выберем команду Run As | Generate Xtext Artifacts. В результате будут сгенерированы необходимые компоненты DSL-языка, включая Ecore и Genmodel модели папки src-gen проекта.

Мастер Xtext Project From Existing Ecore Models раздела Xtext команды New | Other среды Eclipse c установленными Modeling-плагинами дает возможность создания набора компонентов среды выполнения DSL-языка, включая определение его структуры, на основе готовой Ecore-модели.

Нажмем правой кнопкой мышки на узле файла Ecore-модели и в контекстном меню выберем команду New | Other | Ecore Tools | Ecore Diagram, нажмем кнопку Next и кнопку Finish. В результате будет создана Ecore-диаграмма структуры DSL-языка (рис. 17.8).

Рис. 17.8. Ecore-диаграмма структуры DSL-языка

Откроем файл Genmodel-модели в графическом редакторе, нажмем правой кнопкой мышки в окне редактора и в контекстном меню выберем команду Generate All. В результате будут сгенерированы EMF-компоненты, включая EMF-редактор.

Для того чтобы при создании кода DSL-языка он автоматически компилировался в Java-код, откроем файл MyDslGenerator.xtend папки src проекта и модифицируем его код:

package org.xtext.example.mydsl.generator

import org.eclipse.emf.ecore.resource.Resource

import org.eclipse.xtext.generator.IGenerator

import org.eclipse.xtext.generator.IFileSystemAccess

import org.xtext.example.mydsl.myDsl.Greeting

import org.eclipse.xtext.naming.IQualifiedNameProvider

import javax.inject.Inject

class MyDslGenerator implements IGenerator {

@Inject extension IQualifiedNameProvider

override void doGenerate(Resource resource, IFileSystemAccess fsa) {

for(e: resource.allContents.toIterable.filter(typeof(Greeting))) {

fsa.generateFile(

e.fullyQualifiedName.toString.replace(".", "/") + ".java",

e.compile)

}}

def compile(Greeting e) '''

package mydsl;

public class «e.name» {

public static void main(String args[]) {

System.out.println("Hello «e.name» ");

}

}

'''}



Для запуска плагинов созданного DSL-языка нажмем правой кнопкой мышки на узле проекта плагина и в контекстном меню выберем команду Run As | Eclipse Application.

В новом экземпляре среды Eclipse в меню File выберем команду New | Other | Java | Java Project и создадим Java-проект. В Java-проекте создадим папку src-gen, в которой будут генерироваться файлы Java-кода из DSL-кода. В папке src проекта создадим файл с расширением .mydsl, который автоматически откроется в текстовом DSL-редакторе. В DSL-редакторе наберем код:

Hello World!

и сохраним изменения. При этом в папке src-gen автоматически сгенерируется файл World.java:

package mydsl;

public class World {

public static void main(String args[]) {

System.out.println("Hello World ");

}}

согласно шаблона, определенного в файле MyDslGenerator.xtend.

Созданный файл с DSL-кодом с помощью команды Open With | MyDsl Model Editor можно также открыть и редактировать в графическом EMF-редакторе (рис. 17.9).

Рис. 17.9. Редактирование DSL-кода в EMF-редакторе


ATL