ビジターによって ANTLR4 解析ツリーを処理するとき、ルール ノードが属する親ルール ノードを知る必要がある場合があります。のオンライン API ドキュメントにはParserRuleContext、オブジェクトが表すルールの名前を返すことができるメソッド/フィールドが見つかりません。ParserRuleContextルール名がそのサブクラス名の一部であることはわかっています。たとえば、function_definitionルール ノードはクラスFunction_definitionContextです。しかし、クラス名を調べるには、Java リフレクションを使用Contextし、最後に手動で文字列をストライプ化する必要があります。
ParserRuleContextオブジェクトが表すルール名を取得する簡単な方法はありますか?
親ルール ノードの名前を照会することは一般的な要件です。たとえば、C++ 文法を処理する場合、C++ クラス宣言は、グローバル スコープ、関数定義、または別のクラス宣言に含めることができます。これは、ルール ノードを,またはルール ノードclass_declarationの下にネストできることを意味します。の下にあるノードだけを分離したい場合は、親ノードを調べて、またはでないことを確認する必要があります。global_scopefunction_definitionclass_declarationclass_declarationglobal_scopefunction_definitionclass_declaration