FAQ
I use OO perl and created a class that uses recdecent.
I want to access method variables from the grammar actions. Is there an elegant way to pass a parameter to the Parse::RecDescent constructor and access it from the actions?

I used an awkward construct and I don't like it:

-----

Package Foo;

our $var;

...
my $grammar = '...
# Capture the object instance
my $object = Foo::$var;
startrule: a b c {$object->method}'

...

sub action {
# Capture $var
$var = SOmeClass->new();
# $var is used in grammar
my $parser = Parse::RecDescent ($grammar);
$parser->startrule(SomeText);
}


Also I think this would not work with Precompile.

-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may contain
confidential information. Any unauthorized review, use, disclosure or distribution
is prohibited. If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------

Search Discussions

  • Damian Conway at Jan 10, 2012 at 9:51 pm

    On 11 January 2012 03:54, Yuri Shtil asked:

    Is there an elegant way to pass a parameter to the Parse::RecDescent
    constructor and access it from the actions?
    I'm afraid there isn't.

    The best workaround is probably to make the shared resource an attribute
    of the parser object (instead of using an external variable) and then
    access it within the grammar via $thisparser. Like so:

    my $grammar = q{
    startrule: a b c {$thisparser->{sc_obj}->method}
    ...
    };

    sub action {
    my $parser = Parse::RecDescent->new($grammar);
    $parser->{sc_obj} = SomeClass->new();
    $parser->startrule($sometext);
    }


    Damian

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouprecdescent @
categoriesperl
postedJan 10, '12 at 4:55p
activeJan 10, '12 at 9:51p
posts2
users2
websitemetacpan.org...

2 users in discussion

Damian Conway: 1 post Yuri Shtil: 1 post

People

Translate

site design / logo © 2019 Grokbase