CN112328256A - 一种自动生成结构体解析器源代码的方法 - Google Patents

一种自动生成结构体解析器源代码的方法 Download PDF

Info

Publication number
CN112328256A
CN112328256A CN202011301025.7A CN202011301025A CN112328256A CN 112328256 A CN112328256 A CN 112328256A CN 202011301025 A CN202011301025 A CN 202011301025A CN 112328256 A CN112328256 A CN 112328256A
Authority
CN
China
Prior art keywords
source code
automatically generating
relation
structural body
graph
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202011301025.7A
Other languages
English (en)
Other versions
CN112328256B (zh
Inventor
胡建伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan Innogence Technology Co Ltd
Original Assignee
Sichuan Innogence Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sichuan Innogence Technology Co Ltd filed Critical Sichuan Innogence Technology Co Ltd
Priority to CN202011301025.7A priority Critical patent/CN112328256B/zh
Publication of CN112328256A publication Critical patent/CN112328256A/zh
Application granted granted Critical
Publication of CN112328256B publication Critical patent/CN112328256B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种自动生成结构体解析器源代码的方法,包括以下步骤:对需要进行解析的结构体进行分析并导出成员变量关系图,然后采用源代码自动生成工具加载并遍历成员变量关系图,进一步在内存中重构结构体成员变量的层级关系;最终根据内存中结构体成员变量的层级关系,自动生成其解析器源代码。本发明能适用于各种不同的编程语言,操作极为简便,可以实现完全自动化,不需要人工编写任何的代码或描述文件,可靠性强,变更成本低,操作难度低,工程实施可行性强。

Description

一种自动生成结构体解析器源代码的方法
技术领域
本发明涉及计算机软件领域,尤其涉及一种自动生成结构体解析器源代码的方法。
背景技术
在计算机软件领域里,我们经常会遇到需要对数据结构进行解析的情况。尤其在网络通信领域里,对数据结构的解析工作更是必不可少,而解析器源代码的开发工作量往往是巨大的。现有的解析器源代码自动生成方法普适性较差,应用场景非常有限;与此同时,现有的技术方案通常是通过字段规则描述文件来自动生成解析代码,然而编写字段规则描述文件依然是一项费时费力的工作,且描述文件通常为规模较大的文本文件,编辑的过程中非常容易出现错误。综上所述,目前所有的技术方案均不能彻底地解决结构体(高级语言中通常称为对象)解析器源代码开发工作量大且容易出错的问题。
发明内容
本发明的目的在于克服现有的解析器源代码自动生成方法存在的普适性差、应用场景受限、实现过程繁琐和输出结果不可靠的问题,提供一种自动生成结构体解析器源代码的方法。
本发明的目的是通过以下技术方案来实现的:
一种自动生成结构体解析器源代码的方法,包括以下步骤:
S1:对需要进行解析的结构体进行分析,并生成成员变量关系图;
S2:加载并遍历成员变量关系图;
S3:重构结构体成员变量的层级关系;
S4:根据成员变量的层级关系自动生成解析器源代码。
进一步的,所述S2包括以下步骤:
S201:从磁盘中加载关系图;
S202:根据语法规则解析关系图,形成关系节点;
S203:遍历所有关系节点。
进一步的,所述S3包括以下步骤:
S301:获取所有节点信息以及所有节点之间的连接关系;
S302:根据节点信息以及节点之间连接关系重构成员变量层级关系。
进一步的,所述结构体是由一组不同成员数据组成的数据类型。
进一步的,所述关系图为矢量图,并具有固定的语义规则,以便能明确地表示结构体成员变量的层级关系。
本发明的有益效果:
(1)适用于各种不同的编程语言,普适性强;
(2)操作极为简便,可以实现完全自动化,不需要人工编写任何的代码或描述文件;
(3)由于可以实现完全自动化,相比于需要人工参与的方法而言,可靠性更强,且变更成本极低;
(4)因为输入内容由代码静态分析工具产生,不限制编程语言,应用场景更加丰富;
(5)相比于其他需要编写描述文件的专利技术方案而言,本发明的方法完全不需要人工参与,操作难度更低,学习成本更低,因此实际地实施起来会更加容易。
附图说明
图1是本发明的方法流程图。
图2是本发明实施例的结构体定义示意图。
图3是本发明实施例的成员变量关系矢量图。
图4是本发明实施例的重构结构体变量层级关系的流程图。
图5是本发明实施例生成的解析器源代码示意图。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图说明本发明的具体实施方式。
在本实施例中,如图1所示,一种自动生成结构体解析器源代码的方法,包括以下步骤:
使用静态代码分析工具对需要进行解析的结构体进行分析,并生成成员变量关系图;
采用源代码自动生成工具自动加载并遍历成员变量关系图,并在内存中重构结构体成员变量的层级关系;
根据内存中结构体成员变量的层级关系自动生成解析器的源代码。
本实施例中,结构体的定义源代码如图2所示,所述结构体为C语言中的结构体,但是本方法并不局限于C语言结构体,对于C++、C#、Java等高级语言同样适用。
本实施例中,所述静态代码分析工具为Understand。
本实施例中,如图3所示,所述关系图为矢量图,不可为阵列图(也被称为图片/位图),在工具Understand下产生的矢量图的格式为VDX格式,它具有固定的语义规则,以便能明确地表示结构体成员变量的层级关系。
其中,所述VDX格式的矢量图文件遵循标准的XML语法规则,因此完全可以根据XML的语法规则对VDX文件进行加载和解析处理。
本实施例中,所述在内存中重构结构体成员变量层级关系的处理流程,如图4所示,包括以下步骤:
从磁盘加载VDX文件;
根据XML语法规则解析VDX文件;
获取所有节点信息;
获取所有节点之间的连接关系;
根据节点及节点间的连接关系重构成员变量层级关系。
本实施例中,如图5所示,所述生成的解析器源代码为将结构体转换为JSON的解析器的源代码,但这并不意味着本技术方案局限于此,本实施例仅用于举例说明本发明内容的具体实施方法。
本发明通过使用静态代码分析工具对需要进行解析的结构体进行分析并导出成员变量关系图,然后采用源代码自动生成工具加载并遍历成员变量关系图,进一步在内存中重构结构体成员变量的层级关系;最终根据内存中结构体成员变量的层级关系,自动生成其解析器源代码,能适用于各种不同的编程语言,操作极为简便,可以实现完全自动化,不需要人工编写任何的代码或描述文件,可靠性强,变更成本低,操作难度低,在实际的工程实施中,应用成本极低。
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护的范围由所附的权利要求书及其等效物界定。

Claims (5)

1.一种自动生成结构体解析器源代码的方法,其特征在于,包括以下步骤:
S1:对需要进行解析的结构体进行分析,并生成成员变量关系图;
S2:加载并遍历成员变量关系图;
S3:重构结构体成员变量的层级关系;
S4:根据成员变量的层级关系自动生成解析器源代码。
2.根据权利要求1所述的一种自动生成结构体解析器源代码的方法,其特征在于,所述结构体是由一组不同成员数据组成的数据类型。
3.根据权利要求1所述的一种自动生成结构体解析器源代码的方法,其特征在于,所述关系图为矢量图,具有固定的语义规则,能明确地表示结构体成员变量的层级关系。
4.根据权利要求1所述的一种自动生成结构体解析器源代码的方法,其特征在于,所述S2包括以下步骤:
S201:从磁盘中加载关系图;
S202:根据语法规则解析关系图,形成关系节点;
S203:遍历所有关系节点。
5.根据权利要求1所述的一种自动生成结构体解析器源代码的方法,其特征在于,所述S3包括以下步骤:
S301:获取所有节点信息以及所有节点之间的连接关系;
S302:根据节点信息以及节点之间连接关系重构成员变量层级关系。
CN202011301025.7A 2020-11-19 2020-11-19 一种自动生成结构体解析器源代码的方法 Active CN112328256B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011301025.7A CN112328256B (zh) 2020-11-19 2020-11-19 一种自动生成结构体解析器源代码的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011301025.7A CN112328256B (zh) 2020-11-19 2020-11-19 一种自动生成结构体解析器源代码的方法

Publications (2)

Publication Number Publication Date
CN112328256A true CN112328256A (zh) 2021-02-05
CN112328256B CN112328256B (zh) 2023-04-25

Family

ID=74321543

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011301025.7A Active CN112328256B (zh) 2020-11-19 2020-11-19 一种自动生成结构体解析器源代码的方法

Country Status (1)

Country Link
CN (1) CN112328256B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115080015A (zh) * 2022-08-23 2022-09-20 珠海正和微芯科技有限公司 自动生成upf代码的方法、系统、电子设备及存储介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060117033A1 (en) * 2004-11-30 2006-06-01 Apparao Padmashree K Incorporating structural information into an extensible markup language document
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN101162428A (zh) * 2007-11-22 2008-04-16 上海交通大学 软件动态演化中构件运行时状态的获取和转换方法
CN102622470A (zh) * 2012-02-21 2012-08-01 重庆邮电大学 一种通用汽车代码转换方法
CN102880468A (zh) * 2012-09-12 2013-01-16 浙江大学 一种用于ecu程序开发的代码智能提示方法及其系统
WO2013088461A1 (ja) * 2011-12-12 2013-06-20 株式会社 日立製作所 ソフトウェア解析プログラム、および、ソフトウェア解析システム
CN110007920A (zh) * 2018-01-04 2019-07-12 阿里巴巴集团控股有限公司 一种获取代码依赖关系的方法、装置及电子设备
CN110134380A (zh) * 2019-03-29 2019-08-16 北京车和家信息技术有限公司 一种基于模板引擎的代码生成方法、装置及电子设备
CN111324577A (zh) * 2018-12-17 2020-06-23 大唐移动通信设备有限公司 一种Yml文件读写的方法及装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060117033A1 (en) * 2004-11-30 2006-06-01 Apparao Padmashree K Incorporating structural information into an extensible markup language document
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN101162428A (zh) * 2007-11-22 2008-04-16 上海交通大学 软件动态演化中构件运行时状态的获取和转换方法
WO2013088461A1 (ja) * 2011-12-12 2013-06-20 株式会社 日立製作所 ソフトウェア解析プログラム、および、ソフトウェア解析システム
CN102622470A (zh) * 2012-02-21 2012-08-01 重庆邮电大学 一种通用汽车代码转换方法
CN102880468A (zh) * 2012-09-12 2013-01-16 浙江大学 一种用于ecu程序开发的代码智能提示方法及其系统
CN110007920A (zh) * 2018-01-04 2019-07-12 阿里巴巴集团控股有限公司 一种获取代码依赖关系的方法、装置及电子设备
CN111324577A (zh) * 2018-12-17 2020-06-23 大唐移动通信设备有限公司 一种Yml文件读写的方法及装置
CN110134380A (zh) * 2019-03-29 2019-08-16 北京车和家信息技术有限公司 一种基于模板引擎的代码生成方法、装置及电子设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
KOSTOULAS M G 等: "XML screamer:anintegrated approach to high performance XML parsing,validation and deserialization" *
朱鹏飞 等: "基于黑板结构模式的XML解析器" *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115080015A (zh) * 2022-08-23 2022-09-20 珠海正和微芯科技有限公司 自动生成upf代码的方法、系统、电子设备及存储介质

Also Published As

Publication number Publication date
CN112328256B (zh) 2023-04-25

Similar Documents

Publication Publication Date Title
US9122540B2 (en) Transformation of computer programs and eliminating errors
US20040158820A1 (en) System for generating an application framework and components
CN108595334B (zh) 一种计算Java程序动态切片的方法、装置及可读存储介质
CN111367524B (zh) 枚举类型设计方法及装置
CN114047970A (zh) 一种autosar架构软件的配置方法及系统
CN113467785B (zh) 一种拟态数据库的sql转译方法和系统
CN114706592B (zh) 面向对象及面向过程语言的Modelica仿真组件生成方法
CN115951890A (zh) 一种不同前端框架间的代码转换方法及系统及装置
CN112269566B (zh) 脚本生成处理方法、装置、设备及系统
CN108664546B (zh) Xml数据结构转换方法和装置
CN112328256B (zh) 一种自动生成结构体解析器源代码的方法
CN112286784B (zh) 一种测试用例生成方法、装置、服务器及存储介质
CN111078217A (zh) 脑图生成方法、装置和计算机可读存储介质
US20220350574A1 (en) Code injection from natural language derived intent
CN112860234A (zh) 一种前端页面代码生成方法及系统
CN111399901B (zh) 状态枚举类生成方法、装置、服务器及存储介质
CN103116514A (zh) 基于系统扩展调用图的操作系统自动优化方法和系统
CN111831288A (zh) 一种自动生成Thrift IDL数据结构及自动转换函数的方法及系统
CN116501303B (zh) Api代码自动生成方法与装置
US8120789B2 (en) Method and system for processing an electronic document using streaming optimization via programmatic analysis of XML use
CN117311692A (zh) 一种基于HTML文件格式的Qt界面及样式自动生成方法及系统
CN114461719A (zh) 实现plpgsql语言无限取域的方法及系统
CN114416100A (zh) 一种基于增量编译器的全量编译方法、装置、介质及设备
Andrzejak et al. One DSL to Rule Them All: IDE-Assisted Code Generation for Agile Data Analysis
CN117008914A (zh) 一种文件格式转换的方法及设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant