atom ::= literal literal ::= integer | longinteger | floatnumber | "(" expression ")" primary ::= atom power ::= primary ["**" u_expr] u_expr ::= power | "-" u_expr | "+" u_expr m_expr ::= u_expr | m_expr "*" u_expr | m_expr "//" u_expr | m_expr "/" u_expr | m_expr "%" u_expr a_expr ::= m_expr | a_expr "+" m_expr | a_expr "-" m_expr shift_expr ::= a_expr | shift_expr ( "<<" | ">>" ) a_expr and_expr ::= shift_expr | and_expr "&" shift_expr xor_expr ::= and_expr | xor_expr "^" and_expr or_expr ::= xor_expr | or_expr "|" xor_expr comparison ::= or_expr ( comp_operator or_expr )* comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | "!=" expression ::= or_test or_test ::= and_test | or_test "or" and_test and_test ::= not_test | and_test "and" not_test not_test ::= comparison | "not" not_test simple_stmt ::= print_stmt print_stmt ::= "print" expression ("," expression)* [","] statement ::= stmt_list NEWLINE stmt_list ::= simple_stmt (";" simple_stmt)* [";"] file_input ::= (NEWLINE | statement)*