def run(filename): # Load grammar parser, lexer = java.load() treemanager = TreeManager() treemanager.add_parser(parser, lexer, "") # Load file print("Running", filename) with open(filename, "r") as f: treemanager.import_file(f.read()) if not parser.last_status: print("Couldn't parse file. Skip.") return filesize = os.path.getsize(filename) timings = [] # Insert `1+` after every `=` node = treemanager.get_bos() while type(node) is not EOS: if node.symbol.name == "=": node.insert("1+", len(node.symbol.name)) node.mark_changed() treemanager.relex(node) treemanager.post_keypress("") treemanager.save_current_version() parser.prev_version = treemanager.version parser.reference_version = treemanager.reference_version start = time() parser.inc_parse() end = time() parser.top_down_reuse() treemanager.save_current_version( postparse=True) # save post parse tree if parser.last_status: treemanager.reference_version = treemanager.version TreeManager.version = treemanager.version if not parser.last_status: break timings.append(str(end - start)) node = node.next_term if len(timings) > 0: with open("results.csv", "a+") as f: f.write("{} {} {}".format(filename, filesize, ",".join(timings))) f.write("\n")