On Sat, Jul 11, 2015 at 10:02 AM, Stefan Ram <r...@zedat.fu-berlin.de> wrote: > I look at Python 3.4.3: > > a_expr ::= m_expr | a_expr "+" m_expr | a_expr "-" m_expr > > So, »not 0« must be an »m_expr« when used as the right operand of »+«. > > m_expr ::= u_expr | m_expr "*" u_expr | m_expr "//" u_expr | m_expr "/" > u_expr | m_expr "%" u_expr > u_expr ::= power | "-" u_expr | "+" u_expr | "~" u_expr > power ::= primary ["**" u_expr] > primary ::= atom | attributeref | subscription | slicing | call > atom ::= identifier | literal | enclosure > enclosure ::= parenth_form | list_display | dict_display | set_display | > generator_expression | yield_atom > > How can there be a »not«? > > »not« is used in > > not_test ::= comparison | "not" not_test > and_test ::= not_test | and_test "and" not_test > or_test ::= and_test | or_test "or" and_test > conditional_expression ::= or_test ["if" or_test "else" expression] > expression_nocond ::= or_test | lambda_expr_nocond > expression ::= conditional_expression | lambda_expr > > , but an »expression« is not an »m_expr«.
I must concur. The grammar as written does not actually produce 1 + not 0. I think it's still worthwhile opening a bug, because the behavior is surprising and possibly not intentional. -- https://mail.python.org/mailman/listinfo/python-list