I think Abigail-II has your answer, but please allow me to make a suggestion about RecDescent grammar style. You could probably improve the legibility of your grammar by slightly altering the your grammar notation. The idea is to divide the expressions into groups which will represent the individual items in the returned array.
my $prd_grammar = q( startrule : PlaceHolder Comment | PlaceHolder PlaceHolder : Xopen | Sprintf Comment : DD_Style DD_Style : '--' /.*/ { print "Comment : \n\t" . $item[2] . "\n\n" } Sprintf : '=' /.*/ '%s' /.*/ { print "After : \n\t%%s" . $item[4] . "\n\n" } Xopen : /.*/ '?' /.*/ { print "After : \n\t%s", $item[3], "\n\n" } ); new Parse::RecDescent($prd_grammar);
Often just putting everything into one regex is fine, but your problem with whitespace made me think of this. This notational style allows you (mostly) to avoid explicitly accounting for spaces in your grammar.
I don't think I like the '.*' notation here (maybe /\w+/?), but the notational style is the idea I'm trying to get across, so I'll leave your regexen up to you (mostly). :) There's always one more way to do it.
In reply to Re: Another Parse::RecDescent Question
by allolex
in thread Another Parse::RecDescent Question
by sth
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |