make sure entire string was parsed

Steven Bethard steven.bethard at gmail.com
Sun Sep 11 20:05:13 CEST 2005


Paul McGuire wrote:
> Thanks for giving pyparsing a try!  To see whether your input text
> consumes the whole string, add a StringEnd() element to the end of your
> BNF.  Then if there is more text after the parsed text, parseString
> will throw a ParseException.

Thanks, that's exactly what I was looking for.

> I notice you call leaveWhitespace on several of your parse elements, so
> you may have to rstrip() the input text before calling parseString.  I
> am curious whether leaveWhitespace is really necessary for your
> grammar.  If it is, you can usually just call leaveWhitespace on the
> root element, and this will propagate to all the sub elements.

Yeah, sorry, I was still messing around with that part of the code.  My 
problem is that I have to differentiate between:

   (NP -x-y)

and:

   (NP-x -y)

I'm doing this now using Combine.  Does that seem right?

> Lastly, you may get caught up with operator precedence, I think your
> node assignment statement may need to change from
>     node << start + (branch_node | leaf_node) + end
> to
>     node << (start + (branch_node | leaf_node) + end)

I think I'm okay:

py> 2 << 1 + 2
16
py> (2 << 1) + 2
6
py> 2 << (1 + 2)
16

Thanks for the help!

STeVe



More information about the Python-list mailing list