Exemplo n.º 1
0
            usage()
            return 0
        elif opt in ('-t', '--target'):
            target = arg
        elif opt in ('-j', '--jasmin'):
            jasmin = arg
        elif opt in ('-O', '--optimize'):
            try:
                optimize = int(arg)
            except ValueError:
                logger.error('invalid parameter \'%s\': optimization can be 0 or 1' % arg)
                return
        elif opt in ('-v', '--verbose'):
            logger.verbose = True

    logger.log('$BLUELatte Compiler v.%s$RST' % VERSION)
    logger.log('Writing to:         $CYAN%s$RST' % output_file)
    logger.log('Target architecure: $CYAN%s$RST' % target)
    logger.log('Optimization level: $CYAN%d (%s)$RST' %\
        (optimize, 'no optimizations' if optimize == 0 else 'simplifying expressions'))
    if target == 'jvm':
        logger.log('Jasmin .jar file:   $CYAN%s$RST' % jasmin)
    try:
        with open(input_file) as input_fd:
            parser_instance = LatteParser()
            syntax_tree, parsed = parser_instance.parse(input_fd.read())
            optimizer_instance = LatteOptimizer()
            if syntax_tree and parsed:
                logger.log('Building abstract syntax tree: ....$GREENdone!$RST')
                semantic_analyzer = LatteSemanticAnalyzer(syntax_tree, optimizer_instance)
                if semantic_analyzer.analyze(optimize):