Keil C51 插件 检测所有if语句

2024-08-23 09:44

本文主要是介绍Keil C51 插件 检测所有if语句,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 此插件解决的问题

Keil 插件 -- Python 代码

import chardet, sys, glob, re
from pathlib import Pathfrom collections import deque# 变量名字典 key--数据名 value--数据s类型
variable_dic = {}# 初始化一个空的二维数组
matrix = []
# 列表的头数据
header_list = []
# 列表的值
value_list = []# if (V_Data>35&&V_Data<790)     //零上温度校准\r
# if (V_Data==Temp_Tabe[i][1])\r
# if ((Usart1_Receive_Buff[4]==0x01)&&(Usart1_Receive_Buff[Receive_Count-1]==Xor_Data1))\r# uint AAA
# uint AAA,BBB
# uint code AAA,BBB  -- 变量名和类型添加
def type_variale_name_split(row_text):type_header = row_text.split()[0]if 'xdata' in row_text or 'code' in row_text:type_header = ' '.join(row_text.split()[0:2])if ',' in row_text: # uchar data A,B  uint a,c,dfor item in row_text.split(','):T = list(map(str.strip, item.split()))[-1]add_key(list(map(str.strip, item.split()))[-1], type_header)else: # uchar data A  uint Brow_text_list = row_text.split()if 'xdata' in row_text or 'code' in row_text:add_key(row_text_list[2].strip(),type_header)else:add_key(row_text_list[1].strip(),type_header)# uint AA=0
# uint AA=0,BB=0
# uint xdata AAA=0
# uint xdata AAA[BBB]={0}  -- 变量名和类型添加
def type_variable_name_equal_split(row_text):# 裁剪定义的数组if '{' in row_text:row_text = row_text.split('{')[0]type_header = row_text.split()[0]if 'xdata' in row_text or 'code' in row_text:type_header = ' '.join(row_text.split()[0:2])# uint AA=0,BB=0# uint code AA=0,BB=0,CC=1# uint code A=0;if ',' in row_text:for item in row_text.split(','):type_header_variable = item.split('=')[0]# uint AAif type_header in type_header_variable:add_key(type_header_variable.split(type_header)[1].strip(), type_header)else: # AAadd_key(type_header_variable.strip(), type_header)else: # uint AA=0# uchar   xdata B=0type_header_variable_else = row_text.split('=')[0]type_header_variable_else_list = list(map(str.strip, type_header_variable_else.split()))add_key(type_header_variable_else_list[-1],type_header)# 变量名和类型添加
def add_key(key, value):# 若key存在if key in variable_dic:returnelse:variable_dic[key] = value# 添加if语句 -- if 语句分割添加
def add_variable_list(string):# (V_Data>35&&V_Data<790)try:cut_if_string = string.split('if')[1].strip()if '(' not in cut_if_string:returnpattern_header = r'\([^!=|<>]+'list_header = re.findall(pattern_header, cut_if_string)[0].split('(')[-1].strip()# 若存在, 则添加if list_header in variable_dic:list_header = variable_dic[list_header] + ' ' + list_headerelse:list_header = '未查询到  ' + list_header# 若不存在, 则不添加wait_list = [list_header, string]# 若头文件存在for row in matrix:if list_header == row[0]:row.append(string)return# 若不存在, 则添加matrix.append(wait_list)except IndexError:print("报错了")# 获取一个文件的内容
def get_bit_file_content(filename, default_encoding='gb2312'):file = ''content = ''try:file = open(filename, 'rb')content = file.read()  # 以字节方式读取except:print("文件" + filename + "打开失败")finally:file.close()source_encoding = chardet.detect(content)['encoding']string = content.decode(source_encoding if source_encoding else default_encoding, 'ignore')return string# 获取所有的if语句分割后添加到二维数组中
def get_all_if_matrix(filename):string = get_bit_file_content(filename)# 正则 if(a==0)pattern_type = r"(\bif\b.+)"matches = re.findall(pattern_type, string)# ['if (V_Data>35&&V_Data<790)     //零上温度校准\r', 'if (V_Data==Temp_Tabe[i][1])\r',]for item in matches:add_variable_list(item)# 获取所有 变量名和类型 添加到字典中
def get_all_variable_dict(filename):string = get_bit_file_content(filename)# 正则 int AAA=0pattern_int = r"(?:\n\b(?:sbit|bit|uchar|uint|ulong|int|long|float|char|double)\b[^;)]+)"matches_int = re.findall(pattern_int,string)# 变量名添加for m_int in matches_int:# 剔除函数if '(' in m_int:continue# 剔除 =0m_int = m_int.lstrip('\n').strip()if '=' in m_int:# uint AAA=0,B=0type_variable_name_equal_split(m_int)else:# uint AAtype_variale_name_split(m_int)if __name__ ==  "__main__":try:filename = sys.argvfilelist = sum(list(map(glob.glob, filename[1:])), []) #获取所有文件名print('检测到的文件:')for item in filelist:print(item)# 获取所有的变量和类型list(map(get_all_variable_dict, filelist))# 获取所有的if语句list(map(get_all_if_matrix, filelist))# 获取桌面路径desktop_path = Path.home() / "Desktop"# print(desktop_path / 'output_all_if.txt')with open(desktop_path / 'output_if.txt', 'w') as fp:for row in matrix:fp.write(row[0]+'\n')for a_bit in row[1:]:fp.write('    '+a_bit)fp.write('\n')print('查询完成,文件保存至:')print("  " + str(desktop_path / 'output_all_if.txt'))except Exception as e:print(str(e))

 需要修改的地方

上面代码,所需要的包,自行导入

 Python 生成 exe

pip install pyinstaller     -- 自行安装包

pyinstaller -Fw .\Select_All_if.py 

Keil C51 插件安装

"$E*.c" "$E*.h" -- 表示当前的所有文件

 效果

 

 不会改的,自行留言

这篇关于Keil C51 插件 检测所有if语句的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099034

相关文章

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W