У меня проблема при сборке 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)
как необязательного?