in reply to Re: How do I return a hash from Parse::RecDescent?
in thread How do I return a hash from Parse::RecDescent?
That breaks the ability to easily PreCompile (which is rather major) because the user must provide AddHash and the user must be main::. Breaking encapsulation in this fashion also prevents more than one instance of the parser from being used at a time. Fix:
use strict; use warnings; use Parse::RecDescent (); use Data::Dumper qw( Dumper ); my $grammar = <<'__END_OF_GRAMMAR__'; { use strict; use warnings; } test : <rulevar: local %data > | expr(s) /^\Z/ { \%data } expr : name '=' /\d+/ { $data{ $item{name} } = $item[-1]; 1 } name : /\w+/ __END_OF_GRAMMAR__ my $parser = new Parse::RecDescent($grammar) or die; my $data = $parser->test("x = 1 y = 2 z = 3") or die; print Dumper $data;
( Note: I prefer the solution I posted last night because it doesn't break if backtracking occurs like this one and this one's parent do. )
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: How do I return a hash from Parse::RecDescent?
by Outaspace (Scribe) on Sep 24, 2006 at 10:46 UTC | |
by ikegami (Patriarch) on Sep 24, 2006 at 12:01 UTC | |
by Outaspace (Scribe) on Sep 24, 2006 at 13:05 UTC |