在xtext中查看解析树/节点模型/ AST

时间:2012-12-04 10:49:29

标签: abstract-syntax-tree xtext

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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
}

来自 转储(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)