Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Parse::RecDescent without parentheses

by maverick (Curate)
on Feb 03, 2002 at 19:58 UTC ( #143098=note: print w/replies, xml ) Need Help??


in reply to Parse::RecDescent without parentheses

Your grammer doesn't allow a statement to contain a calculation, where a calculation is 4+8 let's say. So, after it consumes the 4+8 it has no way to know what to do with the +5 part. Also as an asside, you have all the math operators at the same precedence...so you'll end up wandering later why 2+4*5 = 30 and not 22 :)

The grammer for parsing standard algebra is a pretty common example for teaching parsing. (Give me a sec to dig up a link for an example) :)

<update style="big">
Complete example (almost) taken straight from the "Dragon" compiler book. Page 259

expression: expression '+' term | expression '-' term | term term: term '*' factor | term '/' factor | factor factor: '(' expression ')' | /\d+/
I'm sorry I don't have time to explain exactly how it works, but I can tell you how to figure that out. Turn on tracing as you have, and watch as many examples as you can and pay close attention to HOW Parse::RecDescent walks this grammer and your input.

/\/\averick
perl -l -e "eval pack('h*','072796e6470272f2c5f2c5166756279636b672');"

Replies are listed 'Best First'.
Re: Re: Parse::RecDescent without parentheses
by merlyn (Sage) on Feb 04, 2002 at 05:19 UTC
    That's a "left recursive" grammar, which gives Recursive Descent compilers (of which P::RD is one) a hissy fit.

    I believe that the P::RD examples include a simple parser that actually works. {grin}

    -- Randal L. Schwartz, Perl hacker

      DOH! I was in such a rush that I didn't check that the grammer wasn't left recursive. Hmm... wouldn't swapping the order of the nonterminals in expression and term make it 'right recursive' and solve the problem?

      /\/\averick
      perl -l -e "eval pack('h*','072796e6470272f2c5f2c5166756279636b672');"

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://143098]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (4)
As of 2018-07-17 19:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?















    Results (377 votes). Check out past polls.

    Notices?