5

我正在使用 xtext 为特定语言生成编辑器。当为我的新语言使用编辑器时,它具有所有可爱的 xtext 功能,如代码完成和着色等。我想做的是在我的编辑器中可视化文本的结构。

我知道 xtext 有一个内部 AST 和一个解析树(我知道他们称之为“节点模型”) - 有没有办法可视化这棵树?

4

3 回答 3

3

xtend 中的一个简单解决方案(基于 EObject.toString() 默认完成的内省):

def static String dump(EObject mod_, String indent) {
    var res = indent + mod_.toString.replaceFirst ('.*[.]impl[.](.*)Impl[^(]*', '$1 ')

    for (a :mod_.eCrossReferences)
        res += ' ->' + a.toString().replaceFirst ('.*[.]impl[.](.*)Impl[^(]*', '$1 ')
    res += "\n"
    for (f :mod_.eContents) {
        res += f.dump (indent+"    ")
    }
    return res
}

诸如dump(someEObject, '') 之类的调用的输出将返回:

ExpressionModel 
Variable (name: i)
    Plus 
        IntConst (value: 1)
        Plus 
            IntConst (value: 2)
            Plus 
                IntConst (value: 3)
Variable (name: j)
    Plus 
        VarRef  ->Variable (name: i)
        Plus 
            IntConst (value: 4)
            Plus 
                IntConst (value: 5)
于 2016-01-31T17:21:16.523 回答
2

这可能会对您有所帮助: https ://github.com/OLibutzki/xtext.tools

它提供了节点模型和语义模型 (AST) 的大纲。

于 2013-12-20T05:08:08.523 回答
1

您应该检查内容大纲。我已经定制了我的,但我认为默认的反映了模型的结构。

于 2012-12-04T16:21:02.437 回答