Exemple #1
0
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()
Exemple #2
0
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]')