サブ規則の反復指定子

7種類

#!/usr/bin/env perl

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

my $grammar =
q{
    inputs : input(?) { print Data::Dumper::Dumper($item[1]); }

    input  : 'a' 'b'  { [@item[1,2]]; }
};

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

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

で、

$VAR1 = [];
ab
$VAR1 = [
          [
            'a',
            'b'
          ]
        ];
abab
$VAR1 = [
          [
            'a',
            'b'
          ]
        ];
#!/usr/bin/env perl

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

my $grammar =
q{
    inputs : input(s) { print Data::Dumper::Dumper($item[1]); }

    input  : 'a' 'b'  { [@item[1,2]]; }
};

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

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

で、

Bad text!
ab
$VAR1 = [
          [
            'a',
            'b'
          ]
        ];
abab
$VAR1 = [
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ]
        ];
ababab
$VAR1 = [
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ]
        ];
#!/usr/bin/env perl

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

my $grammar =
q{
    inputs : input(s?) { print Data::Dumper::Dumper($item[1]); }

    input  : 'a' 'b'   { [@item[1,2]]; }
};

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

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

で、

$VAR1 = [];
ab
$VAR1 = [
          [
            'a',
            'b'
          ]
        ];
abab
$VAR1 = [
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ]
        ];
ababab
$VAR1 = [
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ]
        ];
#!/usr/bin/env perl

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

my $grammar =
q{
    inputs : input(2) { print Data::Dumper::Dumper($item[1]); }

    input  : 'a' 'b'  { [@item[1,2]]; }
};

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

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

で、

Bad text!
ab
Bad text!
abab
$VAR1 = [
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ]
        ];
ababab
$VAR1 = [
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ]
        ];
#!/usr/bin/env perl

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

my $grammar =
q{
    inputs : input(2..3) { print Data::Dumper::Dumper($item[1]); }

    input  : 'a' 'b'     { [@item[1,2]]; }
};

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

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

で、

Bad text!
ab
Bad text!
abab
$VAR1 = [
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ]
        ];
ababab
$VAR1 = [
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ]
        ];
abababab
$VAR1 = [
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ]
        ];
#!/usr/bin/env perl

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

my $grammar =
q{
    inputs : input(..2) { print Data::Dumper::Dumper($item[1]); }

    input  : 'a' 'b'    { [@item[1,2]]; }
};

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

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

で、

Bad text!
ab
$VAR1 = [
          [
            'a',
            'b'
          ]
        ];
abab
$VAR1 = [
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ]
        ];
ababab
$VAR1 = [
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ]
        ];
#!/usr/bin/env perl

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

my $grammar =
q{
    inputs : input(2..) { print Data::Dumper::Dumper($item[1]); }

    input  : 'a' 'b'    { [@item[1,2]]; }
};

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

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

で、

Bad text!
ab
Bad text!
abab
$VAR1 = [
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ]
        ];
ababab
$VAR1 = [
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ],
          [
            'a',
            'b'
          ]
        ];