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 (я знаю, что это не всегда вариант... но все же).

Другие вопросы по тегам