# Unit Test: productionset.006

$Id: productionset.006.xml 4105 2004-12-15 23:00:31Z xmldoc $
Norman Walsh

    ndw@nwalsh.com

Python Grammar

Derived pseudo-mechanically from .

identifier (letter|"_") (letter|digit| "_")* letter lowercase
| uppercase lowercase "a"..."z" uppercase "A"..."Z" digit "0"..."9" stringliteral [stringprefix](shortstring | longstring) stringprefix "r" | "u" | "ur" | "R" | "U" | "UR" | "Ur" | "uR" shortstring "'" shortstringitem* "'"
| '"' shortstringitem* '"' longstring "'''" longstringitem* "'''"
| '"""' longstringitem* '"""' shortstringitem shortstringchar
| escapeseq longstringitem longstringchar
| escapeseq shortstringchar any ASCII character except "\" or newline or the quote longstringchar any ASCII character except "\" escapeseq "\" any ASCII character longinteger integer ("l" | "L") integer decimalinteger
| octinteger
| hexinteger decimalinteger nonzerodigit digit* | "0" octinteger "0" octdigit+ hexinteger "0" ("x" | "X") hexdigit+ nonzerodigit "1"..."9" octdigit "0"..."7" hexdigit digit
| "a"..."f"
| "A"..."F" floatnumber pointfloat
| exponentfloat pointfloat [intpart] fraction
| intpart "." exponentfloat (intpart | pointfloat) exponent intpart digit+ fraction "." digit+ exponent ("e" | "E") ["+" | "-"] digit+ imagnumber (floatnumber
| intpart) ("j" | "J") atom identifier
| literal
| enclosure enclosure parenth_form
| list_display
| dict_display
| string_conversion literal stringliteral
| integer
| longinteger
| floatnumber
| imagnumber parenth_form "(" [expression_list] ")" list_display "[" [listmaker] "]" listmaker expression ( list_for | ( "," expression)* [","] ) list_iter list_for
| list_if list_for "for" expression_list "in" testlist [list_iter] list_if "if" test [list_iter] dict_display "\{" [key_datum_list] "\}" key_datum_list key_datum ("," key_datum)* [","] key_datum expression ":" expression string_conversion "`" expression_list "`" primary atom
| attributeref
| subscription
| slicing
| call attributeref primary "." identifier subscription primary "[" expression_list "]" slicing simple_slicing
| extended_slicing simple_slicing primary "[" short_slice "]" extended_slicing primary "[" slice_list "]" slice_list slice_item ("," slice_item)* [","] slice_item expression
| proper_slice
| ellipsis proper_slice short_slice
| long_slice short_slice [lower_bound] ":" [upper_bound] long_slice short_slice ":" [stride] lower_bound expression upper_bound expression stride expression ellipsis "..." call primary "(" [argument_list [","]] ")" argument_list positional_arguments ["," keyword_arguments ["," "*" expression ["," "**" expression]]]
| keyword_arguments ["," "*" expression ["," "**" expression]]
| "*" expression ["," "**" expression]
| "**" expression positional_arguments expression ("," expression)* keyword_arguments keyword_item ("," keyword_item)* keyword_item identifier "=" expression power primary ["**" u_expr] u_expr power
| "-" u_expr
| "+" u_expr
| "\~" u_expr m_expr u_expr
| m_expr "*" u_expr
| m_expr "/" u_expr
| m_expr "\%" u_expr a_expr m_expr
| aexpr "+" m_expr aexpr "-" 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 "<"
| ">"
| "=="
| ">="
| "<="
| "<>"
| "!="
| "is" ["not"]
| ["not"] "in" expression or_test
| lambda_form or_test and_test
| or_test "or" and_test and_test not_test
| and_test "and" not_test not_test comparison
| "not" not_test lambda_form "lambda" [parameter_list]: expression expression_list expression ( "," expression )* [","] 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 "assert" expression ["," expression] assignment_stmt (target_list "=")+ expression_list target_list target ("," target)* [","] target identifier
| "(" target_list ")"
| "[" target_list "]"
| attributeref
| subscription
| slicing augmented_assignment_stmt target augop expression_list augop "+="
| "-="
| "*="
| "/="
| "\%="
| "**="
| ">>="
| "<<="
| "\&="
| "\textasciicircum="
| "|=" pass_stmt "pass" del_stmt "del" target_list print_stmt "print" ( \optionalexpression ("," expression)* \optional"," | ">\code>" expression \optional("," expression)+ \optional"," ) return_stmt "return" [expression_list] yield_stmt "yield" expression_list raise_stmt "raise" [expression ["," expression ["," expression]]] break_stmt "break" continue_stmt "continue" import_stmt "import" module ["as" name] ( "," module ["as" name] )*
| "from" module "import" identifier ["as" name] ( "," identifier ["as" name] )*
| "from" module "import" "*" module (identifier ".")* identifier global_stmt "global" identifier ("," identifier)* exec_stmt "exec" expression ["in" expression ["," 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 (";" simple_stmt)* [";"] if_stmt "if" expression ":" suite ( "elif" expression ":" suite )* ["else" ":" suite] while_stmt "while" expression ":" suite ["else" ":" suite] for_stmt "for" target_list "in" expression_list ":" suite ["else" ":" suite] try_stmt try_exc_stmt
| try_fin_stmt try_exc_stmt "try" ":" suite ("except" [expression ["," target]] ":" suite)+ ["else" ":" suite] try_fin_stmt "try" ":" suite "finally" ":" suite funcdef "def" funcname "(" [parameter_list] ")" ":" suite parameter_list (defparameter ",")* ("*" identifier [, "**" identifier]
| "**" identifier
| defparameter [","]) defparameter parameter ["=" expression] sublist parameter ("," parameter)* [","] parameter identifier | "(" sublist ")" funcname identifier classdef "class" classname [inheritance] ":" suite inheritance "(" [expression_list] ")" classname identifier file_input (NEWLINE | statement)* interactive_input [stmt_list] NEWLINE | compound_stmt NEWLINE eval_input expression_list NEWLINE* input_input expression_list NEWLINE