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) の概要を提供します。
コンテンツの概要を確認する必要があります。私は自分の物をカスタマイズしましたが、デフォルトのものはモデルの構造を反映していると思います。