1629 lines
36 KiB
Plaintext
1629 lines
36 KiB
Plaintext
================================================================================
|
|
Import statements
|
|
================================================================================
|
|
|
|
import a, b
|
|
import b.c as d
|
|
import a.b.c
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(import_statement
|
|
(dotted_name
|
|
(identifier))
|
|
(dotted_name
|
|
(identifier)))
|
|
(import_statement
|
|
(aliased_import
|
|
(dotted_name
|
|
(identifier)
|
|
(identifier))
|
|
(identifier)))
|
|
(import_statement
|
|
(dotted_name
|
|
(identifier)
|
|
(identifier)
|
|
(identifier))))
|
|
|
|
================================================================================
|
|
Import-from statements
|
|
================================================================================
|
|
|
|
from a import b
|
|
from a import *
|
|
from a import (b, c)
|
|
from a.b import c
|
|
from . import b
|
|
from .. import b
|
|
from .a import b
|
|
from ..a import b
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(import_from_statement
|
|
(dotted_name
|
|
(identifier))
|
|
(dotted_name
|
|
(identifier)))
|
|
(import_from_statement
|
|
(dotted_name
|
|
(identifier))
|
|
(wildcard_import))
|
|
(import_from_statement
|
|
(dotted_name
|
|
(identifier))
|
|
(dotted_name
|
|
(identifier))
|
|
(dotted_name
|
|
(identifier)))
|
|
(import_from_statement
|
|
(dotted_name
|
|
(identifier)
|
|
(identifier))
|
|
(dotted_name
|
|
(identifier)))
|
|
(import_from_statement
|
|
(relative_import
|
|
(import_prefix))
|
|
(dotted_name
|
|
(identifier)))
|
|
(import_from_statement
|
|
(relative_import
|
|
(import_prefix))
|
|
(dotted_name
|
|
(identifier)))
|
|
(import_from_statement
|
|
(relative_import
|
|
(import_prefix)
|
|
(dotted_name
|
|
(identifier)))
|
|
(dotted_name
|
|
(identifier)))
|
|
(import_from_statement
|
|
(relative_import
|
|
(import_prefix)
|
|
(dotted_name
|
|
(identifier)))
|
|
(dotted_name
|
|
(identifier))))
|
|
|
|
================================================================================
|
|
Future import statements
|
|
================================================================================
|
|
|
|
from __future__ import print_statement
|
|
from __future__ import python4
|
|
from __future__ import (absolute_import, division, print_function,
|
|
unicode_literals)
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(future_import_statement
|
|
(dotted_name
|
|
(identifier)))
|
|
(future_import_statement
|
|
(dotted_name
|
|
(identifier)))
|
|
(future_import_statement
|
|
(dotted_name
|
|
(identifier))
|
|
(dotted_name
|
|
(identifier))
|
|
(dotted_name
|
|
(identifier))
|
|
(dotted_name
|
|
(identifier))))
|
|
|
|
================================================================================
|
|
Print statements
|
|
================================================================================
|
|
|
|
print a
|
|
print b, c
|
|
print 0 or 1, 1 or 0,
|
|
print 0 or 1
|
|
print not True
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(print_statement
|
|
(identifier))
|
|
(print_statement
|
|
(identifier)
|
|
(identifier))
|
|
(print_statement
|
|
(boolean_operator
|
|
(integer)
|
|
(integer))
|
|
(boolean_operator
|
|
(integer)
|
|
(integer)))
|
|
(print_statement
|
|
(boolean_operator
|
|
(integer)
|
|
(integer)))
|
|
(print_statement
|
|
(not_operator
|
|
(true))))
|
|
|
|
================================================================================
|
|
Print statements with redirection
|
|
================================================================================
|
|
|
|
print >> a
|
|
print >> a, "b", "c"
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(print_statement
|
|
(chevron
|
|
(identifier)))
|
|
(print_statement
|
|
(chevron
|
|
(identifier))
|
|
(string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end))
|
|
(string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end))))
|
|
|
|
================================================================================
|
|
Assert statements
|
|
================================================================================
|
|
|
|
assert a
|
|
assert b, c
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(assert_statement
|
|
(identifier))
|
|
(assert_statement
|
|
(identifier)
|
|
(identifier)))
|
|
|
|
================================================================================
|
|
Expression statements
|
|
================================================================================
|
|
|
|
a
|
|
b + c
|
|
1, 2, 3
|
|
1, 2, 3,
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(expression_statement
|
|
(identifier))
|
|
(expression_statement
|
|
(binary_operator
|
|
(identifier)
|
|
(identifier)))
|
|
(expression_statement
|
|
(integer)
|
|
(integer)
|
|
(integer))
|
|
(expression_statement
|
|
(integer)
|
|
(integer)
|
|
(integer)))
|
|
|
|
================================================================================
|
|
Delete statements
|
|
================================================================================
|
|
|
|
del a[1], b[2]
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(delete_statement
|
|
(expression_list
|
|
(subscript
|
|
(identifier)
|
|
(integer))
|
|
(subscript
|
|
(identifier)
|
|
(integer)))))
|
|
|
|
================================================================================
|
|
Control-flow statements
|
|
================================================================================
|
|
|
|
while true:
|
|
pass
|
|
break
|
|
continue
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(while_statement
|
|
condition: (identifier)
|
|
body: (block
|
|
(pass_statement)
|
|
(break_statement)
|
|
(continue_statement))))
|
|
|
|
================================================================================
|
|
Return statements
|
|
================================================================================
|
|
|
|
return
|
|
return a + b, c
|
|
return not b
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(return_statement)
|
|
(return_statement
|
|
(expression_list
|
|
(binary_operator
|
|
(identifier)
|
|
(identifier))
|
|
(identifier)))
|
|
(return_statement
|
|
(not_operator
|
|
(identifier))))
|
|
|
|
================================================================================
|
|
If statements
|
|
================================================================================
|
|
|
|
if a:
|
|
b
|
|
c
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(if_statement
|
|
condition: (identifier)
|
|
consequence: (block
|
|
(expression_statement
|
|
(identifier))
|
|
(expression_statement
|
|
(identifier)))))
|
|
|
|
================================================================================
|
|
If else statements
|
|
================================================================================
|
|
|
|
if a:
|
|
b
|
|
elif c:
|
|
d
|
|
else:
|
|
f
|
|
|
|
if a:
|
|
b
|
|
else:
|
|
f
|
|
|
|
if a: b
|
|
|
|
if a: b; c
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(if_statement
|
|
condition: (identifier)
|
|
consequence: (block
|
|
(expression_statement
|
|
(identifier)))
|
|
alternative: (elif_clause
|
|
condition: (identifier)
|
|
consequence: (block
|
|
(expression_statement
|
|
(identifier))))
|
|
alternative: (else_clause
|
|
body: (block
|
|
(expression_statement
|
|
(identifier)))))
|
|
(if_statement
|
|
condition: (identifier)
|
|
consequence: (block
|
|
(expression_statement
|
|
(identifier)))
|
|
alternative: (else_clause
|
|
body: (block
|
|
(expression_statement
|
|
(identifier)))))
|
|
(if_statement
|
|
condition: (identifier)
|
|
consequence: (block
|
|
(expression_statement
|
|
(identifier))))
|
|
(if_statement
|
|
condition: (identifier)
|
|
consequence: (block
|
|
(expression_statement
|
|
(identifier))
|
|
(expression_statement
|
|
(identifier)))))
|
|
|
|
================================================================================
|
|
Nested if statements
|
|
================================================================================
|
|
|
|
if a:
|
|
if b:
|
|
c
|
|
else:
|
|
if e:
|
|
f
|
|
g
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(if_statement
|
|
condition: (identifier)
|
|
consequence: (block
|
|
(if_statement
|
|
condition: (identifier)
|
|
consequence: (block
|
|
(expression_statement
|
|
(identifier)))
|
|
alternative: (else_clause
|
|
body: (block
|
|
(if_statement
|
|
condition: (identifier)
|
|
consequence: (block
|
|
(expression_statement
|
|
(identifier)))))))))
|
|
(expression_statement
|
|
(identifier)))
|
|
|
|
================================================================================
|
|
While statements
|
|
================================================================================
|
|
|
|
while a:
|
|
b
|
|
|
|
while c:
|
|
d
|
|
else:
|
|
e
|
|
f
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(while_statement
|
|
condition: (identifier)
|
|
body: (block
|
|
(expression_statement
|
|
(identifier))))
|
|
(while_statement
|
|
condition: (identifier)
|
|
body: (block
|
|
(expression_statement
|
|
(identifier)))
|
|
alternative: (else_clause
|
|
body: (block
|
|
(expression_statement
|
|
(identifier))
|
|
(expression_statement
|
|
(identifier))))))
|
|
|
|
================================================================================
|
|
For statements
|
|
================================================================================
|
|
|
|
for line, i in lines:
|
|
print line
|
|
for character, j in line:
|
|
print character
|
|
else:
|
|
print x
|
|
|
|
for x, in [(1,), (2,), (3,)]:
|
|
x
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(for_statement
|
|
left: (pattern_list
|
|
(identifier)
|
|
(identifier))
|
|
right: (identifier)
|
|
body: (block
|
|
(print_statement
|
|
argument: (identifier))
|
|
(for_statement
|
|
left: (pattern_list
|
|
(identifier)
|
|
(identifier))
|
|
right: (identifier)
|
|
body: (block
|
|
(print_statement
|
|
argument: (identifier)))))
|
|
alternative: (else_clause
|
|
body: (block
|
|
(print_statement
|
|
argument: (identifier)))))
|
|
(for_statement
|
|
left: (pattern_list
|
|
(identifier))
|
|
right: (list
|
|
(tuple
|
|
(integer))
|
|
(tuple
|
|
(integer))
|
|
(tuple
|
|
(integer)))
|
|
body: (block
|
|
(expression_statement
|
|
(identifier)))))
|
|
|
|
================================================================================
|
|
Try statements
|
|
================================================================================
|
|
|
|
try:
|
|
a
|
|
except b:
|
|
c
|
|
except d as e:
|
|
f
|
|
except g, h:
|
|
i
|
|
except:
|
|
j
|
|
|
|
try:
|
|
a
|
|
except b:
|
|
c
|
|
d
|
|
else:
|
|
e
|
|
finally:
|
|
f
|
|
|
|
try:
|
|
a
|
|
except* b:
|
|
c
|
|
except* d as e:
|
|
f
|
|
else:
|
|
g
|
|
finally:
|
|
h
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(try_statement
|
|
body: (block
|
|
(expression_statement
|
|
(identifier)))
|
|
(except_clause
|
|
(identifier)
|
|
(block
|
|
(expression_statement
|
|
(identifier))))
|
|
(except_clause
|
|
(as_pattern
|
|
(identifier)
|
|
alias: (as_pattern_target
|
|
(identifier)))
|
|
(block
|
|
(expression_statement
|
|
(identifier))))
|
|
(except_clause
|
|
(identifier)
|
|
(identifier)
|
|
(block
|
|
(expression_statement
|
|
(identifier))))
|
|
(except_clause
|
|
(block
|
|
(expression_statement
|
|
(identifier)))))
|
|
(try_statement
|
|
body: (block
|
|
(expression_statement
|
|
(identifier)))
|
|
(except_clause
|
|
(identifier)
|
|
(block
|
|
(expression_statement
|
|
(identifier))
|
|
(expression_statement
|
|
(identifier))))
|
|
(else_clause
|
|
body: (block
|
|
(expression_statement
|
|
(identifier))))
|
|
(finally_clause
|
|
(block
|
|
(expression_statement
|
|
(identifier)))))
|
|
(try_statement
|
|
body: (block
|
|
(expression_statement
|
|
(identifier)))
|
|
(except_group_clause
|
|
(identifier)
|
|
(block
|
|
(expression_statement
|
|
(identifier))))
|
|
(except_group_clause
|
|
(as_pattern
|
|
(identifier)
|
|
alias: (as_pattern_target
|
|
(identifier)))
|
|
(block
|
|
(expression_statement
|
|
(identifier))))
|
|
(else_clause
|
|
body: (block
|
|
(expression_statement
|
|
(identifier))))
|
|
(finally_clause
|
|
(block
|
|
(expression_statement
|
|
(identifier))))))
|
|
|
|
================================================================================
|
|
With statements
|
|
================================================================================
|
|
|
|
with a as b:
|
|
c
|
|
|
|
with (open('d') as d,
|
|
open('e') as e):
|
|
f
|
|
|
|
with e as f, g as h,:
|
|
i
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(with_statement
|
|
(with_clause
|
|
(with_item
|
|
(as_pattern
|
|
(identifier)
|
|
(as_pattern_target
|
|
(identifier)))))
|
|
(block
|
|
(expression_statement
|
|
(identifier))))
|
|
(with_statement
|
|
(with_clause
|
|
(with_item
|
|
(as_pattern
|
|
(call
|
|
(identifier)
|
|
(argument_list
|
|
(string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end))))
|
|
(as_pattern_target
|
|
(identifier))))
|
|
(with_item
|
|
(as_pattern
|
|
(call
|
|
(identifier)
|
|
(argument_list
|
|
(string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end))))
|
|
(as_pattern_target
|
|
(identifier)))))
|
|
(block
|
|
(expression_statement
|
|
(identifier))))
|
|
(with_statement
|
|
(with_clause
|
|
(with_item
|
|
(as_pattern
|
|
(identifier)
|
|
(as_pattern_target
|
|
(identifier))))
|
|
(with_item
|
|
(as_pattern
|
|
(identifier)
|
|
(as_pattern_target
|
|
(identifier)))))
|
|
(block
|
|
(expression_statement
|
|
(identifier)))))
|
|
|
|
================================================================================
|
|
Async Function definitions
|
|
================================================================================
|
|
|
|
async def a():
|
|
b
|
|
|
|
async def c(d):
|
|
e
|
|
|
|
async def g(g, h,):
|
|
i
|
|
|
|
async def c(a: str):
|
|
a
|
|
|
|
async def c(a: b.c):
|
|
a
|
|
|
|
async def d(a: Sequence[T]) -> T:
|
|
a
|
|
|
|
async def i(a, b=c, *c, **d):
|
|
a
|
|
|
|
async def d(a: str) -> None:
|
|
return None
|
|
|
|
async def d(a:str="default", b=c) -> None:
|
|
return None
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters)
|
|
body: (block
|
|
(expression_statement
|
|
(identifier))))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(identifier))
|
|
body: (block
|
|
(expression_statement
|
|
(identifier))))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(identifier)
|
|
(identifier))
|
|
body: (block
|
|
(expression_statement
|
|
(identifier))))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(typed_parameter
|
|
(identifier)
|
|
type: (type
|
|
(identifier))))
|
|
body: (block
|
|
(expression_statement
|
|
(identifier))))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(typed_parameter
|
|
(identifier)
|
|
type: (type
|
|
(attribute
|
|
object: (identifier)
|
|
attribute: (identifier)))))
|
|
body: (block
|
|
(expression_statement
|
|
(identifier))))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(typed_parameter
|
|
(identifier)
|
|
type: (type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier)))))))
|
|
return_type: (type
|
|
(identifier))
|
|
body: (block
|
|
(expression_statement
|
|
(identifier))))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(identifier)
|
|
(default_parameter
|
|
name: (identifier)
|
|
value: (identifier))
|
|
(list_splat_pattern
|
|
(identifier))
|
|
(dictionary_splat_pattern
|
|
(identifier)))
|
|
body: (block
|
|
(expression_statement
|
|
(identifier))))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(typed_parameter
|
|
(identifier)
|
|
type: (type
|
|
(identifier))))
|
|
return_type: (type
|
|
(none))
|
|
body: (block
|
|
(return_statement
|
|
(none))))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(typed_default_parameter
|
|
name: (identifier)
|
|
type: (type
|
|
(identifier))
|
|
value: (string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end)))
|
|
(default_parameter
|
|
name: (identifier)
|
|
value: (identifier)))
|
|
return_type: (type
|
|
(none))
|
|
body: (block
|
|
(return_statement
|
|
(none)))))
|
|
|
|
================================================================================
|
|
Function definitions
|
|
================================================================================
|
|
|
|
def e((a,b)):
|
|
return (a,b)
|
|
|
|
def e(*list: str):
|
|
pass
|
|
|
|
def e(**list: str):
|
|
pass
|
|
|
|
def f():
|
|
nonlocal a
|
|
|
|
def g(h, i, /, j, *, k=100, **kwarg):
|
|
return h,i,j,k,kwarg
|
|
|
|
def h(*a):
|
|
i((*a))
|
|
j(((*a)))
|
|
|
|
def foo():
|
|
pass \
|
|
\
|
|
\
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(tuple_pattern
|
|
(identifier)
|
|
(identifier)))
|
|
body: (block
|
|
(return_statement
|
|
(tuple
|
|
(identifier)
|
|
(identifier)))))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(typed_parameter
|
|
(list_splat_pattern
|
|
(identifier))
|
|
type: (type
|
|
(identifier))))
|
|
body: (block
|
|
(pass_statement)))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(typed_parameter
|
|
(dictionary_splat_pattern
|
|
(identifier))
|
|
type: (type
|
|
(identifier))))
|
|
body: (block
|
|
(pass_statement)))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters)
|
|
body: (block
|
|
(nonlocal_statement
|
|
(identifier))))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(identifier)
|
|
(identifier)
|
|
(positional_separator)
|
|
(identifier)
|
|
(keyword_separator)
|
|
(default_parameter
|
|
name: (identifier)
|
|
value: (integer))
|
|
(dictionary_splat_pattern
|
|
(identifier)))
|
|
body: (block
|
|
(return_statement
|
|
(expression_list
|
|
(identifier)
|
|
(identifier)
|
|
(identifier)
|
|
(identifier)
|
|
(identifier)))))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(list_splat_pattern
|
|
(identifier)))
|
|
body: (block
|
|
(expression_statement
|
|
(call
|
|
function: (identifier)
|
|
arguments: (argument_list
|
|
(parenthesized_expression
|
|
(list_splat
|
|
(identifier))))))
|
|
(expression_statement
|
|
(call
|
|
function: (identifier)
|
|
arguments: (argument_list
|
|
(parenthesized_expression
|
|
(parenthesized_expression
|
|
(list_splat
|
|
(identifier)))))))))
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters)
|
|
body: (block
|
|
(pass_statement)))
|
|
(line_continuation)
|
|
(line_continuation)
|
|
(line_continuation))
|
|
|
|
================================================================================
|
|
Empty blocks
|
|
================================================================================
|
|
|
|
# These are not actually valid python; blocks
|
|
# must contain at least one statement. But we
|
|
# allow them because error recovery for empty
|
|
# blocks doesn't work very well otherwise.
|
|
def a(b, c):
|
|
|
|
if d:
|
|
print e
|
|
while f():
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(comment)
|
|
(comment)
|
|
(comment)
|
|
(comment)
|
|
(function_definition
|
|
name: (identifier)
|
|
parameters: (parameters
|
|
(identifier)
|
|
(identifier))
|
|
body: (block))
|
|
(if_statement
|
|
condition: (identifier)
|
|
consequence: (block
|
|
(print_statement
|
|
argument: (identifier))
|
|
(while_statement
|
|
condition: (call
|
|
function: (identifier)
|
|
arguments: (argument_list))
|
|
body: (block)))))
|
|
|
|
================================================================================
|
|
Class definitions
|
|
================================================================================
|
|
|
|
class A:
|
|
def b(self):
|
|
return c
|
|
class B():
|
|
pass
|
|
class B(method1):
|
|
def method1(self):
|
|
return
|
|
class C(method1, Sequence[T]):
|
|
pass
|
|
class D(Sequence[T, U]):
|
|
pass
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(class_definition
|
|
(identifier)
|
|
(block
|
|
(function_definition
|
|
(identifier)
|
|
(parameters
|
|
(identifier))
|
|
(block
|
|
(return_statement
|
|
(identifier))))))
|
|
(class_definition
|
|
(identifier)
|
|
(argument_list)
|
|
(block
|
|
(pass_statement)))
|
|
(class_definition
|
|
(identifier)
|
|
(argument_list
|
|
(identifier))
|
|
(block
|
|
(function_definition
|
|
(identifier)
|
|
(parameters
|
|
(identifier))
|
|
(block
|
|
(return_statement)))))
|
|
(class_definition
|
|
(identifier)
|
|
(argument_list
|
|
(identifier)
|
|
(subscript
|
|
(identifier)
|
|
(identifier)))
|
|
(block
|
|
(pass_statement)))
|
|
(class_definition
|
|
(identifier)
|
|
(argument_list
|
|
(subscript
|
|
(identifier)
|
|
(identifier)
|
|
(identifier)))
|
|
(block
|
|
(pass_statement))))
|
|
|
|
================================================================================
|
|
Class definitions with superclasses
|
|
================================================================================
|
|
|
|
class A(B, C):
|
|
def d():
|
|
e
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(class_definition
|
|
(identifier)
|
|
(argument_list
|
|
(identifier)
|
|
(identifier))
|
|
(block
|
|
(function_definition
|
|
(identifier)
|
|
(parameters)
|
|
(block
|
|
(expression_statement
|
|
(identifier)))))))
|
|
|
|
================================================================================
|
|
Decorated definitions
|
|
================================================================================
|
|
|
|
@a.b
|
|
class C:
|
|
@d(1)
|
|
@e[2].f.g
|
|
def f():
|
|
g
|
|
|
|
@f()
|
|
async def f():
|
|
g
|
|
|
|
@buttons[0].clicked.connect
|
|
def spam():
|
|
...
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(decorated_definition
|
|
(decorator
|
|
(attribute
|
|
(identifier)
|
|
(identifier)))
|
|
(class_definition
|
|
(identifier)
|
|
(block
|
|
(decorated_definition
|
|
(decorator
|
|
(call
|
|
(identifier)
|
|
(argument_list
|
|
(integer))))
|
|
(decorator
|
|
(attribute
|
|
(attribute
|
|
(subscript
|
|
(identifier)
|
|
(integer))
|
|
(identifier))
|
|
(identifier)))
|
|
(function_definition
|
|
(identifier)
|
|
(parameters)
|
|
(block
|
|
(expression_statement
|
|
(identifier)))))
|
|
(decorated_definition
|
|
(decorator
|
|
(call
|
|
(identifier)
|
|
(argument_list)))
|
|
(function_definition
|
|
(identifier)
|
|
(parameters)
|
|
(block
|
|
(expression_statement
|
|
(identifier))))))))
|
|
(decorated_definition
|
|
(decorator
|
|
(attribute
|
|
(attribute
|
|
(subscript
|
|
(identifier)
|
|
(integer))
|
|
(identifier))
|
|
(identifier)))
|
|
(function_definition
|
|
(identifier)
|
|
(parameters)
|
|
(block
|
|
(expression_statement
|
|
(ellipsis))))))
|
|
|
|
================================================================================
|
|
Raise statements
|
|
================================================================================
|
|
|
|
raise
|
|
raise RuntimeError('NO')
|
|
raise RunTimeError('NO') from e
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(raise_statement)
|
|
(raise_statement
|
|
(call
|
|
(identifier)
|
|
(argument_list
|
|
(string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end)))))
|
|
(raise_statement
|
|
(call
|
|
(identifier)
|
|
(argument_list
|
|
(string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end))))
|
|
(identifier)))
|
|
|
|
================================================================================
|
|
Comments
|
|
================================================================================
|
|
|
|
print a
|
|
# hi
|
|
print b # bye
|
|
print c
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(print_statement
|
|
(identifier))
|
|
(comment)
|
|
(print_statement
|
|
(identifier))
|
|
(comment)
|
|
(print_statement
|
|
(identifier)))
|
|
|
|
================================================================================
|
|
Comments at different indentation levels
|
|
================================================================================
|
|
|
|
if a:
|
|
# one
|
|
# two
|
|
# three
|
|
b
|
|
# four
|
|
c
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(if_statement
|
|
(identifier)
|
|
(comment)
|
|
(comment)
|
|
(comment)
|
|
(block
|
|
(expression_statement
|
|
(identifier))
|
|
(comment)
|
|
(expression_statement
|
|
(identifier)))))
|
|
|
|
================================================================================
|
|
Comments after dedents
|
|
================================================================================
|
|
|
|
if a:
|
|
b
|
|
|
|
# one
|
|
c
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(if_statement
|
|
(identifier)
|
|
(block
|
|
(expression_statement
|
|
(identifier))))
|
|
(comment)
|
|
(expression_statement
|
|
(identifier)))
|
|
|
|
================================================================================
|
|
Comments at the ends of indented blocks
|
|
================================================================================
|
|
|
|
if a:
|
|
b
|
|
# one
|
|
# two
|
|
|
|
if c:
|
|
d
|
|
# three
|
|
# four
|
|
|
|
def a():
|
|
if b:
|
|
b # comment
|
|
b # comment
|
|
|
|
# five
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(if_statement
|
|
(identifier)
|
|
(block
|
|
(expression_statement
|
|
(identifier))
|
|
(comment)
|
|
(comment)))
|
|
(if_statement
|
|
(identifier)
|
|
(block
|
|
(expression_statement
|
|
(identifier))
|
|
(comment)
|
|
(comment)))
|
|
(function_definition
|
|
(identifier)
|
|
(parameters)
|
|
(block
|
|
(if_statement
|
|
(identifier)
|
|
(block
|
|
(expression_statement
|
|
(identifier))
|
|
(comment)))
|
|
(expression_statement
|
|
(identifier))
|
|
(comment)))
|
|
(comment))
|
|
|
|
================================================================================
|
|
Newline tokens followed by comments
|
|
================================================================================
|
|
|
|
print "a"
|
|
# We need to recognize the newline *preceding* this comment, because there's no newline after it
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(print_statement
|
|
(string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end)))
|
|
(comment))
|
|
|
|
================================================================================
|
|
Global statements
|
|
================================================================================
|
|
|
|
global a
|
|
global a, b
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(global_statement
|
|
(identifier))
|
|
(global_statement
|
|
(identifier)
|
|
(identifier)))
|
|
|
|
================================================================================
|
|
Exec statements
|
|
================================================================================
|
|
|
|
exec '1+1'
|
|
exec 'x+=1' in None
|
|
exec 'x+=1' in a, b
|
|
func = "print"
|
|
exec func in {}
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(exec_statement
|
|
(string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end)))
|
|
(exec_statement
|
|
(string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end))
|
|
(none))
|
|
(exec_statement
|
|
(string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end))
|
|
(identifier)
|
|
(identifier))
|
|
(expression_statement
|
|
(assignment
|
|
(identifier)
|
|
(string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end))))
|
|
(exec_statement
|
|
(identifier)
|
|
(dictionary)))
|
|
|
|
================================================================================
|
|
Extra newlines
|
|
================================================================================
|
|
|
|
if a:
|
|
|
|
|
|
b()
|
|
|
|
|
|
c()
|
|
|
|
|
|
def d():
|
|
|
|
|
|
e()
|
|
|
|
|
|
f()
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(if_statement
|
|
(identifier)
|
|
(block
|
|
(expression_statement
|
|
(call
|
|
(identifier)
|
|
(argument_list)))
|
|
(expression_statement
|
|
(call
|
|
(identifier)
|
|
(argument_list)))
|
|
(function_definition
|
|
(identifier)
|
|
(parameters)
|
|
(block
|
|
(expression_statement
|
|
(call
|
|
(identifier)
|
|
(argument_list)))))
|
|
(expression_statement
|
|
(call
|
|
(identifier)
|
|
(argument_list))))))
|
|
|
|
================================================================================
|
|
Escaped newline
|
|
================================================================================
|
|
|
|
len("a") \
|
|
or len("aa")
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(expression_statement
|
|
(boolean_operator
|
|
(call
|
|
(identifier)
|
|
(argument_list
|
|
(string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end))))
|
|
(line_continuation)
|
|
(call
|
|
(identifier)
|
|
(argument_list
|
|
(string
|
|
(string_start)
|
|
(string_content)
|
|
(string_end)))))))
|
|
|
|
================================================================================
|
|
Statements with semicolons
|
|
================================================================================
|
|
|
|
foo;
|
|
foo; bar
|
|
foo; bar;
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(expression_statement
|
|
(identifier))
|
|
(expression_statement
|
|
(identifier))
|
|
(expression_statement
|
|
(identifier))
|
|
(expression_statement
|
|
(identifier))
|
|
(expression_statement
|
|
(identifier)))
|
|
|
|
================================================================================
|
|
Type Alias Statements
|
|
================================================================================
|
|
|
|
type Point = tuple[float, float]
|
|
type Point[T] = tuple[T, T]
|
|
type IntFunc[**P] = Callable[P, int] # ParamSpec
|
|
type LabeledTuple[*Ts] = tuple[str, *Ts] # TypeVarTuple
|
|
type HashableSequence[T: Hashable] = Sequence[T] # TypeVar with bound
|
|
type IntOrStrSequence[T: (int, str)] = Sequence[T] # TypeVar with constraints
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(type_alias_statement
|
|
(type
|
|
(identifier))
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier))
|
|
(type
|
|
(identifier))))))
|
|
(type_alias_statement
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier)))))
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier))
|
|
(type
|
|
(identifier))))))
|
|
(type_alias_statement
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(splat_type
|
|
(identifier))))))
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier))
|
|
(type
|
|
(identifier))))))
|
|
(comment)
|
|
(type_alias_statement
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(splat_type
|
|
(identifier))))))
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier))
|
|
(type
|
|
(splat_type
|
|
(identifier)))))))
|
|
(comment)
|
|
(type_alias_statement
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(constrained_type
|
|
(type
|
|
(identifier))
|
|
(type
|
|
(identifier)))))))
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier))))))
|
|
(comment)
|
|
(type_alias_statement
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(constrained_type
|
|
(type
|
|
(identifier))
|
|
(type
|
|
(tuple
|
|
(identifier)
|
|
(identifier))))))))
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier))))))
|
|
(comment))
|
|
|
|
================================================================================
|
|
Generic Function Definitions
|
|
================================================================================
|
|
|
|
def more_generic[T, *Ts, **P]():
|
|
type TA[T2, *Ts2, **P2] = tuple[Callable[P, tuple[T, *Ts]], Callable[P2, tuple[T2, *Ts2]]]
|
|
return TA
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
(module
|
|
(function_definition
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier))
|
|
(type
|
|
(splat_type
|
|
(identifier)))
|
|
(type
|
|
(splat_type
|
|
(identifier))))
|
|
(parameters)
|
|
(block
|
|
(type_alias_statement
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier))
|
|
(type
|
|
(splat_type
|
|
(identifier)))
|
|
(type
|
|
(splat_type
|
|
(identifier))))))
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier))
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier))
|
|
(type
|
|
(splat_type
|
|
(identifier)))))))))
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier))
|
|
(type
|
|
(generic_type
|
|
(identifier)
|
|
(type_parameter
|
|
(type
|
|
(identifier))
|
|
(type
|
|
(splat_type
|
|
(identifier)))))))))))))
|
|
(return_statement
|
|
(identifier)))))
|