2010-08-24 6 views
0

Je travaille sur une grammaire ANTLR qui ressemble à ...Rédaction d'une action ANTLR « entre » la multiplicité

A : B+; 

... et je voudrais être en mesure d'effectuer une action avant et après chaque instance de B. Par exemple, je voudrais quelque chose comme ...

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

Alors que le flux d'entrée A B B je voyais la sortie ...

Before 
After 
Before 
After 

Bien entendu, le deuxième exemple n'est pas une syntaxe ANTLR valide en raison de la règle récursive gauche. Existe-t-il un moyen d'accomplir ce que je veux avec la syntaxe ANTLR appropriée?

Je devrais également mentionner qu'il y a d'autres manières d'atteindre la règle de B donc entourer simplement la règle de B avec avant et après ne fonctionnera pas.

Répondre

1

Est-ce que pas quelque chose comme

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

travail?

+0

A travaillé parfaitement. Merci. – Pace