Разрешает ли ANTLR определение нескольких переменных в предложении locals?

в грамматике парсера я хотел бы определить несколько переменных в предложении locals.

Упрощенный пример выглядит так:

body
locals [
    Map<String, String> bodyContent = new HashMap<String, String>();
    long counter = 0;
]
            :   BODY_CAPTION NEWLINE line ;
line        :   key='MyKey' TAB value='MyValue' NEWLINE
                {
                    $body::bodyContent.put($key.text, $value.text);
                    $body::counter++;
                } ;

Это дает ошибку:

unknown attribute 'counter' for rule 'body' in '$body::counter'

Если я поменяю местами строки в предложении locals следующим образом

locals [
    long counter = 0;
    Map<String, String> bodyContent = new HashMap<String, String>();
]

это дает ошибку:

unknown attribute 'bodyContent' for rule 'body' in '$body::bodyContent'

Судя по всему, ANTLR распознает только первое определение локальной переменной в предложении locals.

Есть ли способ определить несколько локальных переменных в locals?


person DCX    schedule 20.05.2013    source источник


Ответы (1)


Да, но они разделены запятыми, как список параметров и предложение returns.

locals [
    Map<String, String> bodyContent = new HashMap<String, String>(),
    long counter = 0
]
person Sam Harwell    schedule 20.05.2013