identifier ::= (letter|\dquot_) (letter | digit | \dquot_)* letter ::= lowercase | uppercase lowercase ::= \dquota...\dquotz uppercase ::= \dquotA...\dquotZ digit ::= \dquot0...\dquot9 stringliteral ::= [stringprefix](shortstring | longstring) stringprefix ::= \dquotr | \dquotu | \dquotur | \dquotR | \dquotU | \dquotUR | \dquotUr | \dquotuR shortstring ::= \dquot' shortstringitem* \dquot' | '"' shortstringitem* '"' longstring ::= \dquot''' longstringitem* \dquot''' | '"""' longstringitem* '"""' shortstringitem ::= shortstringchar | escapeseq longstringitem ::= longstringchar | escapeseq shortstringchar ::= longstringchar ::= escapeseq ::= \dquot\ longinteger ::= integer (\dquotl | \dquotL) integer ::= decimalinteger | octinteger | hexinteger decimalinteger ::= nonzerodigit digit* | \dquot0 octinteger ::= \dquot0 octdigit+ hexinteger ::= \dquot0 (\dquotx | \dquotX) hexdigit+ nonzerodigit ::= \dquot1...\dquot9 octdigit ::= \dquot0...\dquot7 hexdigit ::= digit | \dquota...\dquotf | \dquotA...\dquotF floatnumber ::= pointfloat | exponentfloat pointfloat ::= [intpart] fraction | intpart \dquot. exponentfloat ::= (intpart | pointfloat) exponent intpart ::= digit+ fraction ::= \dquot. digit+ exponent ::= (\dquote | \dquotE) [\dquot+ | \dquot-] digit+ imagnumber ::= (floatnumber | intpart) (\dquotj | \dquotJ) atom ::= identifier | literal | enclosure enclosure ::= parenth_form | list_display | dict_display | string_conversion literal ::= stringliteral | integer | longinteger | floatnumber | imagnumber parenth_form ::= \dquot( [expression_list] \dquot) test ::= and_test ( \dquotor and_test )* | lambda_form testlist ::= test ( \dquot, test )* [ \dquot, ] list_display ::= \dquot[ [listmaker] \dquot] listmaker ::= expression ( list_for | ( \dquot, expression )* [\dquot,] ) list_iter ::= list_for | list_if list_for ::= \dquotfor expression_list \dquotin testlist [list_iter] list_if ::= \dquotif test [list_iter] dict_display ::= \dquot\{ [key_datum_list] \dquot\} key_datum_list ::= key_datum (\dquot, key_datum)* [\dquot,] key_datum ::= expression \dquot: expression string_conversion ::= \dquot` expression_list \dquot` primary ::= atom | attributeref | subscription | slicing | call attributeref ::= primary \dquot. identifier subscription ::= primary \dquot[ expression_list \dquot] slicing ::= simple_slicing | extended_slicing simple_slicing ::= primary \dquot[ short_slice \dquot] extended_slicing ::= primary \dquot[ slice_list \dquot] slice_list ::= slice_item (\dquot, slice_item)* [\dquot,] slice_item ::= expression | proper_slice | ellipsis proper_slice ::= short_slice | long_slice short_slice ::= [lower_bound] \dquot: [upper_bound] long_slice ::= short_slice \dquot: [stride] lower_bound ::= expression upper_bound ::= expression stride ::= expression ellipsis ::= \dquot... call ::= primary \dquot( [argument_list [\dquot,]] \dquot) argument_list ::= positional_arguments [\dquot, keyword_arguments] [\dquot, \dquot* expression] [\dquot, \dquot** expression] | keyword_arguments [\dquot, \dquot* expression] [\dquot, \dquot** expression] | \dquot* expression [\dquot, \dquot** expression] | \dquot** expression positional_arguments ::= expression (\dquot, expression)* keyword_arguments ::= keyword_item (\dquot, keyword_item)* keyword_item ::= identifier \dquot= expression power ::= primary [\dquot** u_expr] u_expr ::= power | \dquot- u_expr | \dquot+ u_expr | \dquot\~ u_expr m_expr ::= u_expr | m_expr \dquot* u_expr | m_expr \dquot// u_expr | m_expr \dquot/ u_expr | m_expr \dquot\% u_expr a_expr ::= m_expr | a_expr \dquot+ m_expr | a_expr \dquot- m_expr shift_expr ::= a_expr | shift_expr ( \dquot<< | \dquot>> ) a_expr and_expr ::= shift_expr | and_expr \dquot\& shift_expr xor_expr ::= and_expr | xor_expr \dquot\textasciicircum and_expr or_expr ::= xor_expr | or_expr \dquot| xor_expr comparison ::= or_expr ( comp_operator or_expr )* comp_operator ::= \dquot< | \dquot> | \dquot== | \dquot>= | \dquot<= | \dquot<> | \dquot!= | \dquotis [\dquotnot] | [\dquotnot] \dquotin expression ::= or_test | lambda_form or_test ::= and_test | or_test \dquotor and_test and_test ::= not_test | and_test \dquotand not_test not_test ::= comparison | \dquotnot not_test lambda_form ::= \dquotlambda [parameter_list]: expression expression_list ::= expression ( \dquot, expression )* [\dquot,] simple_stmt ::= expression_stmt | assert_stmt | assignment_stmt | augmented_assignment_stmt | pass_stmt | del_stmt | print_stmt | return_stmt | yield_stmt | raise_stmt | break_stmt | continue_stmt | import_stmt | global_stmt | exec_stmt expression_stmt ::= expression_list assert_stmt ::= \dquotassert expression [\dquot, expression] assignment_stmt ::= (target_list \dquot=)+ expression_list target_list ::= target (\dquot, target)* [\dquot,] target ::= identifier | \dquot( target_list \dquot) | \dquot[ target_list \dquot] | attributeref | subscription | slicing augmented_assignment_stmt ::= target augop expression_list augop ::= \dquot+= | \dquot-= | \dquot*= | \dquot/= | \dquot\%= | \dquot**= | \dquot>>= | \dquot<<= | \dquot\&= | \dquot\textasciicircum= | \dquot|= pass_stmt ::= \dquotpass del_stmt ::= \dquotdel target_list print_stmt ::= \dquotprint ( \optionalexpression (\dquot, expression)* \optional\dquot, | \dquot>\code> expression \optional(\dquot, expression)+ \optional\dquot, ) return_stmt ::= \dquotreturn [expression_list] yield_stmt ::= \dquotyield expression_list raise_stmt ::= \dquotraise [expression [\dquot, expression [\dquot, expression]]] break_stmt ::= \dquotbreak continue_stmt ::= \dquotcontinue import_stmt ::= \dquotimport module [\dquotas name] ( \dquot, module [\dquotas name] )* | \dquotfrom module \dquotimport identifier [\dquotas name] ( \dquot, identifier [\dquotas name] )* | \dquotfrom module \dquotimport \dquot* module ::= (identifier \dquot.)* identifier global_stmt ::= \dquotglobal identifier (\dquot, identifier)* exec_stmt ::= \dquotexec expression [\dquotin expression [\dquot, expression]] compound_stmt ::= if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT statement ::= stmt_list NEWLINE | compound_stmt stmt_list ::= simple_stmt (\dquot; simple_stmt)* [\dquot;] if_stmt ::= \dquotif expression \dquot: suite ( \dquotelif expression \dquot: suite )* [\dquotelse \dquot: suite] while_stmt ::= \dquotwhile expression \dquot: suite [\dquotelse \dquot: suite] for_stmt ::= \dquotfor target_list \dquotin expression_list \dquot: suite [\dquotelse \dquot: suite] try_stmt ::= try_exc_stmt | try_fin_stmt try_exc_stmt ::= \dquottry \dquot: suite (\dquotexcept [expression [\dquot, target]] \dquot: suite)+ [\dquotelse \dquot: suite] try_fin_stmt ::= \dquottry \dquot: suite \dquotfinally \dquot: suite funcdef ::= \dquotdef funcname \dquot( [parameter_list] \dquot) \dquot: suite parameter_list ::= (defparameter \dquot,)* (\dquot* identifier [, \dquot** identifier] | \dquot** identifier | defparameter [\dquot,]) defparameter ::= parameter [\dquot= expression] sublist ::= parameter (\dquot, parameter)* [\dquot,] parameter ::= identifier | \dquot( sublist \dquot) funcname ::= identifier classdef ::= \dquotclass classname [inheritance] \dquot: suite inheritance ::= \dquot( [expression_list] \dquot) classname ::= identifier file_input ::= (NEWLINE | statement)* interactive_input ::= [stmt_list] NEWLINE | compound_stmt NEWLINE eval_input ::= expression_list NEWLINE* input_input ::= expression_list NEWLINE