SYNOPSIS use MarpaX::Simple qw(gen_parser); my $parser = gen_parser( grammar => <<'EOG', :start ::= expr expr ::= num | num '+' num action => do_add num ~ [\d]+ :discard ~ whitespace whitespace ~ [\s]+ EOG actions => { do_add => sub { shift; $_[0] + $_[2] } }, ); print $parser->('3 + 4'); # -> 7 print $parser->('3 + '); # dies with parse error which is a shortcut for roughly this: no strict 'refs'; use Marpa::R2; my $slif = Marpa::R2::Scanless::G->new({source => \$args{grammar}}); my $pkg = "MarpaX::Simple::gen" . some_random_value(); my $actions = $args{actions}; for (keys %$actions) { ${"$pkg\::$_"} = $actions->{$_}; } my $parser = sub { my $input = shift; my $recce = Marpa::R2::Scanless::R->new({ grammar => $slif, semantics_package => $pkg, }); }; DESCRIPTION This module tries to simplify the incantation of producing a parser using Marpa::R2 (the scanless interface) by reducing the process to a single function call: gen_parser. SEE ALSO Marpa::R2