package Runtime::RuleCompiler;
use Pugs::Emitter::Rule::Perl5;
use base qw(Pugs::Compiler::Rule);
use Exporter 'import';
use Data::Dumper;
use strict;
our @EXPORT_OK = qw(rule);
sub compiled {
my $class = shift;
my $code = shift;
my ($grammar) = caller;
bless { code => $code, grammar => $grammar }, $class;
}
sub rule(&) {
my $rule = shift;
return Runtime::RuleCompiler->compiled(sub {
my $grammar = shift;
my $tree;
print Dumper($rule->($grammar)->( $_[0], undef, $tree, $tree )) if $ENV{DEBUG_lrep};
Pugs::Runtime::Rule::rule_wrapper($_[0],$rule->($grammar)->( $_[0], undef, $tree, $tree ));
})->code();
}
sub perl5 {
my $self = shift;
my $ast = $self->{ast}{capture};
Dumper($ast);
$_ = q[rule {
package Pugs::Runtime::Rule;
my $grammar = shift;
].Pugs::Emitter::Rule::Perl5::emit_rule( $ast, ' ' )."}";
s/\$_\[4\]/\$grammar/g;
return $_;
}
1;