Итерация / обработка списка токенов, проанализированных в ANTLR - PullRequest
0 голосов
/ 08 июня 2011

У меня есть правило

((cns=IDENT '->')* IDENT | (cns=IDENT '->')* 'STOP') -> ^(PREFIX ^(EVENTS $cns*) ^(ENDS $procn? STOP?)  ) 

Это будет работать правильно, если cns=IDENT заменить на 'cns + = IDENT'.В таком случае, как я могу получить доступ к cns как $cns.text.

1 Ответ

0 голосов
/ 09 июня 2011

Чтобы сохранить все ИДЕНТЫ, а не только последний, cns=IDENT необходимо изменить на cns+=IDENT.

Теперь, если вы исследуете синтаксический анализатор Java-кода, сгенерированный ANTLR cns - это обобщенный ArrayList, где все хранимые элементы имеют тип Token.

Теперь этот список можно перебрать с помощью цикла, и вы можете делать что угодно с элементами, используя код, такой как

$cns.get(index)

Хотя этот элемент относится к типу Объект и может быть преобразован (это правильная терминология?) В Token объект для Token определенных задач.

...