Написание действия ANTLR «между» множественностью - PullRequest
0 голосов
/ 24 августа 2010

Я работаю над грамматикой 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 до и после не сработает.

1 Ответ

1 голос
/ 24 августа 2010

Разве что-то вроде

A : ({out("Before");} B {out("After");})+;

не работает?

...