如何使用Xtext和Xtend生成AST?

时间:2012-01-20 12:40:05

标签: eclipse 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 '!';

我想查看抽象语法树 - 特别是我想要相应的xtend 文件,看起来像

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

每当调用doGenerate时打印出AST的文本版本。我一直在讨论这个问题大约两天而且我显然遗漏了一些基本的东西 - 有人对我表示同情吗?什么会在doGenerate函数中发生什么?

1 个答案:

答案 0 :(得分:0)

doGenerate函数的参数是基于EMF的资源(基本上是文本文件的模型表示 - 换句话说,解析了链接的AST)和用于写入文件系统的辅助类。

生成器任务是创建生成的源代码(通常是Java,但这不是必需的)。有关示例,请参阅博客文章http://www.rcp-vision.com/?p=1573 - 最后使用了示例代码生成器。