%item

#!/usr/bin/env perl

use strict;
use Parse::RecDescent;
use Data::Dumper;

my $grammar =
q{
    inputs : 'a' 'b' { print Data::Dumper::Dumper(%item); }
};

my $parse = new Parse::RecDescent ($grammar);

while (<>)
{
    defined $parse->inputs($_) or print "Bad text!\n";
}

で、

$VAR1 = '__STRING2__';
$VAR2 = 'b';
$VAR3 = '__RULE__';
$VAR4 = 'inputs';
$VAR5 = '__STRING1__';
$VAR6 = 'a';
#!/usr/bin/env perl

use strict;
use Parse::RecDescent;
use Data::Dumper;

my $grammar =
q{
    inputs : a b { print Data::Dumper::Dumper(%item); }
    a      : 'A'
    b      : 'B'
};

my $parse = new Parse::RecDescent ($grammar);

while (<>)
{
    defined $parse->inputs($_) or print "Bad text!\n";
}

で、

AB
$VAR1 = '__RULE__';
$VAR2 = 'inputs';
$VAR3 = 'a';
$VAR4 = 'A';
$VAR5 = 'b';
$VAR6 = 'B';


同じルールで別な値が返ってくる場合

#!/usr/bin/env perl

use strict;
use Parse::RecDescent;
use Data::Dumper;

my $grammar =
q{
    inputs : a a { print Data::Dumper::Dumper(%item); }
    a      : /\w/
};

my $parse = new Parse::RecDescent ($grammar);

while (<>)
{
    defined $parse->inputs($_) or print "Bad text!\n";
}

で、

AB
$VAR1 = '__RULE__';
$VAR2 = 'inputs';
$VAR3 = 'a';
$VAR4 = 'B';

これで、良いの?と思ったら、そういう場合は別なルール名でラップしろとの説明があった