in reply to Macros in a RecDescent grammar

Damian Conway answered a similar question in a talk last week. (Inserting optional semi-colons and continuing to parse.)

When you recognize the macro, modify the text to replace the macro with what should be there, throw an exception, and then retry the parse.

Inefficient? Well you are using Parse::RecDescent so you obviously cannot be worried about that!