System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及计算机,具体而言,涉及一种源代码到接口描述语言的转换方法及装置。
技术介绍
1、接口描述语言(interface description language,idl),是一种用来描述软件组件接口的计算机语言,idl通过一种独立于编程语言的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信交流。通常情况下,基于idl描述语言的代码是用户手动编写完成的。
2、在不同的系统平台或者技术栈平台上,针对实际程序应用的单元组件功能,程序员在编码或者平台迁移时可能基于不同的编程语言,为了实现不同的编程语言的自动化生成与动态切换,往往会采用代码生成器,通过解析idl描述语言来自动生成相应编程语言的代码。
3、然而,在实际项目中,基于现有代码反方向解读或抽象idl输入的工作也是非常常见的。比如在历史软件开发过程中没有采用idl的方式去抽象定义软件代码,也没有使用代码引擎自动化生成多平台适用的编程语言代码,此时如果需要对开发过程规范方法论,或者切换新的技术栈和多平台编程语言支持,那么针对新的项目需求,就需要研究如何将项目旧有代码反向抽象为idl描述语言方式。针对此项反向工作,如果人工做抽象转换工作,工作量将会很大,效率非常低,而且难以避免引入人工错误。
4、针对上述的问题,目前尚未提出有效的解决方案。
技术实现思路
1、本申请实施例提供了一种源代码到接口描述语言的转换方法及装置,以至少解决人工将源代码逆向转换为接口描述语言效率较低、
2、根据本申请实施例的一个方面,提供了一种源代码到接口描述语言的转换方法,包括:获取待转换的源代码;对源代码进行语法树解析,得到第一json模型;对第一json模型进行模型重构,得到第二json模型,其中,模型重构至少包括:将第一json模型中的匿名数据结构转换为有名称数据结构;利用模板引擎将第二json模型转换为接口描述语言。
3、可选地,对源代码进行语法树解析,得到第一json模型,包括:调用目标编译器对源代码进行语法树解析,得到第一json模型,其中,目标编译器包括:clang编译器,第一json模型中包括与源代码定义的数据类型对应的多种数据结构,多种数据结构包括以下至少之一:数据类、数据名称、数据包、数据元素、数据类别。
4、可选地,对第一json模型进行模型重构,包括:遍历第一json模型中的各个数据结构,对于每个数据结构,遍历数据结构中的各个数据元素,若存在数据类是匿名的数据类型,确定数据结构为匿名数据结构;确定数据类型的目标名称,并依据目标名称生成目标数据结构;利用目标数据结构替换匿名数据结构。
5、可选地,确定数据类型的目标名称,包括:依据数据类型在第一json模型中的上下文信息,确定与数据类型对应的全局唯一的目标名称。
6、可选地,依据先声明后使用原则,对第二json模型中所有用于替换匿名数据结构的目标数据结构进行重新排序。
7、可选地,利用模板引擎将第二json模型转换为接口描述语言,包括:将第二json模型输入目标模板引擎,得到目标模板引擎输出的接口描述语言,其中,目标模板引擎包括:mako模板引擎。
8、可选地,源代码的类型为c++源代码。
9、根据本申请实施例的另一方面,还提供了一种源代码到接口描述语言的转换装置,包括:获取模块,用于获取待转换的源代码;解析模块,用于对源代码进行语法树解析,得到第一json模型;重构模块,用于对第一json模型进行模型重构,得到第二json模型,其中,模型重构至少包括:将第一json模型中的匿名数据结构转换为有名称数据结构;转换模块,用于利用模板引擎将第二json模型转换为接口描述语言。
10、根据本申请实施例的另一方面,还提供了一种非易失性存储介质,该非易失性存储介质包括存储的计算机程序,其中,非易失性存储介质所在设备通过运行该计算机程序执行上述的源代码到接口描述语言的转换方法。
11、根据本申请实施例的另一方面,还提供了一种电子设备,该电子设备包括:存储器和处理器,其中,存储器中存储有计算机程序,处理器被配置为通过计算机程序执行上述的源代码到接口描述语言的转换方法。
12、在本申请实施例中,首先获取待转换的源代码;然后对源代码进行语法树解析,得到第一json模型;再对第一json模型进行模型重构,得到第二json模型,其中,模型重构至少包括:将第一json模型中的匿名数据结构转换为有名称数据结构;最后利用模板引擎将第二json模型转换为接口描述语言。本方案完全实现了从源代码到接口描述语言的自动化转换过程,并且通过中间json模型作为桥梁,还能够实现对源代码数据类型进行重构操作,提高转换结果的准确率,相比于目前的手工编写接口描述语言,质量和效率均大幅提高,即本方案有效解决了人工将源代码逆向转换为接口描述语言效率较低、准确性较差的技术问题。
本文档来自技高网...【技术保护点】
1.一种源代码到接口描述语言的转换方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,对所述源代码进行语法树解析,得到第一JSON模型,包括:
3.根据权利要求1所述的方法,其特征在于,对所述第一JSON模型进行模型重构,包括:
4.根据权利要求3所述的方法,其特征在于,确定所述数据类型的目标名称,包括:
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
6.根据权利要求1所述的方法,其特征在于,利用模板引擎将所述第二JSON模型转换为接口描述语言,包括:
7.根据权利要求1至6中任意一项所述的方法,其特征在于,所述源代码的类型为C++源代码。
8.一种源代码到接口描述语言的转换装置,其特征在于,包括:
9.一种非易失性存储介质,其特征在于,所述非易失性存储介质包括存储的计算机程序,其中,所述非易失性存储介质所在设备通过运行所述计算机程序执行权利要求1至7中任意一项所述的源代码到接口描述语言的转换方法。
10.一种电子设备,其特征在于,包括:存储器
...【技术特征摘要】
1.一种源代码到接口描述语言的转换方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,对所述源代码进行语法树解析,得到第一json模型,包括:
3.根据权利要求1所述的方法,其特征在于,对所述第一json模型进行模型重构,包括:
4.根据权利要求3所述的方法,其特征在于,确定所述数据类型的目标名称,包括:
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
6.根据权利要求1所述的方法,其特征在于,利用模板引擎将所述第二json模型转换为接口描述语言,包括:
7.根据权利...
【专利技术属性】
技术研发人员:单威强,董庆运,李东军,
申请(专利权)人:苏州挚途科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。