我正在使用xtext为特定语言生成编辑器。当我使用编辑器作为我的新语言时,它具有所有可爱的xtext功能,如代码完成和着色等。我希望能够做的是在我的编辑器中可视化文本的结构。
我知道xtext有一个内部AST和一个解析树(我知道他们称之为“节点模型”) - 有没有可视化这棵树的方法?
答案 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)