Beispiel #1
0
if args.visualize:
    if not path.exists(args.visualize):
        os.makedirs(args.visualize)
    graph(parse_tree_root, path.join(args.visualize, 'original_ast'))

if parse_tree_root:
    static_semantic_analyzer = SemanticAnalyzer(parse_tree_root)
    static_semantic_analyzer.analyze()
    if args.visualize:
        static_semantic_analyzer.symbol_table.to_graph(
            path.join(args.visualize, 'symb_tab.png'))
    SemanticLogger.info(
        None, "Find {} warnings and {} errors".format(SemanticLogger.n_warn,
                                                      SemanticLogger.n_error))
    if SemanticLogger.n_error == 0:
        SemanticLogger.info(None, 'producing three address code')
        code_generator = CodeGenerator(parse_tree_root,
                                       static_semantic_analyzer.symbol_table)
        code_generator.gen_three_address_code()
        code_generator.write_file(out_file)
        SemanticLogger.info(None, 'done')

end = time.clock()

SemanticLogger.info(None, 'Time elapsed: {}s'.format(end - start))
print("=" * 20)

if args.visualize:
    graph(parse_tree_root, path.join(args.visualize, 'final_ast'))