Необязательное правило перезаписи для AST в ANTLR - PullRequest
3 голосов
/ 28 ноября 2010

У меня проблема при сборке AST в ANTLR (я использую ANTLR 3.2, ANTLRWorks 1.4).

Это моя грамматика:

classDeclaration
    :
    (
        'class' n=IDENTIFIER ('extends' e=IDENTIFIER)?
        '{'
        …
        '}'
    )
        -> ^(CLASSDECLARATION ^(NAME $n) ^(EXTENDS $e)
;

Проблема возникает с необязательной частью класса - ('extends' e=IDENTIFIER)?.

Таким образом, грамматика хорошо работает с этим объявлением класса:

class Test1 extends AbstractTest1 {
…
}

И происходит сбой, когда я исключаю extends часть, следующим образом:

class Test2 {
…
}

ANTLR просто останавливается перед этим фрагментом и выдает это исключение в консоли: javax.swing.text.BadLocationException: Position not represented by view

Как я могу указать ANTLR для обработки правила перезаписи ^(EXTENDS $e) как необязательного?

1 Ответ

2 голосов
/ 28 ноября 2010

Есть проблема решена.Ничего хитрого, просто пришлось использовать общий синтаксис RegExp:

^(EXTENDS $e)?
...