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} ); } } }
In reply to Parse::RecDescent autotree visitor by Sigil
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |