2010-08-25
*1282701893*Pythonいじり2
今朝の出勤電車ここまではできるようになった
||
pprintast.build(_mod)
===== AST =====
_ast.Interactive object at 0x100606690
===== END AST =====
(Interactive (Expr (Call (Attribute (Name (Load)) (Load)) (Name (Load)))))
||
Python側で_astを見やすく表示するモジュールを作るという選択肢。
しかしまだNameとかの具体的な値が表示されていない。あとで作る。
hr
|c|
PyRun_SimpleString(import pprintast;reload(pprintast); print pprintast.build(_mod));
||
って書き換えたので、Pythonで書いた表示モジュールを書き換えつつ対話的にそれをテストできる。
|python|
a = 1
===== AST =====
(Interactive (Assign (Name'a' (Store)) (Num1)))
===== END AST =====
||
なかなかいい感じ。もっと大きな例。
|python|
def build(node):
... return Node(node.__class__.__name__,
... build(c) for c in ast.iter_child_nodes(node),
... node)
...
===== AST =====
(Interactive (FunctionDef (arguments[] (Name'node' (Param))) (Return[] (Call (Name'Node' (Load)) (Attribute'__name__' (Attribute'__class__' (Name'node' (Load)) (Load)) (Load)) (ListComp[] (Call (Name'build' (Load)) (Name'c' (Load))) (comprehension[] (Name'c' (Store)) (Call (Attribute'iter_child_nodes' (Name'ast' (Load)) (Load)) (Name'node' (Load))))) (Name'node' (Load))))))
||
S式(になりきれてないけど最終的にはなる予定)をきれいに改行&インデントするライブラリとかすでに誰かがつくってそうだなぁ。