Я работаю над грамматикой ANTLR, которая выглядит как ...
A : B+;
... и я хотел бы иметь возможность выполнять действие до и после каждого экземпляра B. Например, я хотел бы что-то вроде ...
A : A {out("Before");} B {out("After");}
| {out("Before");} B {out("After");};
Чтобы на входном потоке A B B
я бы увидел вывод ...
Before
After
Before
After
Конечно, во втором примере неверный синтаксис ANTLR из-за левого рекурсивного правила. Есть ли способ выполнить то, что я хочу, с правильным синтаксисом ANTLR?
Я должен также упомянуть, что есть и другие способы достижения правила B, поэтому простое окружение правила B до и после не сработает.