Как сгенерировать AST с помощью Xtext и Xtend?

Итак, у меня есть пример грамматики xtext по умолчанию.

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 '!';

Я хотел бы просмотреть абстрактное синтаксическое дерево - в частности, мне нужен соответствующий файл расширения, который выглядит как

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

class MyDslGenerator implements IGenerator {

    override void doGenerate(Resource resource, IFileSystemAccess fsa) {
        //TODO implement me
    }
}

Распечатывать текстовую версию AST всякий раз, когда вызывается doGenerate. Я копался в этом около двух дней, и мне явно не хватает чего-то фундаментального - кто-нибудь пожалеет меня? Что будет в функции doGenerate?


person Joe    schedule 20.01.2012    source источник


Ответы (1)


Параметрами функций doGenerate являются ресурс на основе EMF (в основном модельное представление текстового файла — другими словами, AST с разрешенными ссылками) и вспомогательный класс для записи в файловую систему.

Задача генераторов — создать сгенерированный исходный код (обычно Java, но это не обязательно). Пример см. в сообщении блога http://www.rcp-vision.com/?p=1573 - в конце используется пример генератора кода.

person Zoltán Ujhelyi    schedule 20.01.2012