def main(code_path, jy_exe="jython", print_diff=True, print_fail=False, print_success=False, print_diff_lines=False): from pprint import pprint from popen2 import popen2 from StringIO import StringIO from difflib import Differ if os.path.isdir(code_path): pyfiles = globwalk.GlobDirectoryWalker(code_path, "*.py") else: pyfiles = [code_path] for pyfile in pyfiles: ast = parser().parse([pyfile]) lispified = lispify_ast(ast) sio = StringIO() pprint(lispified, stream=sio) fin, fout = popen2("python astlib2.py %s" % pyfile) sio.seek(0) jstr = sio.readlines() pstr = fin.readlines() differs = False diffstr = [] difflines = 0 diff = Differ() results = diff.compare(pstr, jstr) for d in results: diffstr.append(d) if d[0] in ['+', '-']: differs = True difflines += 1 if print_success and not differs: print "SUCCESS: %s" % pyfile if print_fail and differs: print "FAIL: %s" % pyfile if print_diff_lines: print "%s diff lines in %s" % (difflines, pyfile) if print_diff and differs: print "---------- ouput -------------" print "py: %s" % sio.getvalue() print "jy: %s" % "".join(jstr) print "---------- DIFF -------------" print "".join(diffstr)
for node in children: if isinstance(node, AST): yield lispify_ast(node) else: if fname in ("ctx", "ops", "op"): yield tuple([str(node)]) elif fname == "n": try: if isinstance(node, float): if .0001 < node < 10000: yield "%5.5f" % node else: yield "%.5e" % node else: yield node except Exception, why: print "error parsing 'n': %s" % why else: yield node if __name__ == '__main__': import sys from pprint import pprint code_path = sys.argv[1] ast = parser().parse([code_path]) lispified = lispify_ast(ast) pprint(lispified) #assert(lispified == lispify_ast(ast2))