Matching subrules

[email protected] ("Peter van der Kamp") Mon, 23 Jun 2003 16:50:26 +0200
Newsgroups perl.recdescent
Organization Instituut voor Nederlandse Lexicologie
Message-ID <3EF72FD2.9727.1C77DD5@localhost>
I'm wondering why my grammar (see hereafter) accepts 
the following input:
medium='d' or medium='f' ant topic='t'

while it should raise an error on 'ant'.
With tracing enabled you can see that it really does 
something with 'ant', except raising an error.

Peter van der Kamp


use Parse::RecDescent;
#$::RD_TRACE=100;
   
my $grammar = q{
   Criteria:zoekVraag /\D/
   
   zoekVraag:
      basisZoekVraag (operator basisZoekVraag)(s)
      |
      <error>
 
   basisZoekVraag:
      mediumZoekVraag
      |
      onderwerpZoekVraag
      |
      titelZoekVraag
      |
      auteurZoekVraag
      |
      periodZoekVraag
      |
      <error>
      
   mediumZoekVraag:
      'medium=' zoekString
                  
   onderwerpZoekVraag:
      'topic=' zoekString
                  
   titelZoekVraag:
      'title=' zoekString

   auteurZoekVraag:
      'author=' zoekString
      
   periodZoekVraag:
      rangePeriodZoekVraag
      |
      singlePeriodZoekVraag
      
   singlePeriodZoekVraag:
      'p=' cijfers

   rangePeriodZoekVraag:
      'p=' cijfers '-' cijfers
      |
      'p=' '-' cijfers
      |
      'p=' cijfers '-'

   operator:
      /or|and/
      |
      <error>
            
   zoekString: /\'[a-zA-Z:\. ]+\'/
   cijfers: /[0-9]{4}/
};

my $parser = new Parse::RecDescent($grammar);
undef $/;
my $text = <STDIN>;
#print Data::Dumper->Dump([$parser-
>Criteria($text)]);
$result = $parser->Criteria($text);