python的文法
linxh
|
1#
linxh 发表于 2007-01-27 01:18
python的文法
本文转自:
http://tianqio.spaces.live.com/blog/cns!A5F48DB7C8C16F23!158.entry?_c=BlogPart 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 ::= longstringchar ::= escapeseq ::= "\" 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] ")" test ::= and_test ( "or" and_test )* | lambda_form testlist ::= test ( "," test )* [ "," ] 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 | 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 "\;SPMamp;" shift_expr xor_expr ::= and_expr | xor_expr "\textasciicircum" 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 ::= "+=" | "-=" | "*=" | "/=" | "\%=" | "**=" | ">>=" | "\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 |