if __name__ == '__main__': parser = argparse.ArgumentParser(description='AST optimizer') parser.add_argument('input', type=str, metavar='Input_File', help='Input .c file path') parser.add_argument('output', type=str, metavar='Output_File', help='Output .c file path') parser.add_argument('--debug', action='store_true') args = parser.parse_args() src_path = args.input target_path = args.output parser = Parser(debug=args.debug) ast = parser.run(src_path) if args.debug: printVisitor = PrintVisitor() ast.accept(printVisitor) print(printVisitor) constantFoldingVisitor = ConstantFoldingVisitor(debug=args.debug, mark_used=True) ast.accept(constantFoldingVisitor) ast.accept(constantFoldingVisitor) writeVisitor = WriteVisitor(dead_code_elimination=True) s = ast.accept(writeVisitor) f = open(target_path, 'w') f.write(s) f.close()
LINE_RGEX = re.compile('^\d+$') VARIABLE_RGEX = re.compile('^[a-zA-Z_$][a-zA-Z_$0-9]*$') if __name__ == '__main__': parser = argparse.ArgumentParser(description='AST optimizer') parser.add_argument('input', type=str, metavar='Input_File', help='Input .c file path') parser.add_argument('--debug', action='store_true') args = parser.parse_args() sys.setrecursionlimit(2**16) try: parser = Parser(debug=args.debug) ast = parser.run(args.input) if args.debug: printVisitor = PrintVisitor() ast.accept(printVisitor) print(printVisitor) flowVisitor = InterpreterVisitor(debug=args.debug) ast.accept(flowVisitor) while True: input_str = input( str(flowVisitor.linenos) + '>>' if args.debug else '>>') if CLI_NEXT_REGEX.search(input_str): m = CLI_NEXT_REGEX.match(input_str) lines_str = m.groups()[0] if lines_str is not None and LINE_RGEX.search( lines_str) is None: print('Incorrect command usage : try ‘next [lines]')