Hi all,

I've got a question to the following perl script

------------------
  #!/usr/bin/perl

  use Parse::RecDescent;

  # Create and compile the source file
  $parser = Parse::RecDescent->new(q(
    startrule : myterm
    myterm : /h\d+/ | /h\d+/ "(" myterm ")"
  ));

  # Test it on sample data
  print "Valid 1\n" if $parser->startrule("h1");
  print "Valid 2\n" if $parser->startrule("h1(h2,h34)");
------------------

Running it gives:
Valid 1
Valid 2

------------------

I don't understand, why String2 h1(h2,h34) is beeing parsed correctly. I
didn't specify a rule like 
 myterm : /h\d+/ | /h\d+/ "(" myterm ")" | /h\d+/ "(" myterm "," myterm
")" .

Actually it is possibly to put in every string after h1(h2,h34) like
h1(h2,h34)aaaaaaaaaaaa, which is parsed correctly. It gives Valid 2,
too. That shouldnt be, does it ?

Thank you for any hints! Probably i missed something !?

Regards,

Ravi Coote

Reply via email to