У меня есть простая грамматика
options {
language = Java;
output = AST;
ASTLabelType=CommonTree;
}
tokens {
DEF;
}
root
: ID '=' NUM (',' ID '=' NUM)* -> ^(DEF ID NUM)+
;
и соответствующая грамматика дерева:
options {
tokenVocab=SimpleGrammar;
ASTLabelType=CommonTree;
}
root
: ^(DEF ID NUM)+
;
Однако antlr (v3.3) не может скомпилировать эту грамматику дерева, которую я получаю:
syntax error: antlr: unexpected token: +
|---> : ^(DEF ID NUM)+
Также это не работает, если я хочу создать его как ^(ROOT ^(DEF ID NUM)+)
Я хочу дерево, которое соответствует этому (так как parse создает его):
(ROOT (DEF aa 11) (DEF bb 22) (DEF cc 33))
Таким образом, antlr способен генерировать дерево в синтаксическом анализаторе, но не может анализировать его с помощью грамматики дерева?!
Почему это происходит?