|
# Function definition |
|
|
|
def foo(): |
|
pass |
|
def bar(a: str, b = 22, **c) -> num: |
|
pass |
|
|
|
==> |
|
|
|
Script( |
|
FunctionDefinition(def,VariableName,ParamList,Body(PassStatement(pass))), |
|
FunctionDefinition(def,VariableName,ParamList(VariableName, TypeDef(VariableName), VariableName, AssignOp, Number, VariableName), |
|
TypeDef(VariableName), Body(PassStatement(pass)))) |
|
|
|
# Single-line function definition |
|
|
|
def foo(a, b): return a + b |
|
|
|
==> |
|
|
|
Script(FunctionDefinition(def,VariableName,ParamList(VariableName, VariableName), |
|
Body(ReturnStatement(return, BinaryExpression(VariableName, ArithOp, VariableName))))) |
|
|
|
# Return with no body |
|
|
|
def foo(a, b): |
|
a = b |
|
return |
|
|
|
==> |
|
|
|
Script(FunctionDefinition(def,VariableName,ParamList(VariableName, VariableName), |
|
Body(AssignStatement(VariableName, AssignOp, VariableName), ReturnStatement(return)))) |
|
|
|
# Conditional |
|
|
|
if a: b() |
|
|
|
if 1 + 3: |
|
pass |
|
elif 55 < 2: |
|
pass |
|
else: |
|
pass |
|
|
|
==> |
|
|
|
Script( |
|
IfStatement(if, VariableName, Body(ExpressionStatement(CallExpression(VariableName, ArgList)))) |
|
IfStatement(if, BinaryExpression(Number, ArithOp, Number), Body(PassStatement(pass)), |
|
elif, BinaryExpression(Number, CompareOp, Number), Body(PassStatement(pass)), |
|
else, Body(PassStatement(pass)))) |
|
|
|
# Assignment |
|
|
|
a = 4 |
|
b: str = "hi" |
|
c, d, e = None |
|
f = g = False |
|
h += 1 |
|
|
|
==> |
|
|
|
Script( |
|
AssignStatement(VariableName, AssignOp, Number), |
|
AssignStatement(VariableName, TypeDef(VariableName), AssignOp, String), |
|
AssignStatement(VariableName, VariableName, VariableName, AssignOp, None), |
|
AssignStatement(VariableName, AssignOp, VariableName, AssignOp, Boolean), |
|
UpdateStatement(VariableName, UpdateOp, Number)) |
|
|
|
# For loops |
|
|
|
for a, b in woop(): |
|
doStuff(b, a) |
|
|
|
==> |
|
|
|
Script(ForStatement(for, VariableName, VariableName, in CallExpression(VariableName, ArgList), |
|
Body(ExpressionStatement(CallExpression(VariableName, ArgList(VariableName, VariableName)))))) |
|
|
|
# Try statements |
|
|
|
try: |
|
pass |
|
except SomeException as e: |
|
pass |
|
except OtherException: |
|
pass |
|
else: |
|
pass |
|
finally: |
|
pass |
|
|
|
==> |
|
|
|
Script(TryStatement( |
|
try, Body(PassStatement(pass)), |
|
except, VariableName, as, VariableName, Body(PassStatement(pass)), |
|
except VariableName, Body(PassStatement(pass)), |
|
else Body(PassStatement(pass)), |
|
finally Body(PassStatement(pass)))) |
|
|
|
# With statements |
|
|
|
with open("x") as file: |
|
pass |
|
async with foo as bar: |
|
pass |
|
|
|
==> |
|
|
|
Script( |
|
WithStatement(with, CallExpression(VariableName, ArgList(String)), as, VariableName, Body(PassStatement(pass))), |
|
WithStatement(async, with, VariableName, as, VariableName, Body(PassStatement(pass)))) |
|
|
|
# Class definition |
|
|
|
class Foo: |
|
prop = 0 |
|
def __init__(self): |
|
pass |
|
def plus(self): |
|
self.prop += 1 |
|
|
|
class Bar(Foo): pass |
|
|
|
==> |
|
|
|
Script( |
|
ClassDefinition(class, VariableName, Body( |
|
AssignStatement(VariableName, AssignOp, Number), |
|
FunctionDefinition(def, VariableName, ParamList(VariableName), Body(PassStatement(pass))), |
|
FunctionDefinition(def, VariableName, ParamList(VariableName), Body( |
|
UpdateStatement(MemberExpression(VariableName, PropertyName), UpdateOp, Number))))), |
|
ClassDefinition(class, VariableName, ArgList(VariableName), Body(PassStatement(pass)))) |
|
|
|
# Scope statements |
|
|
|
global a |
|
nonlocal b, c |
|
|
|
==> |
|
|
|
Script( |
|
ScopeStatement(global, VariableName), |
|
ScopeStatement(nonlocal, VariableName, VariableName)) |
|
|
|
# Decorators |
|
|
|
@Something.X |
|
def f(): pass |
|
|
|
@Other(arg1, arg2) |
|
class C: pass |
|
|
|
==> |
|
|
|
Script( |
|
DecoratedStatement(Decorator(At, VariableName, VariableName), |
|
FunctionDefinition(def, VariableName, ParamList, Body(PassStatement(pass)))), |
|
DecoratedStatement(Decorator(At, VariableName, ArgList(VariableName, VariableName)), |
|
ClassDefinition(class, VariableName, Body(PassStatement(pass))))) |
|
|
|
# Small statements |
|
|
|
def x(): return 5 |
|
raise Exception("woop") |
|
while False: |
|
break |
|
continue |
|
assert 1 == 2 |
|
del x[2] |
|
|
|
==> |
|
|
|
Script( |
|
FunctionDefinition(def, VariableName, ParamList, Body(ReturnStatement(return, Number))), |
|
RaiseStatement(raise, CallExpression(VariableName, ArgList(String))), |
|
WhileStatement(while, Boolean, Body(BreakStatement(break), ContinueStatement(continue))), |
|
AssertStatement(assert, BinaryExpression(Number, CompareOp, Number)), |
|
DeleteStatement(del, MemberExpression(VariableName, Number))) |
|
|
|
# Import statements |
|
|
|
import datetime |
|
from something.other import one, two |
|
|
|
==> |
|
|
|
Script( |
|
ImportStatement(import, VariableName), |
|
ImportStatement(from, VariableName, VariableName, import VariableName, VariableName)) |
|
|
|
# One-line small statements |
|
|
|
x; y(); z = 2 |
|
raise "oh" |
|
|
|
==> |
|
|
|
Script( |
|
StatementGroup( |
|
ExpressionStatement(VariableName), |
|
ExpressionStatement(CallExpression(VariableName, ArgList)), |
|
AssignStatement(VariableName, AssignOp, Number)), |
|
RaiseStatement(raise, String)) |
|
|
|
# Nested bodies |
|
|
|
def x(): |
|
ok |
|
if not ok: |
|
while True: |
|
one |
|
two |
|
three |
|
if None: |
|
four |
|
else: |
|
five |
|
six |
|
seven |
|
|
|
==> |
|
|
|
Script( |
|
FunctionDefinition(def, VariableName, ParamList, Body( |
|
ExpressionStatement(VariableName), |
|
IfStatement(if, UnaryExpression(not, VariableName), Body( |
|
WhileStatement(while, Boolean, Body( |
|
ExpressionStatement(VariableName), |
|
ExpressionStatement(VariableName))))), |
|
ExpressionStatement(VariableName), |
|
IfStatement(if, None, Body( |
|
ExpressionStatement(VariableName) |
|
), else, Body( |
|
ExpressionStatement(VariableName))), |
|
ExpressionStatement(VariableName))), |
|
ExpressionStatement(VariableName)) |
|
|
|
# Empty and commented lines |
|
|
|
if None: |
|
one |
|
|
|
two |
|
|
|
four |
|
# comment |
|
five |
|
six |
|
|
|
==> |
|
|
|
Script( |
|
IfStatement(if, None, Body( |
|
ExpressionStatement(VariableName), |
|
ExpressionStatement(VariableName), |
|
ExpressionStatement(VariableName), |
|
Comment, |
|
ExpressionStatement(VariableName))), |
|
ExpressionStatement(VariableName)) |
|
|
|
# Escaped newlines |
|
|
|
x = 1 + \ |
|
2 |
|
|
|
==> |
|
|
|
Script(AssignStatement(VariableName, AssignOp, BinaryExpression(Number, ArithOp, Number))) |
|
|
|
# Python 2 compatibility |
|
|
|
print "hi" |
|
print(print.something) |
|
|
|
try: |
|
raise Exception, "foo" |
|
except Exception, foo: |
|
pass |
|
|
|
==> |
|
|
|
Script( |
|
PrintStatement(print, String), |
|
ExpressionStatement(CallExpression(VariableName, ArgList(MemberExpression(VariableName, PropertyName)))), |
|
TryStatement(try, Body(RaiseStatement(raise, VariableName, String)), |
|
except, VariableName, VariableName, Body(PassStatement(pass)))) |
|
|
|
# Require indentation on body |
|
|
|
def foo(): |
|
pass |
|
|
|
==> |
|
|
|
Script(FunctionDefinition(def,VariableName,ParamList,Body(⚠)), PassStatement(pass)) |
|
|
|
# Nested else |
|
|
|
if a: |
|
if b: |
|
pass |
|
else: |
|
pass |
|
|
|
==> |
|
|
|
Script(IfStatement(if, VariableName, Body( |
|
IfStatement(if, VariableName, Body(PassStatement(pass)))), |
|
else, Body(PassStatement(pass)))) |
|
|
|
# Self not reserved |
|
|
|
self = True |
|
|
|
==> |
|
|
|
Script(AssignStatement(VariableName,AssignOp,Boolean)) |
|
|
|
# Trailing whitespace in block |
|
|
|
def x(): |
|
one |
|
|
|
two |
|
|
|
==> |
|
|
|
Script(FunctionDefinition(def,VariableName,ParamList,Body(ExpressionStatement(VariableName),ExpressionStatement(VariableName)))) |
|
|
|
# Can handle tab indentation |
|
|
|
class Employee: |
|
first_name: str |
|
last_name: str |
|
|
|
def __init__(self, a): |
|
self.first_name = a |
|
self.last_name = a |
|
|
|
==> |
|
|
|
Script(ClassDefinition(class,VariableName,Body( |
|
AssignStatement(VariableName,TypeDef(VariableName)), |
|
AssignStatement(VariableName,TypeDef(VariableName)), |
|
FunctionDefinition(def,VariableName,ParamList(VariableName,VariableName),Body( |
|
AssignStatement(MemberExpression(VariableName,PropertyName),AssignOp,VariableName), |
|
AssignStatement(MemberExpression(VariableName,PropertyName),AssignOp,VariableName)))))) |
|
|
|
# Parses match statements |
|
|
|
match foo: |
|
case 1: |
|
pass |
|
case Point("a", True) as z | a.b | {x: None, **y}: |
|
pass |
|
case [a, b, *rest] | (p, q): |
|
pass |
|
|
|
==> |
|
|
|
Script(MatchStatement(match,VariableName,MatchBody( |
|
MatchClause(case, |
|
LiteralPattern(Number), |
|
Body(PassStatement(pass))), |
|
MatchClause(case, |
|
OrPattern( |
|
AsPattern( |
|
ClassPattern(VariableName,PatternArgList(LiteralPattern(String),LiteralPattern(Boolean))), |
|
as,VariableName), |
|
LogicOp, |
|
AttributePattern(VariableName,PropertyName), |
|
LogicOp, |
|
MappingPattern(VariableName,LiteralPattern(None),CapturePattern(VariableName))), |
|
Body(PassStatement(pass))), |
|
MatchClause(case, |
|
OrPattern(SequencePattern( |
|
CapturePattern(VariableName), |
|
CapturePattern(VariableName), |
|
StarPattern(CapturePattern(VariableName))), |
|
LogicOp, |
|
SequencePattern(CapturePattern(VariableName),CapturePattern(VariableName))), |
|
Body(PassStatement(pass)))))) |
|
|
|
# Type Params |
|
|
|
class ClassA[T: str]: |
|
def method1(self) -> T: |
|
pass |
|
|
|
def func[**T](a: T, b: T) -> T: |
|
pass |
|
|
|
==> |
|
|
|
Script( |
|
ClassDefinition(class,VariableName, |
|
TypeParamList(TypeParam(VariableName,TypeDef(":",VariableName))), |
|
Body(FunctionDefinition(def,VariableName,ParamList(VariableName),TypeDef(VariableName), |
|
Body(PassStatement(pass))))), |
|
FunctionDefinition(def,VariableName,TypeParamList(TypeParam(VariableName)), |
|
ParamList(VariableName,TypeDef(VariableName),VariableName,TypeDef(VariableName)), |
|
TypeDef(VariableName), |
|
Body(PassStatement(pass)))) |
|
|
|
# Type Definition |
|
|
|
type Point = tuple[float, float] |
|
|
|
==> |
|
|
|
Script(TypeDefinition(type,VariableName,MemberExpression(VariableName,VariableName,",",VariableName))) |
|
|