#!/usr/bin/env perl use strict; use warnings; use warnings; use Marpa::R2; my $grammar_spec = get_grammar(); my $test_input = test_input(); my $grammar = Marpa::R2::Scanless::G->new({ bless_package => 'Ast', source => \$grammar_spec, }); my $recce = Marpa::R2::Scanless::R->new({ grammar => $grammar }); $recce->read(\$test_input); my $val = $recce->value; use Data::Dump; dd $val; sub get_grammar { return q{ :default ::= action => [values] :start ::= Definitions :discard ~ ws Definitions ::= Alias Alias ::= 'User_Alias' User_Alias repeatUser_Alias bless => User_Alias1 || 'User_Alias' User_Alias bless => User_ALias1a repeatUser_Alias ::= manyColonUser_Alias bless => User_Alias2 ### repeated OPTIONALLY repeatUser_Alias ::= ### repeated many times manyColonUser_Alias ::= colonUser_Alias* bless => User_Alias_Colon colonUser_Alias ::= ':' User_Alias bless => User_Alias User_Alias ::= NAME '=' User_List bless => Alias_Name User_List ::= User | User ',' User_List User ::= bless => User_Name ws ~ [\s]+ NAME ~ name_firstchar ~ [A-Z] name_restchars ~ [A-Z0-9_]* ~ username_firstchar ~ [a-z] username_restchars ~ [a-z0-9_]* ~ [\n] }; } sub test_input { return <<'END_INPUT'; User_Alias FOO = abc, def END_INPUT }