|
# Operator precedence |
|
|
|
a + b * c - d**3 |
|
a or b > 2 and c or d == None |
|
a + b | c & d |
|
|
|
==> |
|
|
|
Script( |
|
ExpressionStatement(BinaryExpression(BinaryExpression(VariableName, ArithOp, |
|
BinaryExpression(VariableName, ArithOp, VariableName)), ArithOp, BinaryExpression(VariableName, ArithOp, Number))), |
|
ExpressionStatement(BinaryExpression(BinaryExpression(VariableName, or, |
|
BinaryExpression(BinaryExpression(VariableName, CompareOp, Number), and, VariableName)), |
|
or, BinaryExpression(VariableName, CompareOp, None))), |
|
ExpressionStatement(BinaryExpression(BinaryExpression(VariableName, ArithOp, VariableName), BitOp, |
|
BinaryExpression(VariableName, BitOp, VariableName)))) |
|
|
|
# Strings |
|
|
|
'foo' "bar" |
|
b'baz' |
|
'''long string |
|
on two lines''' |
|
|
|
"""also with double |
|
|
|
quotes""" |
|
|
|
==> |
|
|
|
Script(ExpressionStatement(ContinuedString(String, String)), |
|
ExpressionStatement(String), |
|
ExpressionStatement(String), |
|
ExpressionStatement(String)) |
|
|
|
# Bracketed continued string |
|
|
|
print('00300:' |
|
'03630:') |
|
|
|
==> |
|
|
|
Script(ExpressionStatement(CallExpression(VariableName, ArgList(ContinuedString(String, String))))) |
|
|
|
# Format strings |
|
|
|
f'hello{22} abc\' {{ }} {d-1}' |
|
f"double\" {quoted !s}" |
|
f"""big long format |
|
{string :foo}""" |
|
f'''well {{ \x }} {2 :{bar}}''' |
|
f"""one"{two}"three""" |
|
f'{user=!s} {delta.days=:,d}' |
|
|
|
==> |
|
|
|
Script(ExpressionStatement(FormatString(FormatReplacement(Number),Escape, |
|
FormatReplacement(BinaryExpression(VariableName, ArithOp, Number)))), |
|
ExpressionStatement(FormatString(Escape,FormatReplacement(VariableName, FormatConversion))), |
|
ExpressionStatement(FormatString(FormatReplacement(VariableName, FormatSpec))), |
|
ExpressionStatement(FormatString(Escape,FormatReplacement(Number, FormatSpec(FormatReplacement(VariableName))))), |
|
ExpressionStatement(FormatString(FormatReplacement(VariableName))), |
|
ExpressionStatement(FormatString( |
|
FormatReplacement(VariableName,FormatSelfDoc,FormatConversion), |
|
FormatReplacement(MemberExpression(VariableName,PropertyName),FormatSelfDoc,FormatSpec)))) |
|
|
|
# Nested quote types |
|
|
|
f"a{'b'}c" |
|
|
|
==> |
|
|
|
Script(ExpressionStatement(FormatString(FormatReplacement(String)))) |
|
|
|
# Lambda |
|
|
|
something.map(lambda x: x + 1) |
|
foo = lambda a, b = 0: a ^ b |
|
|
|
==> |
|
|
|
Script( |
|
ExpressionStatement(CallExpression(MemberExpression(VariableName, PropertyName), ArgList( |
|
LambdaExpression(lambda, ParamList(VariableName), BinaryExpression(VariableName, ArithOp, Number))))), |
|
AssignStatement(VariableName, AssignOp, LambdaExpression(lambda, ParamList(VariableName, VariableName, AssignOp, Number), |
|
BinaryExpression(VariableName, BitOp, VariableName)))) |
|
|
|
# Member expressions |
|
|
|
x[1] |
|
x.foo |
|
x.if.True |
|
|
|
==> |
|
|
|
Script( |
|
ExpressionStatement(MemberExpression(VariableName, Number)), |
|
ExpressionStatement(MemberExpression(VariableName, PropertyName)), |
|
ExpressionStatement(MemberExpression(MemberExpression(VariableName, PropertyName), PropertyName))) |
|
|
|
# Call expressions |
|
|
|
foo(x, y, **z) + bar(blah=20) |
|
|
|
==> |
|
|
|
Script(ExpressionStatement(BinaryExpression( |
|
CallExpression(VariableName, ArgList(VariableName, VariableName, VariableName)), |
|
ArithOp, |
|
CallExpression(VariableName, ArgList(VariableName, AssignOp, Number))))) |
|
|
|
# Collection expressions |
|
|
|
[True, False, None] |
|
{foo: 22, bar: False, **other} |
|
{1, 2, 3} |
|
(3) |
|
(3,) |
|
(3, 4) |
|
|
|
==> |
|
|
|
Script( |
|
ExpressionStatement(ArrayExpression(Boolean, Boolean, None)), |
|
ExpressionStatement(DictionaryExpression(VariableName, Number, VariableName, Boolean, VariableName)), |
|
ExpressionStatement(SetExpression(Number, Number, Number)), |
|
ExpressionStatement(ParenthesizedExpression(Number)), |
|
ExpressionStatement(TupleExpression(Number)), |
|
ExpressionStatement(TupleExpression(Number, Number))) |
|
|
|
# Comprehension expressions |
|
|
|
[i + 1 for i in range(1, 10) if x % 2 == 0] |
|
(x for x in [3, 4]) |
|
{key: value for (key, value) in blah} |
|
{a - b for a in foo for b in bar} |
|
|
|
==> |
|
|
|
Script( |
|
ExpressionStatement(ArrayComprehensionExpression( |
|
BinaryExpression(VariableName, ArithOp, Number), |
|
for VariableName in CallExpression(VariableName, ArgList(Number, Number)), |
|
if BinaryExpression(BinaryExpression(VariableName, ArithOp, Number), CompareOp, Number))), |
|
ExpressionStatement(ComprehensionExpression( |
|
VariableName, for, VariableName, in, ArrayExpression(Number, Number))), |
|
ExpressionStatement(DictionaryComprehensionExpression( |
|
VariableName, VariableName, for, TupleExpression(VariableName, VariableName) in VariableName)), |
|
ExpressionStatement(SetComprehensionExpression( |
|
BinaryExpression(VariableName, ArithOp, VariableName), for, VariableName, in, VariableName, |
|
for, VariableName, in, VariableName))) |
|
|
|
# Yield expressions |
|
|
|
def foo(): |
|
yield 1 |
|
return 1 + (yield 2) |
|
|
|
==> |
|
|
|
Script(FunctionDefinition(def, VariableName, ParamList, Body( |
|
YieldStatement(yield, Number), |
|
ReturnStatement(return, BinaryExpression(Number, ArithOp, ParenthesizedExpression(YieldExpression(yield, Number))))))) |
|
|
|
# Unary expressions |
|
|
|
[-1, +2 * 3, ~2**2] |
|
|
|
==> |
|
|
|
Script(ExpressionStatement(ArrayExpression( |
|
UnaryExpression(ArithOp, Number), |
|
BinaryExpression(UnaryExpression(ArithOp, Number), ArithOp, Number), |
|
UnaryExpression(BitOp, BinaryExpression(Number, ArithOp, Number))))) |
|
|
|
# Await |
|
|
|
await something() |
|
|
|
==> |
|
|
|
Script(ExpressionStatement(AwaitExpression(await, CallExpression(VariableName, ArgList)))) |
|
|
|
# Newlines in brackets |
|
|
|
x = [ |
|
1, 2, |
|
# And |
|
3, 4, |
|
] |
|
|
|
==> |
|
|
|
Script(AssignStatement(VariableName, AssignOp, ArrayExpression(Number, Number, Comment, Number, Number))) |
|
|
|
# Too many commas in brackets |
|
|
|
x = [ |
|
1, 2,, |
|
] |
|
|
|
==> |
|
|
|
Script(AssignStatement(VariableName, AssignOp, ArrayExpression(Number, Number, ⚠))) |
|
|
|
# Conditional expression |
|
|
|
x = 5 if True else 1 if False else 0 |
|
|
|
==> |
|
|
|
Script(AssignStatement(VariableName, AssignOp, ConditionalExpression(Number, if, Boolean, else, |
|
ConditionalExpression(Number, if, Boolean, else, Number)))) |
|
|
|
# Exponent is R-to-L associative |
|
|
|
2 ** 3 ** 2 |
|
|
|
==> |
|
|
|
Script(ExpressionStatement(BinaryExpression( |
|
Number,ArithOp("**"), |
|
BinaryExpression(Number,ArithOp("**"),Number)))) |
|
|