соответствовать начала и конца в antlr - PullRequest
1 голос
/ 26 марта 2011

как я могу сказать antlr, если вы видите «НАЧАЛО», то в этой строке вы должны увидеть «КОНЕЦ»?

вот мой код (мне нужно только НАЧАЛО / КОНЕЦ, когда у меня есть несколько утверждений)

whileStatement
    : 'WHILE' expression 'DO'
         'BEGIN'?
               statement
         'END'?
    ;

и мои заявления

statement
    :   assignmentStatement
    |   ifStatement
    |   doLoopStatement
    |   whileStatement
    |   procedureCallStatement
    ;   

1 Ответ

2 голосов
/ 26 марта 2011

Нет опыта работы с ANTLR, но обычно в BNF / контекстно-свободных грамматиках вы выражаете это как

whileStatement
    : 'WHILE' expr 'DO'
      statementBlock
    ;

statementBlock
    : statement
    | 'BEGIN' statement* 'END'
    ;

или добавляете statementBlock как альтернативу в определении statement.

...