I was recently reviewing some Python code for a friend who is a C++
programmer, and he had code something like this:
def foo():
try = 0
while try<MAX:
ret = bar()
if ret: break
++try
I was a bit surprised that this was syntactically valid, and because
the timeout condition only occurred in exceptional cases, the error
has not yet caused any problems.
It appears that the grammar treats the above example as the unary + op
applied twice:
u_expr ::=
power | "-" u_expr
| "+" u_expr | "\~" u_expr
Playing in the interpreter, expressions like "1+++++++++5" and "1+-+-
+-+-+-+-5" evaluate to 6.
I'm not a EBNF expert, but it seems that we could modify the grammar
to be more restrictive so the above code would not be silently valid.
E.g., "++5" and "1+++5" and "1+-+5" are syntax errors, but still keep
"1++5", "1+-5", "1-+5" as valid. (Although, '~' throws in a kink...
should '~-5' be legal? Seems so...)
Jared
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com