我正在使用 xtext 为特定语言生成编辑器。当为我的新语言使用编辑器时,它具有所有可爱的 xtext 功能,如代码完成和着色等。我想做的是在我的编辑器中可视化文本的结构。
我知道 xtext 有一个内部 AST 和一个解析树(我知道他们称之为“节点模型”) - 有没有办法可视化这棵树?
我正在使用 xtext 为特定语言生成编辑器。当为我的新语言使用编辑器时,它具有所有可爱的 xtext 功能,如代码完成和着色等。我想做的是在我的编辑器中可视化文本的结构。
我知道 xtext 有一个内部 AST 和一个解析树(我知道他们称之为“节点模型”) - 有没有办法可视化这棵树?
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)
这可能会对您有所帮助: https ://github.com/OLibutzki/xtext.tools
它提供了节点模型和语义模型 (AST) 的大纲。
您应该检查内容大纲。我已经定制了我的,但我认为默认的反映了模型的结构。