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.