antlr2 возвращает несколько значений
Как заставить правило возвращать несколько значений в antlr2. Например:
declSpecifiers returns [int mods]
: ( storageClassSpecifier
| typeQualifier
| typeSpecifier)+
;
У меня есть другая информация, кроме "модов", чтобы вернуться. Что мне делать?
2 ответа
В ANTLR v3.x вы можете включить несколько возвращаемых значений, перечислив их в скобках.
declSpecifiers returns [int mods, Object otherInfo]
: ( storageClassSpecifier
| typeQualifier
| typeSpecifier)+
;
Сгенерированный код вернет сгенерированный класс, содержащий поля для всех возвращаемых значений, используя указанные вами имена.
В 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 (я знаю, что это не всегда вариант... но все же).