Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

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 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.

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?

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

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (2)
As of 2018-04-24 21:43 GMT
Find Nodes?
    Voting Booth?