[Python-ideas] Grammar for plus and minus unary ops
Jared Grubb
jared.grubb at gmail.com
Fri Mar 27 22:07:16 CET 2009
(Originally posted to python-dev, discussion moved here per request by
GvR; also fixed pseudo-code to not use a keyword as local var)
Begin forwarded message:
>
> I was recently reviewing some Python code for a friend who is a C++
> programmer, and he had code something like this:
>
> def foo():
> attempt = 0
> while attempt<MAX:
> ret = bar()
> if ret: break
> ++attempt
>
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20090327/6b74b435/attachment.html>
More information about the Python-ideas
mailing list