Python 3.0

Sintaxes completas representadas por Diagrama Sintático - Diagrama de Sintaxe (ver convenções) ou BNF (ver convenções).
Diagrama Sintático - Diagrama de Sintaxe | Diagrama Sintático - Diagrama de Sintaxe e BNF | BNF
file_input : [(NEWLINE | stmt)+] ENDMARKER
single_input : stmt? NEWLINE
eval_input : test {',' test} ','? [NEWLINE+] ENDMARKER
stmt : small_stmt (';' small_stmt)* ';'? |if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | [decorator+] (classdef | funcdef)
if_stmt : 'if' [(test ':' suite 'elif')+] test ':' suite ['else' ':' suite]
while_stmt : 'while' test':' suite ['else' ':' suite]
for_stmt : 'for' '*'? expr (',' '*'? expr)* ','? 'in' test (',' test)* ','? ':' suite['else' ':' suite]
with_stmt : 'with' test [ 'as' expr ] ':' suite
decorator : '@' NAME ('.' NAME)* [ '(' arglist')' ] NEWLINE
classdef : 'class' NAME ['(' arglist ')'] ':' suite
funcdef : 'def' NAME '(' typedargslist')'['->' test] ':' suite
small_stmt : expr_stmt | 'del' '*'? expr (',' '*'? expr)* ','? | 'pass'| flow_stmt | import_stmt | ('global '|' nonlocal') NAME (',' NAME)* |'assert' test [',' test]
expr_stmt : test (',' test)* ','? ('+ - * / ** & | ^ < < > > //' '=' (yield_expr | test (',' test)* ','?)|('=' (yield_expr | test (',' test)* ','?))+ | "")
flow_stmt : 'break'| 'continue' | 'return' [test (',' test)* ','?] | 'raise' [test ['from' test]] | yield_expr
import_stmt : 'import' dotted_as_names | import_from
import_from : 'from' ([('.' | '...')+] NAME ('.'NAME)* | ('.' |'...')+) 'import' ('*' | '(' import_as_names ')' | import_as_names)
import_as_names : NAME ['as' NAME] (',' NAME ['as' NAME])* ','?
try_stmt : 'try' ':' suite((except_clause ':' suite)+ ['else' ':' suite] ("" | 'finally' ':' suite) | 'finally' ':' suite)
except_clause : 'except' [test ['as' NAME]]
typedargslist : ([name_test ',']('*' tfpdef? [',' name_test] [',' '**' tfpdef] | '**' tfpdef) | name_test? ','?)
name_test : tfpdef ['=' test] (',' tfpdef ['=' test])*
tfpdef : NAME [':' test]
test : or_test ['if' or_test 'else' test] | 'lambda' varargslist ':' test
suite : small_stmt (';' small_stmt)* [';'] NEWLINE | NEWLINE INDENT stmt+ DEDENT
arglist : (argument ',')* (argument [','] | '*' test (',' argument)* [',' '**' test] | '**' test)
argument : test (comp_for? | test '=' test)
varargslist : name_test_list ',' ('*' [NAME] [',' name_test_list] [',' '**' NAME] | '**' NAME)| name_test_list [',']
name_test_list : NAME ['=' test]{',' NAME ['=' test]}
yield_expr : 'yield' [test (',' test)* ','?]
or_test : ('not'+)? '*'? expr("< | > | == | >= | <= | != | in | not in | is | is not" '*'?expr)* (('and' | 'or') ('not'+)? '*'? expr("< | > | == | >= | <= | != | in | not in | is | is not" '*' ?expr)*)*
expr : '+ | - | ~'? atom [trailer+]('+ - * / % ** & | ^ << >> //' '+ | - | ~'? atom [trailer+])*
atom : ('(' ([yield_expr]|testlist_comp) ')'|'['testlist_comp']'|'{'dictorsetmaker '}' |NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False')
testlist_comp : [test (comp_for | [(',' test)+] [','])]
dictorsetmaker : test ( (':' test (comp_for |[(',' test ':' test)+] ','?)) |[(comp_for | ',' test)+] ','? )
trailer : '(' arglist ')' | '[' subscript (','subscript)* ','? ']' |'.' NAME
subscript : test | [test] ':' test? (':' test?)?
dotted_as_names : NAME ('.' NAME)* ['as' NAME](',' NAME ('.' NAME)*['as' NAME])*
comp_for : ('for' '*'? expr (',' '*'? expr)* ','? 'in' or_test [('if'test_nocond)+])+
test_nocond : or_test | 'lambda' varargslist ':' test_nocond