use 5.010; use strict; use warnings; package MarpaX::Repa::Test; use Marpa::R2; use MarpaX::Repa::Lexer; use MarpaX::Repa::Actions; sub simple_lexer { my $self = shift; my %args = (@_); my $grammar = Marpa::R2::Grammar->new({ action_object => 'MarpaX::Repa::Actions', start => 'text', default_action => 'do_what_I_mean', rules => [ [ 'text' => [ 'word' ] ], ], ( map { $_ => $args{$_} } grep exists $args{$_}, qw(start rules default_action), ), }); $grammar->precompute; my $recognizer = Marpa::R2::Recognizer->new( { grammar => $grammar } ); my $lexer = MarpaX::Repa::Lexer->new( tokens => { word => 'test' }, store => 'scalar', %args, recognizer => $recognizer, ); return ($lexer, $recognizer, $grammar); } sub recognize { my $self = shift; my %args = (@_); my $input = delete $args{'input'}; my $io; unless ( ref $input ) { open $io, '<', \$input; } else { $io = $input; } my @res = $self->simple_lexer( %args ); $res[0]->recognize( $io ); return @res; } 1;