NodeBox on AS3

まだ作ってない。

Jython版はもうできたらしい。

なのでとりあえずAS3版も途中まで作る

>>> import compiler
>>> data = """
SIZE = 600
size(SIZE, SIZE)
z = 1+1j
colormode(RGB, 1)
for i in range(30):
    fill(color(0.5, 0.3 + 0.02 * i, 0.5, 0.1))
    rotate(i * -0.47)
    rect(5 * i, 5 * i, 100 + 10 * i, 100 + 10 * i)
"""
>>> 
>>> compiler.parse(data)
Module(None, Stmt([Assign([AssName('SIZE', 'OP_ASSIGN')], Const(600)), Discard(CallFunc(Name('size'), [Name('SIZE'), Name('SIZE')], None, None)), Assign([AssName('z', 'OP_ASSIGN')], Add((Const(1), Const(1j)))), Discard(CallFunc(Name('colormode'), [Name('RGB'), Const(1)], None, None)), For(AssName('i', 'OP_ASSIGN'), CallFunc(Name('range'), [Const(30)], None, None), Stmt([Discard(CallFunc(Name('fill'), [CallFunc(Name('color'), [Const(0.5), Add((Const(0.29999999999999999), Mul((Const(0.02), Name('i'))))), Const(0.5), Const(0.10000000000000001)], None, None)], None, None)), Discard(CallFunc(Name('rotate'), [Mul((Name('i'), UnarySub(Const(0.46999999999999997))))], None, None)), Discard(CallFunc(Name('rect'), [Mul((Const(5), Name('i'))), Mul((Const(5), Name('i'))), Add((Const(100), Mul((Const(10), Name('i'))))), Add((Const(100), Mul((Const(10), Name('i')))))], None, None))]), None)]))

すでにJythonというPython処理系があるJavaに比べて、AS3でPythonのコードを直接動かすというのは労力が多い。こういうPythonのコードをこういう構文木にしてからAS3のコードに変換するのがいいと思った。思っただけでまだ作ってはいない。NodeBox extends Spriteなクラスを作ってovalとかはそのメソッドとして実装すると楽かな。