Beispiel #1
0
 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):
                 logger.log('Performing semantic analysis: .....$GREENdone!$RST')
                 logger.accept()
                 if target == 'jvm':
                     jvm_backend_instance = JVM_Backend(syntax_tree,
                             semantic_analyzer.get_functions(),
                             (os.path.basename(os.path.splitext(input_file)[0]).capitalize()))
                     try:
                         with open(output_file, 'w+') as output_fd:
                             output_fd.write(jvm_backend_instance.generate_jvm())
                     except IOError:
                         logger.error('couldn\'t open jvm assembly file for writing')
                     logger.log('Generating jvm assembly file: .....$GREENdone!$RST', True)
                     with open(os.devnull) as devnull:
                         arg_list = ['java', '-jar', jasmin, '-d',
                             os.path.split(output_file)[0], output_file]
                         if optimize == 0:
                             arg_list.append('-g')