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 に答える