一种基于规则模板的C++代码向C代码的自动转化方法技术

技术编号:35414531 阅读:16 留言:0更新日期:2022-11-03 11:12
本发明专利技术公开了一种基于规则模板的C++代码向C代码的自动转化方法,包括以下步骤:S1.代码文本生成语义树:输入并扫描待转化的C++代码,识别代码标识;按块和行分割代码,对每行代码进行语义分析,并生成语义树即结构化的数据;S2.基本规则转化:对生成的语义树进行基本规则转化,包括类转化、全局变量转化、引用转化和类型转化;S3.代码规范转换:对基本规则转化后的语义树进行代码规范转换,包括优化计算、命名规范、注释规范和组织规范;S4.语义树生成代码文本:从代码规范转换后的语义树中提取信息,按行和块组织代码并添加代码标识,从而生成C代码文本。本发明专利技术应用了自动化的代码处理方法,可极大提升代码转换效率。可极大提升代码转换效率。可极大提升代码转换效率。

【技术实现步骤摘要】
一种基于规则模板的C++代码向C代码的自动转化方法


[0001]本专利技术涉及计算机编程语言
,尤其涉及一种基于规则模板的C++代码向C代码的自动转化方法。

技术介绍

[0002]在主流的嵌入式平台中,主要由C++和C语言编写的控制程序进行驱动。支持C++语言的平台可以向下兼容C语言的程序,但仅支持C语言的平台无法直接使用C++程序,需要对C++代码进行转换。如何针对C++代码向C代码的转换流程,形成一套完整的转化方法模板,以指导C++代码向C代码的转换,是亟待解决的问题。
[0003]在转换流程中,人工的转换方式存在以下几方面的问题:
[0004](1)人工转换C++代码的转换效率问题。目前C++代码转换成C代码的主流方法是抛弃部分C++语法特性进行重写,但与之相应的调用和部署方式也需要配套的改动,这种方式会耗费大量人力物力。
[0005](2)人工转换的方式由于其工作量较大,通常需要较多人员进行协作转换。在这个过程中缺少一个通用的转换规则,导致需要更多的时间用于沟通制定临时的转换规则。在转换过程用人工的重复工作来处理大量代码,容易产生各种细节上的错误。
[0006](3)人工转换的方式难以统一代码风格,造成代码可读性较差的问题。且部分C语言代码需要遵守一定的代码规范。
[0007]为此,需要建立一种转换流程,覆盖C++与C语言的基础语法特性,提高转化效率,实现部分转化的自动化。针对完整流程,可将转化结果形成完整的C语言工程,移交给其他人员后,可完整呈现各阶段转化成果;在总体转化阶段,提供部分语法自动转化功能,人员输入代码满足转化条件时,自动转化代码数据;在自动转化的过程中提供优化计算等符合C语言风格的代码规范转换。

技术实现思路

[0008]本专利技术要解决的技术问题为:
[0009](1)代码细节多,人工转换耗时耗力;(2)转换过程涉及两种语言间的语法差异,人工转化方式容易出错且难以统一转换规则;(3)人工转化的方式难以统一代码风格,不符合C语言代码的相关规范。
[0010]本专利技术采用的技术方案如下:
[0011]一种基于规则模板的C++代码向C代码的自动转化方法,包括:
[0012]S1.代码文本生成语义树:输入并扫描待转化的C++代码,识别代码标识;按块和行分割代码,对每行代码进行语义分析,并生成语义树即结构化的数据;
[0013]S2.基本规则转化:对生成的语义树进行基本规则转化,包括类转化、全局变量转化、引用转化和类型转化;
[0014]S3.代码规范转换:对基本规则转化后的语义树进行代码规范转换,包括优化计
算、命名规范、注释规范和组织规范;
[0015]S4.语义树生成代码文本:从代码规范转换后的语义树中提取信息,按行和块组织代码并添加代码标识,从而生成C代码文本。
[0016]进一步地,步骤S1包括以下子步骤:
[0017]S101.加载待转化的C++代码文本;
[0018]S102.对代码进行词法扫描和语法扫描,获取代码信息,所述代码信息包括标识符信息和逻辑结构信息;
[0019]S103.对代码中的注释进行扫描,获取注释信息,所述注释包括独立注释和依附于代码的注释;
[0020]S104.扫描完后,对于获取的代码信息和注释信息,按照行号位置信息进行整合,形成结构化的数据。
[0021]进一步地,步骤S2中,所述类转化的方法包括:使用全局函数加函数指针实现类的成员函数功能,并对全局函数添加前缀。
[0022]进一步地,使用struct类型来组织类的基础部分,同时声明函数指针以实现成员函数的功能。
[0023]进一步地,先以全局函数的形式进行声明和定义,再声明成员函数并添加相应的前缀来标识成员函数的身份,添加额外的类型指针参数*p使其具有调用类内其他成员函数和成员变量的功能。
[0024]进一步地,为每个类添加注入函数,用于将已声明的成员函数的地址传入实例化对象的函数指针中,使其具备相应的成员函数属性;在构造函数中先执行注入函数,再执行其余构造函数内容。
[0025]进一步地,步骤S2中,所述引用转化的方法包括:将所涉及的引用形参转化为指针形参,并对函数体中相应的位置进行处理。
[0026]进一步地,步骤S2中,所述全局变量转化的方法包括:将局部变量声明调整至作用域头部。
[0027]进一步地,步骤S2中,所述类型转化包括对布尔类型的转化:在工程中添加convert_cplusplus2c.h头文件,在其中定义相关宏和结构体实现布尔类型的功能。
[0028]进一步地,步骤S3中,所述优化计算的方法包括:若每行代码对数学库函数的调用次数大于一次,则将调用字段拆替换为局部变量,所述局部变量包括局部变量声明、局部变量赋值和局部变量调用。
[0029]本专利技术的有益效果在于:
[0030](1)本专利技术提供了统一化的C++代码转化C代码方法,将待转化的C++代码通过代码扫描工具存储为数据信息,并通过语义分析工具对数据信息进行基础的语义分析,将其划分为语义树,有更高的操作修改自由度。
[0031](2)针对C++与C语言的部分语法特性差异制定了转化规则,并总结形成转化规则模板,应用该模板对存储代码信息的语义树进行处理,对规则模板之外的语法特性进行标记及报错处理,可帮助编码人员了解代码转换的结果。
[0032](3)对有额外代码规范的情况制定了相应的代码规范模板,在自动的代码转化和人工调整后,基于代码规范模板对代码进行规范化处理,可提高代码的可读性。
[0033](4)在完成上述处理后,对语义树中的代码信息重新组装输出,最终可得到符合相关规范的C语言代码。
[0034](5)在代码转化流程中应用了自动化的代码处理,大大提升了代码转换的执行效率。
[0035](6)形成了统一的转换规则,可强化自动转化代码的流程可控性,方便后续开发人员在其基础上进行纠错和二次开发。
[0036](7)增加了代码规范约束,可进一步规范化代码,可提升代码的可读性,使得转换后的代码适用于不同的工况。
附图说明
[0037]图1本专利技术的C++代码向C代码的自动转化方法流程简图。
[0038]图2本专利技术的C++代码向C代码的自动转化方法流程框图。
[0039]图3本专利技术的代码扫描的运行过程图。
[0040]图4本专利技术的C++代码解析的运行过程图。
[0041]图5布尔类型定义头文件示例。
[0042]图6 C++中的类及其构造函数、析构函数、成员函数示例。
[0043]图7 C语言中类声明示例。
[0044]图8 C语言中类外成员函数声明示例。
[0045]图9 C语言中类的构造函数与注入函数示例。
[0046]图10本专利技术对于引用形参的处理示例。
[0047]图11本专利技术的对于函数体内引用的处理示本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于规则模板的C++代码向C代码的自动转化方法,其特征在于,包括以下步骤:S1.代码文本生成语义树:输入并扫描待转化的C++代码,识别代码标识;按块和行分割代码,对每行代码进行语义分析,并生成语义树即结构化的数据;S2.基本规则转化:对生成的语义树进行基本规则转化,包括类转化、全局变量转化、引用转化和类型转化;S3.代码规范转换:对基本规则转化后的语义树进行代码规范转换,包括优化计算、命名规范、注释规范和组织规范;S4.语义树生成代码文本:从代码规范转换后的语义树中提取信息,按行和块组织代码并添加代码标识,从而生成C代码文本。2.根据权利要求1所述的基于规则模板的C++代码向C代码的自动转化方法,其特征在于,步骤S1包括以下子步骤:S101.加载待转化的C++代码文本;S102.对代码进行词法扫描和语法扫描,获取代码信息,所述代码信息包括标识符信息和逻辑结构信息;S103.对代码中的注释进行扫描,获取注释信息,所述注释包括独立注释和依附于代码的注释;S104.扫描完后,对于获取的代码信息和注释信息,按照行号位置信息进行整合,形成结构化的数据。3.根据权利要求1所述的基于规则模板的C++代码向C代码的自动转化方法,其特征在于,步骤S2中,所述类转化的方法包括:使用全局函数加函数指针实现类的成员函数功能,并对全局函数添加前缀。4.根据权利要求3所述的基于规则模板的C++代码向C代码的自动转化方法,其特征在于,使用struct类型来组织类的基础部分,同时声明函数指针以实现成员函数的功能。5.根据权利要求...

【专利技术属性】
技术研发人员:王圣文陈志强吴广尹振张和华王晓涵
申请(专利权)人:成都工元科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1