#-*- coding: utf-8 -*- import os import re import sys import auto_get_root import ReadFile import Control_flow_flattern file_path=auto_get_root.file_path function_name=auto_get_root.function_name root_path=auto_get_root.root_path file_path_next=ReadFile.delete_note_in_numberFile(file_path) #生成无注释文件 #将选择到function部分作为空格,等待输入,并且回传出修复好程序 def blank_sol_function(file_path_next,function_name): function_list=[] function_match=list() mystr_list=list() aim_str = list() i=1 with open(file_path_next) as file_object: lines = file_object.readlines() for line in lines[:]: mystr=line mystr_list.append(line.strip()) pattern = re.compile('(?<=function)[^}]*?(?=\()') # 正则表达式匹配行号数字以及需要匹配的关键词 if(re.search(pattern,mystr)): function_list.append(i) function_match.append(re.search(pattern,mystr).group().strip()) if(re.search('}',mystr)): signal_num=i; i = i + 1
for i in range(0, len(start_num_list)): str_text = ReadFile.read_need_partical_File(file_path, start_num_list[i] - 1, end_num_list[i]) #print(str_text) temp_str_front = str_text.split('{') #获取了IF (xxx) #print(temp_str_front[0]) #这个是条件语句 #获取内部的子集成分 temp_str_delete_signal = re.sub('\{', '', str_text, 1) #print(temp_str_delete_signal) #这个是删除了函数条件的 { temp_str_blcok_pre = re.sub('\{(?<=\{)[^}]*?(?=\})\}', ';', temp_str_delete_signal) #获取{}中的函数块 #print(temp_str_blcok_pre) #这个包含了函数的条件 temp_str_blcok_pre_pre = re.search( '(?<=\))[^}]*?(?=\})|(?<=else)[^}]*?(?=\})', temp_str_blcok_pre).group() temp_str.append(temp_str_blcok_pre_pre) return (temp_str) #这个是最终的得到结果,字符串形式的函数块集合 ReadFile.delete_note_in_numberFile(test_url) if_num_list, signal_num_list = ReadFile.re_get_num(test_url) start_num_list, end_num_list = ReadFile.match_sequence_total_number( if_num_list, signal_num_list) str_text_partical = basic_block(test_url, start_num_list, end_num_list) str_text = total_basic_block(test_url, start_num_list) modify_start_list(start_num_list, end_num_list) control_flow_order(str_text, str_text_partical)