Pythonソースの構文解析…parse
Pythonソースの構文解析を行うモジュールparseを使ってみた。
下記は解析後のツリー構造を表示するプログラム
下記は解析後のツリー構造を表示するプログラム
import parser
import symbol
import token
from types import *
def level( node, indent ):
id = node[0]
for child in node[1:]:
# 終端
if type(child) is StringType:
name = token.tok_name.get(id)
print ('-'*indent) + "(%s '%s')" % (name,child)
# ノード
elif type(child) is ListType:
name = symbol.sym_name.get(id)
print ('-'*indent) + ("<%s(%d)> " % (name,id)) +str(len(child))
level( child, indent+1 )
else:
print type(child)
def main():
fp = open( "test.txt", 'r' )
text = fp.read()
try:
ast = parser.suite( text )
except SyntaxError,e:
print "error!:"+str(e)
raise
else:
level( ast.tolist(), 0 )
if __name__ == '__main__':
main()
例えば、下記のソースを放り込むと
a+5こうなります。
2 - 3 -- 2 --- 2 ---- 2 ----- 2 ------ 2 ------- 2 -------- 2 --------- 2 ---------- 2 ----------- 2 ------------ 2 ------------- 2 -------------- 4 --------------- 2 ---------------- 2 ----------------- 2 ------------------ 2 ------------------- 2 --------------------(NAME 'a') --------------- 2 ----------------(PLUS '+') --------------- 2 ---------------- 2 ----------------- 2 ------------------ 2 ------------------- 2 --------------------(NUMBER '5') -- 2 ---(NEWLINE '') 2 -(NEWLINE '') 2 -(ENDMARKER '')
コメント
コメントを投稿