Я недавно начал изучать Antlr и загружать AntlrWorks 1.4, который предположительно включает в себя Antlr 3.2. Предполагается, что 3.2 поддерживает грамматики правил перезаписи, такие как '->', но я не смог получить даже самый простой случай, который я мог бы построить, чтобы он работал на основе правил Lexer или Parser:
grammar TestRewrite;
ab : a b -> a;
a : A;
b : B;
A : 'a';
B : 'b';
Когда я пытаюсь это скомпилировать, я получаю сообщение об ошибке:
[11:26:29] error(100): TestRewrite.g:3:13: syntax error: antlr: TestRewrite.g:3:13: unexpected token: a
Почему это так? Конструкция кажется достаточно простой: ab должен генерировать дерево, в которое захватывается только узел. Разве не так ты это делаешь? Я не могу заставить его работать с рутом ('^') или игнорированием ('!'). Я очень смущен.