基于头文件语义分析的进程间通信代码生成方法及系统与流程

摘要: 本发明涉及计算机软件工程及进程间通信代码生成,尤其涉及基于头文件语义分析的进程间通信代码生成方法及系统。背景技术:1、在c++应用软件开发中,不同进程之间需要通...
基于头文件语义分析的进程间通信代码生成方法及系统与流程

本发明涉及计算机软件工程及进程间通信代码生成,尤其涉及基于头文件语义分析的进程间通信代码生成方法及系统。

背景技术:

1、在c++应用软件开发中,不同进程之间需要通过ipc方式完成服务调用和数据传输。现有开发方式通常根据服务类中的api函数声明,分别编写服务端代码、适配器代码、代理代码、客户端代码以及参数序列化和反序列化代码;在采用代码生成工具时,也通常先读取头文件中的函数名称、参数类型和返回类型,再由代码生成器按照内部设置的类型分类规则,为不同c++类型选择对应的代码模板。对于基本类型或结构简单的接口,上述方式能够完成通信代码生成,但当api函数参数或返回类型中包含嵌套结构体、枚举、字符串、固定长度数组、容器以及由依赖头文件引入的用户自定义类型时,代码生成器需要持续识别不同层级的类型结构,并进一步决定每一成员所采用的序列化处理方式。

2、在复杂接口场景下,复合结构体的外层类型仅能表示成员组合关系,而其内部成员可能分别属于基本类型、枚举、字符串、固定长度字符数组、固定长度字节数组或容器。若代码生成器在复合类型上层即确定整体处理规则,成员自身的c++类型差异可能被掩盖;若代码生成器继续对每一个成员建立并维护独立的类型分类规则,则其内部类型判断结果还需要与c++编译器最终识别的真实类型保持一致。当结构体嵌套层级增加、类型别名或容器元素继续引用复合类型时,这种重复判断会沿成员层级传播,一旦生成阶段的类型分类与编译阶段的实际类型不一致,可能表现为成员进入错误的序列化处理路径,或者直到生成代码编译时才出现无匹配重载、类型不兼容等错误。

3、由此,本发明需要解决的技术问题是:在依据c++头文件生成进程间通信代码时,如何在保持复合结构体成员关系完整展开的同时,避免代码生成阶段对终止展开成员重复建立完整的类型判定规则,并使各成员能够按照其真实c++类型进入对应的序列化和反序列化处理路径。

技术实现思路

1、本发明的目的是针对现有技术的不足之处,提供基于头文件语义分析的进程间通信代码生成方法及系统,解决上述背景技术中所提到的技术问题。

2、为实现上述目的,本发明提供如下技术方案:

3、基于头文件语义分析的进程间通信代码生成方法,包括如下步骤:

4、s1、获取目标c++头文件及依赖头文件,解析api函数、结构体及类型依赖关系,对未完成定义的用户自定义类型递归解析,形成记录成员关系、成员顺序及真实c++类型的统一语义模型;

5、s2、基于统一语义模型,将具有成员的用户自定义结构体确定为待展开复合类型,将基本类型、枚举、字符串、固定长度数组和容器确定为终止展开类型,并形成类型展开关系;

6、s3、依据类型展开关系,为待展开复合类型生成专属序列化处理函数和专属反序列化处理函数,沿成员关系逐层生成调用,在终止展开成员处停止展开,形成保留真实c++类型的成员级代码调用关系;

7、s4、依据成员级代码调用关系,在专属处理函数中生成面向序列化重载集合和反序列化重载集合的统一成员调用,不在代码生成阶段确定终止展开成员的具体重载规则,形成待编译ipc序列化代码集合;

8、s5、基于统一语义模型生成服务端代码、适配器代码、代理代码、客户端代码及apiid映射代码,与待编译ipc序列化代码集合组成进程间通信代码集合并编译,使编译器依据终止展开成员真实c++类型完成重载决议,并依据编译状态、api函数名称一致性和文件完整性确定生成结果。

9、基于头文件语义分析的进程间通信代码生成系统,包括:头文件语义解析模块、类型层级判定模块、复合类型代码展开模块、统一成员调用生成模块和ipc代码生成与编译验证模块。

10、本发明的有益效果在于:

11、本发明通过将复合结构的逐层展开与终止展开成员的具体重载选择分离,并保留成员真实c++类型至编译阶段进行重载决议,使结构关系与类型处理职责相互明确,减少生成阶段类型判断偏差,提高ipc序列化与反序列化处理的一致性和可靠性。通过以目标c++头文件及依赖头文件作为统一接口定义来源,并对未完成定义的用户自定义类型执行递归解析,使api函数、结构体、枚举、类型别名及依赖关系汇集到统一语义模型中,减少多来源接口描述不一致造成的语义误差,提高后续代码生成的数据一致性。

12、本发明依据统一语义模型区分待展开复合类型和终止展开类型,并沿成员引用关系形成类型展开关系,使嵌套结构体仅在需要的位置继续展开,同时保持终止展开成员的真实c++类型,减少无效类型拆分及错误分类,提高复杂接口类型层级处理的稳定性。通过为待展开复合类型建立专属序列化处理函数和专属反序列化处理函数,并按照成员顺序逐层形成成员级调用关系,使嵌套结构体的成员路径保持连续且可检查,减少成员遗漏、调用关系冲突及顺序偏差,提高复合类型代码生成的完整性和一致性。

13、本发明通过对终止展开成员生成面向序列化重载集合和反序列化重载集合的统一成员调用,并将真实c++类型保留至编译阶段,使代码生成器无需重复维护完整叶类型判定规则,减少生成规则与编译器类型识别不一致引起的匹配误差,提高类型处理可靠性。通过基于统一语义模型生成服务端、适配器、代理、客户端及api id映射代码,并对形成的进程间通信代码集合执行编译、api函数名称一致性检查和文件完整性检查,使接口生成结果接受统一验证,降低无匹配重载、文件缺失及接口不一致导致的生成故障率。

1.基于头文件语义分析的进程间通信代码生成方法,其特征在于,包括如下步骤:

2.根据权利要求1所述的基于头文件语义分析的进程间通信代码生成方法,其特征在于,s1具体包括:

3.根据权利要求2所述的基于头文件语义分析的进程间通信代码生成方法,其特征在于,还包括:对用户自定义类型递归解析,直至不再产生尚未解析的新用户自定义类型,将解析所得服务类、api函数、结构体成员关系、枚举、类型别名及类型依赖关系组织为统一语义模型。

4.根据权利要求1所述的基于头文件语义分析的进程间通信代码生成方法,其特征在于,s2具体包括:

5.根据权利要求4所述的基于头文件语义分析的进程间通信代码生成方法,其特征在于,还包括:在到达终止展开类型时停止结构层级扩展,形成包含api类型入口、各层成员引用次序、终止展开位置及终止展开成员真实c++类型的类型展开关系。

6.根据权利要求1所述的基于头文件语义分析的进程间通信代码生成方法,其特征在于,s3具体包括:

7.根据权利要求1所述的基于头文件语义分析的进程间通信代码生成方法,其特征在于,s4具体包括:

8.根据权利要求7所述的基于头文件语义分析的进程间通信代码生成方法,其特征在于,还包括:将统一成员调用以及复合成员对应的下一层专属处理函数调用写入对应专属处理函数,检查各成员处理语句、成员顺序、真实c++类型及所需头文件引用的完整性,将通过检查的专属处理函数及成员调用组织为待编译ipc序列化代码集合。

9.根据权利要求1所述的基于头文件语义分析的进程间通信代码生成方法,其特征在于,s5具体包括:

10.基于头文件语义分析的进程间通信代码生成系统,采用权利要求1至9中任一项所述的基于头文件语义分析的进程间通信代码生成方法,其特征在于,包括: