option: /<option/i /\w+/ optarg(?) '>'
[email protected] ((Alexander Farber)) Thu, 20 May 2004 13:42:21 +0000
| Newsgroups | perl.recdescent |
|---|---|
| Message-ID | <[email protected]> |
Hi,
why doesn't the question mark in the optarg(?)
below work as I expect? In the trace I see that
optarg consumes the ">" character and then the
option rule fails, since the final ">" is missing.
Isn't P:RD supposed to backtrack and say
"ok, the optarg(?) didn't match anything here"?
Of course the script below works when I change
the optarg from /\S+/ to /\w+/, but I'm curious,
why doesn't optarg(?) mean "ZERO or one" here?
Thank you
Alex
#!/usr/bin/perl -w
use strict;
use vars qw($parser $text %option);
use Data::Dumper;
use Parse::RecDescent;
$RD_WARN = 1;
$RD_HINT = 1;
$RD_TRACE = 120;
$parser = Parse::RecDescent->new(q(
genfile: chunk(s) /^\Z/
chunk: option | <error>
option: /<option/i /\w+/ optarg(?) ">" {
push @{$::option{lc $item[2]}}, $item[-2];
}
optarg: /\S+/
)) or die 'Bad grammar';
$text .= $_ while (<DATA>);
defined $parser->genfile($text) or die 'Bad text';
print STDERR Data::Dumper->Dump([\%option], [qw(option)]);
__DATA__
<option one>
<option two>