import ast

NEWLINE = "\n"

def transform(s):
    try:
        ast.transform(s)
    except:
        print s
        raise

def main():
    multi = None
    for line in stmts.split(NEWLINE):
        if not line:
            if multi:
                multi.append('')
                transform(NEWLINE.join(multi))
            multi = []
        if multi is None:
            transform(line)
        else:
            multi.append(line)

stmts = """def f(x): pass
def f(x, y): pass
def f(x, y,): pass
def f(x, y=1): pass
def f(x=1, y=1): pass
def f(*x): pass
def f(**x): pass
def f(*x, **y): pass
lambda:1
lambda x:1
lambda x:x
lambda x, y: 1
lambda x, y, z,: y
lambda x=lambda x:1 : 1
def f(x, y, z=None, f=lambda x: lambda y: x + y): pass
global a, b, c
a = 1
d = c = 7
a + b - c * 3
(a + b) * c % 3
b += c
assert 1
assert 1, "2"
exec a
exec a in b
exec a in b, c
del a
del a, b
del a, b, c,
print >> x
print >> x, 1
print >> x, 1,
print 1
print 1,
print 1, 2
print 1, 2,
raise
raise x
raise x, y
raise x, y, b
import a
import a, b
import a as b
import a as b, c
import as as as, c
import a, b as c
from a import b
from a import b as c
from a import b, c
from a import b as c, d
from a import b, c as d
import a.b
from a.b import c
class C: pass
class C(A): pass
class C(A, B): pass
class C(A, B, (C,)): pass
d = {}
d = {1:2}
d = {1:2,}
d = {1:2, 3:4,}
[1,2,3,4]
[x for x in x if x if x for y in y if y]
[x for x in x]
obj.attr
l[...]
x[0]
x[:]
x[1:]
x[:1]
x[::]
x[1:1]
x[1::]
x[:1:]
x[::1]
x[1:1:]
x[1:1:1]
x[1:2,2:3]
# put all the multi-line stmts here

if a:
    print b
    a

if a:
    a
else:
    print b
    c

if a:
    a
elif b:
     b

if a == 1:
    a
elif b == 1:
    b
elif c == c:
    a
    b
    c
else:
    pass

while 1:
    1
    2

while 1:
    pass

while 1 and 2:
    pass
else:
    1

try:
    1
finally:
    2

try:
    a + b
except:
    pass

try:
    a + b
except E:
    pass
except:
    pass

try:
    a + b
except E, b:
    pass
except:
    pass

try:
    a + b
except (E, E2), b:
    pass
except:
    pass
"""

if __name__ == "__main__":
    main()
