Hi!

To understand better data structure after parsing I created peep action:

#!/usr/bin/perl
use strict;
use warnings;
use Marpa::R2;
use Data::Dumper;

my $dsl = <<'END_OF_DSL';
:default ::= action => [name,values]
lexeme default = latm => 1

seq ::= digit seq
action => peep
| digit

digit ~ [01]
END_OF_DSL

sub MyActions::peep {
print "peep:\n";
print Dumper(\@_);
return \@_;
}

my $grammar = Marpa::R2::Scanless::G->new({ source => \$dsl });
my $input = '11';
my $value_ref = $grammar->parse(\$input, 'MyActions');
print Dumper($value_ref);


Output is

peep:
$VAR1 = [
          {},
          '1',
          [
            'seq',
            '1'
          ]
        ];
$VAR1 = \[
            {},
            '1',
            [
              'seq',
              '1'
            ]
          ];

If comment "action => peep", then output will be:

$VAR1 = \[
            *'seq',*
            '1',
            [
              'seq',
              '1'
            ]
          ];

There is one difference: first element 'seq' (no peep) and '{}' (peep). I 
can write something like this:
sub MyActions::peep_seq {
print "peep:\n";
print Dumper(\@_);
shift;
return \('seq', @_);
}
But I must implement such rule for all G1 rules where I use peep action! 
Can I implement only one suboutine?

In contrast I found such solution for OOP-case:

#!/usr/bin/perl
use strict;
use warnings;
use Marpa::R2;
use Data::Dumper;

my $dsl = <<'END_OF_DSL';
:default ::= action => [values] bless => ::lhs
lexeme default = latm => 1

seq ::= digit seq
action => peep
| digit

digit ~ [01]
END_OF_DSL

sub MyActions::peep {
print "peep:\n";
print Dumper(\@_);
return $_[1];
}

my $grammar = Marpa::R2::Scanless::G->new({ bless_package => 'MyClasses', 
source => \$dsl });
my $input = '11';
my $value_ref = $grammar->parse(\$input, 'MyActions');
print Dumper($value_ref);

Is it ok?

-- 
You received this message because you are subscribed to the Google Groups 
"marpa parser" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to