1

質問: ANTLR v4 で解析時にカスタム解析ツリーを構築する (より簡単な) 方法はありますか?

自動的に構築されたツリーをトラバースして書き換えることができると思いますが、解析時に手動でツリー構築 (または微調整) を行うことができるかどうか疑問に思っていました (ANTLR v3 以降と同様)。アイデアは、文法の書き方によっては、ANTLR で構築されたツリーに多くの役に立たないノードを取得し、興味のあるリスナー メソッドのみをオーバーライドできることはわかっていますが、まだ確認する必要があります。無駄なトークンタイプなどをスキップします。

4

2 に答える 2

3

いいえ、ANTLR 3 での私たちの経験は、手動の AST 機能により、必然的に保守と理解がより困難なコードになり、文法に変更を加える開発者の回帰バグの割合が高くなることです。アプリケーションの将来のリリースでどの端末が必要になるかを判断するのが難しいため、ツリーからトークンが省略されなくなりました。以前は使用されていませんでしたが、新しいコンポーネントまたは機能で必要になりました。

于 2014-10-16T10:50:03.953 に答える
2

オーバーライドorg.antlr.v4.runtime.Parser.addContextToParseTree()して、作成されるノードをある程度制御できます。これがカスタムとはどういう意味かはわかりません。

@parser::members {

@Override
protected void addContextToParseTree() {
    // code is a rule enabled by semantic predicate 'full' 
    // that matches generic lines of code.
    if(!full && _ctx instanceof CodeContext){
        return;
    }

    // otherwise add the node to the tree..
    super.addContextToParseTree();
}

}
于 2015-01-20T11:57:09.027 に答える