Sigil has asked for the wisdom of the Perl Monks concerning the following question:
Hi. I need to get the return data from a Parse::RecDescent parse tree created with the autotree directive.
Below is an example based on the article Parse::RecDescent Tutorial
The visitor function below seems to work. $AUTOLOAD instead of the switch statement would also be interesting.
But I'm wondering, is it really that simple? Or have I overlooked something?
Thanks.
use strict; use warnings; use Parse::RecDescent; use Switch; use Scalar::Util 'blessed'; my $grammar = q( <autotree> startrule : day month date day : "Sat" | "Sun" | "Mon" | "Tue" | "Wed" | "Thu" | "Fri" month : "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec" date: /\d+/ ); my $parser = Parse::RecDescent->new($grammar); my $tree = $parser->startrule("Thu Mar 31"); visit($tree); sub visit { my ($v) = @_; if ( blessed($v) ) { switch ( ref($v) ) { case "date" { print "The date is: ", $v->{__VALUE__}, "\n"; } case "month" { print "The month is: ", $v->{__VALUE__}, "\n"; } } foreach my $key ( keys %$v ) { visit( $v->{$key} ); } } }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Parse::RecDescent autotree visitor
by jethro (Monsignor) on Aug 10, 2011 at 09:49 UTC | |
by Sigil (Novice) on Aug 10, 2011 at 16:38 UTC | |
by jethro (Monsignor) on Aug 10, 2011 at 18:42 UTC |