No ParseException when using ZeroOrMore()
Brought to you by:
ptmcg
Hello,
I find that the use of ZeroOrMore() seems to suppress
exceptions. The following little script illustrates this
==============================
from pyparsing import *
expression = Word(alphas) + ZeroOrMore("+" + Word(alphas))
if __name__ == "__main__":
try:
results = expression.parseString('a-b')
print results
except Exception, inst:
print inst
===============================
results in ['a'] being printed to screen.
If I redefine
expression = Word(alphas) + "+" + Word(alphas)
I do get an exception as expected:
%Expected "+" (at char 1), (line:1, col:2)
Is there some way to still get the ParseException?
Thanks in advance,
RJB
Logged In: YES
user_id=893320
Originator: NO
Do you mean that the input must have at least one "+" followed by a Word(alphas)? Then use OneOrMore instead of ZeroOrMore.
Or do you mean that "a-b" is not valid because of that pesky "-b" on the end? In that case, modify your grammar to show that, after the ZeroOrMore("+" + Word(alphas) you expect to be at the end of the input string. Do this by appending StringEnd() to your grammar:
expression = Word(alphas) + ZeroOrMore("+" + Word(alphas)) + StringEnd()
You can see more discussion of this at http://pyparsing-public.wikispaces.com/FAQs#tocFAQs1.
Welcome to pyparsing!
-- Paul
Logged In: YES
user_id=1952450
Originator: NO
Thanks for the reply, Paul.
Actually, I prepared this little example just to illustrate the problem that I had.
I was working on a VHDL parser when I found that the parser would not complain when
I artificially introduced errors in e.g. a port list (where ZeroOrMore is applicable).
I found that OneOrMore and ZeroOrMore behave the same in that respect.
Your suggestion of adding the StringEnd() now makes the parser raise an exception when
introducing a syntax error inside a section where ZerOrMore is applicable.
The information about where the error is is not very helpful though, but this is less of a
problem for me (at least for the moment)
Thanks again!
RJB
Logged In: YES
user_id=893320
Originator: NO
Ok, I will close this request then.
The problem of exceptions not really reporting the exact location of a syntax error is a confounding problem. I've taken several attempts at it, but it is an issue with the fundamental design of pyparsing, and Zero/OneOrMore are the usual suspects. I'm glad this is not a showstopper for you (at least for the moment).
-- Paul