use strict;
use warnings;
use 5.012;
use Parse::RecDescent;
$::RD_ERRORS = 1; #Parser dies when it encounters an error
$::RD_WARN = 1; #Enable warnings - warn on unused rules &c.
$::RD_HINT = 1; # Give out hints to help fix problems.
our %HASH;
my $grammar = <<'END_OF_GRAMMAR';
startrule : from_clause
from_clause : 'from' dir(s)
{
print "-->@{$item{'dir(s)'}}<-- \n";
$main::HASH{dirs} = @{$item{'dir(s)'}};
}
dir : 'hello'
END_OF_GRAMMAR
my $parser = Parse::RecDescent->new($grammar);
$parser->startrule("from hello world");
use Data::Dumper;
say Dumper(\%HASH);
--output:--
-->hello<--
$VAR1 = {
'dirs' => 1
};
####
dir : 'hello'
| 'world'
##
##
-->hello world<--
$VAR1 = {
'dirs' => 2
};
##
##
print "-->@{$item{'dir(s)'}}<-- \n";
$main::HASH{dirs} = @{$item{'dir(s)'}};
##
##
use strict;
use warnings;
use 5.012;
use Parse::RecDescent;
$::RD_ERRORS = 1; #Parser dies when it encounters an error
$::RD_WARN = 1; #Enable warnings - warn on unused rules &c.
$::RD_HINT = 1; # Give out hints to help fix problems.
our %HASH;
my $grammar = <<'END_OF_GRAMMAR';
startrule : from_clause
from_clause : 'from' dir(s)
{
print "-->@{$item{'dir(s)'}}<-- \n";
$main::HASH{dirs} = $item{'dir(s)'};
}
dir : 'hello'
| 'world'
END_OF_GRAMMAR
my $parser = Parse::RecDescent->new($grammar);
$parser->startrule("from hello world hello");
use Data::Dumper;
say Dumper(\%HASH);
--output:--
-->hello world<--
$VAR1 = {
'dirs' => [
'hello',
'world'
]
};
##
##
my $grammar = <<'END_OF_GRAMMAR';
#Start up action(executed in parser namespace):
{
use 5.012; #So I can use say()
}
startrule : from_clause
from_clause : 'from' dir(s)
{
say "-->$item[0]<--";
say "-->@{$item[-1]}<--";
}
dir : m{/}
END_OF_GRAMMAR
my $parser = Parse::RecDescent->new($grammar);
$parser->startrule("from ./hello");
--output:--
(blank)
##
##
my $grammar = <<'END_OF_GRAMMAR';
#Start up action(executed in parser namespace):
{
use 5.012; #So I can use say()
}
...
##
##
my $grammar = <<'END_OF_GRAMMAR';
#Start up action(executed in parser namespace):
{ use 5.012; #So I can use say() }
...
--output:--
Unknown starting rule (Parse::RecDescent::namespace000001::startrule) called
at 3.pl line 76.
##
##
my $grammar = <<'END_OF_GRAMMAR';
#Start up action(executed in parser namespace):
{
use 5.012; #So I can use say()
}
startrule : from_clause
from_clause : 'from' dir(s)
{ say "-->$_<--" for @{ $item{'dir(s)'} }; }
dir : m{\S* / \S*}xms
END_OF_GRAMMAR
my $parser = Parse::RecDescent->new($grammar);
$parser->startrule("from ./hello hello/world");
--output:--
-->./hello<--
-->hello/world<--
##
##
use strict;
use warnings;
use 5.012;
use Parse::RecDescent;
$::RD_ERRORS = 1; #Parser dies when it encounters an error
$::RD_WARN = 1; #Enable warnings - warn on unused rules &c.
$::RD_HINT = 1; # Give out hints to help fix problems.
our %HASH;
my $grammar = <<'END_OF_GRAMMAR';
#Start up action(executed in parser namespace):
{
use 5.012; #So I can use say()
}
startrule : from_clause
from_clause : 'from' dir(s)
{
say "-->$_<--" for @{ $item{'dir(s)'} };
$main::HASH{target_dirs} = $item{'dir(s)'};
}
dir : m{\S* / \S*}xms
END_OF_GRAMMAR
my $parser = Parse::RecDescent->new($grammar);
$parser->startrule("from ./hello hello/world");
use Data::Dumper;
say Dumper(\%HASH);
--output:--
-->./hello<--
-->hello/world<--
$VAR1 = {
'target_dirs' => [
'./hello',
'hello/world'
]
};