antlr2 でルールが複数の値を返すようにする方法。例:
declSpecifiers returns [int mods]
: ( storageClassSpecifier
| typeQualifier
| typeSpecifier)+
;
「MOD」以外にも返すべき情報があります。どうすればよいですか?
ANTLR v2.xでは、複数の戻り値を含むコンテナによって複数の戻り値が自動的にラップされるANTLR v3.xとは異なり、単一の値のみを返すことができます。
ある種のコレクションまたはカスタムオブジェクトを返す必要があります。
declSpecifiers returns [Map map]
{map = new HashMap();}
: ( storageClassSpecifier { /* populate your map here */ }
| typeQualifier { /* populate your map here */ }
| typeSpecifier { /* populate your map here */ }
)+
;
ANTLR v2はかなり古いことをご存知だと思います。可能であれば、v3に移行してください(これが常にオプションであるとは限りませんが、それでも)。
ANTLR v3.x では、括弧内にリストすることで、複数の戻り値を含めることができます。
declSpecifiers returns [int mods, Object otherInfo]
: ( storageClassSpecifier
| typeQualifier
| typeSpecifier)+
;
生成されたコードは、指定した名前を使用して、すべての戻り値のフィールドを含む生成されたクラスを返します。