Синтаксис грамматики ANTLR версии 2?

Мой профессор дал нам задание про ANTLR,

но я обнаружил, что данный файл грамматики не работает с текущими версиями ANTLR.

На самом деле это пример кода, включенный в ANTLR v2, который я могу найти в нескольких документах, и он был остановлен для поддержки любых инструментов IDE, таких как Eclipse или ANTLRWorks.

Из-за этого мне потребовалось довольно много времени, чтобы выяснить, что файл грамматики из древнего.

Мне нужно изменить данный файл грамматики, чтобы найти циклы whlie, которые сразу же заключены в ветку else, но не могут понять какую-то часть грамматики.

Кто-нибудь, научите меня, что означает '=>' в этом примере?


program
    :   ( declaration )* EOF
    ;

declaration
    :   (variable) => variable
    |   function
    ;

declarator
    :   id:ID
    |   STAR id2:ID
    ;

variable
    :   type declarator SEMI
    ;

function
    :   type id:ID LPAREN
        (formalParameter (COMMA formalParameter)*)?
        RPAREN
        block
    ;

statement
    :   (declaration) => declaration
    |   expr SEMI
    |   if_statement
    |   while_statement
    |   block
    ;

person Lyle    schedule 28.04.2013    source источник


Ответы (1)


Это опережающий синтаксический предикат как описано в руководстве ANTLR 2; они используются для устранения неоднозначности продукции с использованием просмотра вперед.

В этом конкретном случае объявление может быть создано с помощью переменной или функции. Поскольку каждый из них может начинаться с производства типа, предикат говорит смотреть вперед и предпочитать declarator SEMI id LPAREN.

person msw    schedule 28.04.2013
comment
Спасибо за ответ и особенно за ссылку на документ! - person Lyle; 28.04.2013