in reply to Another Parse::RecDescent Question

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.

Replies are listed 'Best First'.
Re: Re: Another Parse::RecDescent Question
by sth (Priest) on Nov 04, 2003 at 14:29 UTC

    This was just a start/experiment not a final version, but that is exactly the advice I'm looking for.

    Thank You allolex