#!/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 } #### * String before error: f : BAR = lmnd, adfs : BAZ = fda, reqw\nUser_Alias * The error was at line 2, column 11, and at character 0x0020 (non-graphic character), ... * here: ZAB = gfd, aed\n Marpa::R2 exception at test1.pl line 13. #### sub test_input { return <<'END_INPUT'; User_Alias FOO = abc, def END_INPUT } sub test_input { return <<'END_INPUT'; User_Alias FOO = abc, def : BAR = lmnd, adfs : BAZ = fda, reqw END_INPUT } sub test_input { return <<'END_INPUT'; User_Alias FOO = abc, def : BAR = lmnd, adfs : BAZ = fda, reqw User_Alias ZAB = gfd, aed END_INPUT } #### my $data = <<'END'; If ((Myvalue.xyz == 1) Or (Frmae_1.signal_1 == 1)) Then a = 1 Else a = 0; If ((Myvalue.xyz == 1) Or (Frmae_1.signal_1 == 1)) Then a = 1 Else a = 0; END #### bless([ [ bless([ bless([ bless([ bless(["Myvalue.xyz"], "Ast::Var"), "==", bless([1], "Ast::Literal"), ], "Ast::Binop"), "Or", bless([ bless(["Frmae_1.signal_1"], "Ast::Var"), "==", bless([1], "Ast::Literal"), ], "Ast::Binop"), ], "Ast::Binop"), bless([bless(["a"], "Ast::Var"), "=", bless([1], "Ast::Literal")], "Ast::Binop"), bless([bless(["a"], "Ast::Var"), "=", bless([0], "Ast::Literal")], "Ast::Binop"), ], "Ast::Cond"), ], [ bless([ bless([ bless([ bless(["Myvalue.xyz"], "Ast::Var"), "==", bless([1], "Ast::Literal"), ], "Ast::Binop"), "Or", bless([ bless(["Frmae_1.signal_1"], "Ast::Var"), "==", bless([1], "Ast::Literal"), ], "Ast::Binop"), ], "Ast::Binop"), bless([bless(["a"], "Ast::Var"), "=", bless([1], "Ast::Literal")], "Ast::Binop"), bless([bless(["a"], "Ast::Var"), "=", bless([0], "Ast::Literal")], "Ast::Binop"), ], "Ast::Cond"), ], ], "Ast::Block")