in reply to advice with Parse::RecDescent

You have some excellent advice above on how to use Parse::RecDescent. My advice to you, however, is not to use it at all.

A recursive descent parser can deal with very complicated grammars, but the one you're dealing with is very simple. As a matter of fact, it looks like you could write a loop that reads a line, then dispatches based on its first three characters. Using a full-blown recursive descent parser in this situation is like swatting a fly with a sledgehammer. (Unless the grammar above is just an illustration and the real one is more complicated.)

As for maintainability: if the code can really be as simple as I've outlined above, then I'd say the simplicity would make a greater contribution to maintainability than the use of a standard module would. In other words, I think reading through a simple read/dispatch loop with four clauses -- HDR, TLR, ADD, DEL -- is as simple (if not simpler) than digesting the grammar above. And simplicity is one of the keys to maintainability.

Replies are listed 'Best First'.
Re(2): advice with Parse::RecDescent
by dmmiller2k (Chaplain) on Dec 10, 2001 at 23:47 UTC

    For what it's worth, I have to agree with you, VSarkiss. Just looking at the input data immediately makes me think of code that looks something like this:

    # ... file is opened in handle FH my ($compname, $hdrdata, $tlrdata ); while (<FH>) { /^HDR(\w+)\s+(\w+)/ && do { $compname=$1; $hdrdata=$2; # handle a header next; }; /^TLR(\d+)/ && do { $tlrdata=$1; # handle a trailer with number=$1 next; }; /^ADD(?:RANGE)?|DELETE(?:RANGE)?/ && do { my ($type,@range_data) = split /,/; my $comp_rec = pop @range_data; if ($comp_name eq $comp_rec ) { # validate record # process type, range data, etc. } else { # error? } next; }; # any other kind of line falls through here # error: ... }

    Voila! Simplicity itself, no? Well, okay. Maybe not, but certainly straightforward.

    dmm

    
    You can give a man a fish and feed him for a day ...
    Or, you can teach him to fish and feed him for a lifetime
    
Re: Re: advice with Parse::RecDescent
by demerphq (Chancellor) on Dec 10, 2001 at 21:51 UTC
    Perhaps so. My key worry is that as time goes on the spec will change and most probably towards something more complicated.

    Nevertheless maybe not using this tool is the best course of action after all. I will let you know how I get on.

    Yves / DeMerphq
    --
    This space for rent.