CN118092921A - 文件生成方法、装置、设备、存储介质和计算机程序产品 - Google Patents

文件生成方法、装置、设备、存储介质和计算机程序产品 Download PDF

Info

Publication number
CN118092921A
CN118092921A CN202211499744.3A CN202211499744A CN118092921A CN 118092921 A CN118092921 A CN 118092921A CN 202211499744 A CN202211499744 A CN 202211499744A CN 118092921 A CN118092921 A CN 118092921A
Authority
CN
China
Prior art keywords
file
source code
node
packet
code file
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.)
Pending
Application number
CN202211499744.3A
Other languages
English (en)
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.)
China Automotive Innovation Co Ltd
Original Assignee
China Automotive Innovation 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 China Automotive Innovation Co Ltd filed Critical China Automotive Innovation Co Ltd
Priority to CN202211499744.3A priority Critical patent/CN118092921A/zh
Publication of CN118092921A publication Critical patent/CN118092921A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请涉及一种文件生成方法、装置、计算机设备、存储介质和计算机程序产品。所述方法包括:获取待转换的源码文件;其中,源码文件基于面向过程的编程语言编写得到;对源码文件进行解析,得到用于描述源码文件的序列化语言文件;根据序列化语言文件,生成基于通用建模语言编写的包结构图;对包结构图进行格式转换,得到源码文件对应的标准格式文件;其中,标准格式文件为可扩展标记语言元数据交换XMI文件。采用本方法针对基于面向过程的编程语言所编写的源码文件,生成可清楚描述此源码文件的层次结构及内容的UML包结构图对应的XMI文件,进而通过对XMI文件中的UML包结构图进行可视化展示,即可便于开发人员快速理解源码文件,节约时间。

Description

文件生成方法、装置、设备、存储介质和计算机程序产品
技术领域
本申请涉及计算机技术领域,特别是涉及一种文件生成方法、装置、设备、存储介质和计算机程序产品。
背景技术
随着计算机技术的发展,借助计算机进行代码分析可以帮助开发人员准确、高效地理解代码的业务逻辑。为便于帮忙开发人员理解代码的业务逻辑,需要将源码文件转化为XMI(XML Metadata Interchange,可扩展标记语言元数据交换)文件。
目前,主要是通过将源码文件导入可视化建模软件,生成源码文件对应的UML(Unified Modeling Language,通用建模语言)类结构图,进而生成包含UML类结构图的XMI文件。
然而,传统可视化建模软件导入源码文件后,针对面向过程的编程语言(例如C语言),生成的UML类结构图的内部层次结构较为混乱,可读性较差。
发明内容
基于此,有必要针对上述技术问题,提供一种针对基于面向过程的编程语言所编写的源码文件,生成能够清楚描述此源码文件的内容层次结构的XMI文件的文件生成方法、装置、设备、存储介质和计算机程序产品。
第一方面,本申请提供了一种文件生成方法。所述方法包括:
获取待转换的源码文件;其中,源码文件基于面向过程的编程语言编写得到;
对源码文件进行解析,得到用于描述源码文件的序列化语言文件;
根据序列化语言文件,生成基于通用建模语言编写的包结构图;
对包结构图进行格式转换,得到源码文件对应的标准格式文件;其中,标准格式文件为可扩展标记语言元数据交换XMI文件。
在其中一个实施例中,对源码文件进行解析,得到用于描述源码文件的序列化语言文件,包括:
对源码文件进行解析,得到源码文件的目录结构;
根据源码文件,构建抽象语法树;
从抽象语法树中提取函数定义对象,并将函数定义对象添加至文件函数定义映射表中;
从抽象语法树中提取函数调用关系对象,并将函数调用关系对象添加至文件函数调用关系映射表中;
根据目标结构、文件函数定义映射表和文件函数调用关系映射表,构建用于描述源码文件的序列化语言文件。
在其中一个实施例中,根据序列化语言文件,生成基于通用建模语言编写的包结构图,包括:
对序列化语言文件中的描述内容进行解析,得到XMI格式所支持的序列化内存对象;
对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图。
在其中一个实施例中,对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图,包括:
若序列化内存对象为包类型对象,则生成序列化内存对象对应的包对象节点,并将包对象节点挂载至包结构图的根节点上;
确定序列化内存对象是否存在子对象;
若是,则生成子对象对应的分支结构,并将分支结构挂载至包对象节点上。
在其中一个实施例中,生成子对象对应的分支结构,包括:
若子对象为源码类型对象,则生成子对象对应的类对象子节点;
对子对象对应的功能函数进行解析,生成操作子节点;
将操作子节点挂载至类对象子节点上,以得到子对象对应的分支结构。
在其中一个实施例中,生成子对象对应的分支结构,包括:
若子对象为包类型对象,则生成子对象对应的包对象子节点,或者包对象子节点的分支结构;
将包对象子节点或包对象子节点的分支结构,作为子对象对应的分支结构。
在其中一个实施例中,对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图,包括:
若序列化内存对象为源码类型对象,则生成序列化内存对象对应的类对象节点,并将类对象节点挂载至包结构图的根节点上;
对序列化内存对象对应的功能函数进行解析,生成操作节点;
将操作节点挂载至类对象节点上。
在其中一个实施例中,对包结构图进行格式转换,得到源码文件对应的标准格式文件,包括:
根据包结构图中节点的调用频次,对包结构图中节点的挂载位置进行调整;
对调整后的包结构图进行格式转换,得到源码文件对应的标准格式文件。
第二方面,本申请还提供了一种文件生成装置。所述装置包括:
源码文件获取模块,用于获取待转换的源码文件;其中,源码文件基于面向过程的编程语言编写得到;
源码文件解析模块,用于对源码文件进行解析,得到用于描述源码文件的序列化语言文件;
包结构图生成模块,用于根据序列化语言文件,生成基于通用建模语言编写的包结构图;
文件生成模块,用于对包结构图进行格式转换,得到源码文件对应的标准格式文件;其中,标准格式文件为可扩展标记语言元数据交换XMI文件。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取待转换的源码文件;其中,源码文件基于面向过程的编程语言编写得到;
对源码文件进行解析,得到用于描述源码文件的序列化语言文件;
根据序列化语言文件,生成基于通用建模语言编写的包结构图;
对包结构图进行格式转换,得到源码文件对应的标准格式文件;其中,标准格式文件为可扩展标记语言元数据交换XMI文件。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取待转换的源码文件;其中,源码文件基于面向过程的编程语言编写得到;
对源码文件进行解析,得到用于描述源码文件的序列化语言文件;
根据序列化语言文件,生成基于通用建模语言编写的包结构图;
对包结构图进行格式转换,得到源码文件对应的标准格式文件;其中,标准格式文件为可扩展标记语言元数据交换XMI文件。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取待转换的源码文件;其中,源码文件基于面向过程的编程语言编写得到;
对源码文件进行解析,得到用于描述源码文件的序列化语言文件;
根据序列化语言文件,生成基于通用建模语言编写的包结构图;
对包结构图进行格式转换,得到源码文件对应的标准格式文件;其中,标准格式文件为可扩展标记语言元数据交换XMI文件。
上述文件生成方法、装置、设备、存储介质和计算机程序产品,针对基于面向过程的编程语言所编写的源码文件,通过对源码文件进行解析,能够生成可清楚描述此源码文件的层次结构及内容的UML包结构图对应的XMI文件,进而通过对XMI文件中的UML包结构图进行可视化展示,即可便于开发人员快速理解源码文件,节约时间。
附图说明
图1为一个实施例中文件生成方法的应用环境图;
图2为一个实施例中文件生成方法的流程示意图;
图3为一个实施例中确定序列化语言文件的流程示意图;
图4为一个实施例中生成包结构图的流程示意图;
图5为另一个实施例中生成包结构图的流程示意图;
图6为一个实施例中确定标准格式文件的流程示意图;
图7为另一个实施例中文件生成方法的流程示意图;
图8为一个实施例中文件生成装置的结构框图;
图9为另一个实施例中文件生成装置的结构框图;
图10为另一个实施例中文件生成装置的结构框图;
图11为另一个实施例中文件生成装置的结构框图;
图12为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的文件生成方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。数据存储系统可以存储服务器104需要处理的数据,比如从终端所获取的源码文件等数据。数据存储系统可以集成在服务器104上,也可以放在云上或其他网络服务器上。服务器104与终端102进行数据交互,获取到终端102传输的源码文件,进而对源码文件数据进行解析,得到描述此源码文件的层次结构和内容的包结构图对应的XMI文件。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机和平板电脑等。服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种文件生成方法,以该方法应用于图1中的服务器104为例进行说明,包括以下步骤:
S201,获取待转换的源码文件。
其中,本实施例中的源码文件基于面向过程的编程语言编写得到,比如基于C语言编写得到。源码文件即为存放程序代码的文件。
可选的,获取待转换的源码文件的方式有很多种,本实施例对此不做限定。例如可以是,当检测到源码文件转换请求时,从该转换请求中提取待转换的源码文件。或者还可以是,在检测到源码文件库的容量超过预设容量阈值时,按照预先设定的时间顺序,从源码文件库中获取到待转换的源码文件。
S202,对源码文件进行解析,得到用于描述源码文件的序列化语言文件。
本实施例中,序列化语言文件即为YAML文件。YAML文件可用来描述源码文件的层次结构与内容。
具体的,获取到待转换的源码文件后,可以采用一个解析工具,对此源码文件进行解析,得到源码文件的目录结构、函数定义、以及函数调用关系等信息。进一步的,将这些信息进行整合,即可得到用于描述源码文件的YAML文件。其中,YAML文件中可以包括源码文件的目录结构,函数定义,以及函数调用关系等信息。
S203,根据序列化语言文件,生成基于通用建模语言编写的包结构图。
本实施例中,基于通用建模语言编写的包结构图即为UML包结构图。可选的,UML包结构图可以包括描述源码文件的目录结构的目录结构图,描述源码文件的函数定义的函数定义图,以及描述源码文件的函数调用关系的函数调用关系图等。
具体的,通过引入一种用于解析YAML文件,序列化以及反序列化的第三方框架工具(例如SnakeYaml),对得到的YAML文件中所描述的目录结构、函数定义和函数调用关系进行解析,得到XMI格式所支持的序列化内存对象;之后,对序列化内存对象中描述的目录结构、函数定义和函数调用关系进行进一步解析,即可得到能够描述包括目录结构、函数定义和函数调用关系的UML包结构图。
S204,对包结构图进行格式转换,得到源码文件对应的标准格式文件。
本实施例中的标准格式文件即为可扩展标记语言元数据交换XMI文件。
具体的,通过引入一种工具(例如XStream),对UML包结构图进行反序列化,即可得到XMI格式的文件。可以想到,得到的XMI格式的文件包括源码文件的目录结构、函数定义和函数调用关系等数据。
上述文件生成方法,针对基于面向过程的编程语言所编写的源码文件,通过对源码文件进行解析,能够生成可清楚描述此源码文件的层次结构及内容的UML包结构图对应的XMI文件,进而通过对XMI文件中的UML包结构图进行可视化展示,即可便于开发人员快速理解源码文件,节约时间。
在上述实施例的基础上,在一个实施例中,如图3所示,进一步对上述S202进行细化。具体可以包括以下步骤:
S301,对源码文件进行解析,得到源码文件的目录结构。
具体的,获取到待转换的源码文件后,对源码文件进行递归,得到源码文件的目录相关信息;进一步的,对得到的目录相关信息进行解析,得到描述源码文件的目录结构。
S302,根据源码文件,构建抽象语法树。
其中,抽象语法树是描述源码文件的语法结构的一种抽象表示。
具体的,通过引入一种能够对C语言进行预处理的预处理器(例如CPreprocessor),对源码文件进行预处理,即删除源码文件中的注释,并对源码文件中的预处理指令(例如#define等)进行文本替换等操作,使源码文件能够进一步被编译。进一步的,通过引入一种能够对C语言进行解析的解析器(例如Pycparser),将预处理后的源码文件进行解析,构建能够描述源码文件的语法结构的抽象语法树。
S303,从抽象语法树中提取函数定义对象,并将函数定义对象添加至文件函数定义映射表中。
其中,函数定义对象所包括的内容如下表1:
表1
文件函数定义映射表即为包括各函数的定义与各函数所属文件名称的映射表。
具体的,通过构建一种能够访问抽象语法树中的各个函数定义的方法,对源码文件对应的抽象语法树进行递归,获取到抽象语法树中的每一个函数定义对象,与各个函数定义对象所属的文件名称;进一步的,将各函数定义对象,与各个函数定义对象所属的文件名称相应添加到文件函数定义映射表中。
S304,从抽象语法树中提取函数调用关系对象,并将函数调用关系对象添加至文件函数调用关系映射表中。
其中,函数调用关系对象所包括的内容如下表2:
表2
字段名称 数据类型 说明
source String 调用关系所属的源文件
target String 调用关系所属的目标文件
type String 调用关系类型
name String 存在调用关系的函数名称
文件函数调用关系映射表即为包括各函数之间的调用关系与存在调用关系的各函数所属的文件名称的映射表。
具体的,通过构建一种能够访问抽象语法树中的各函数之间的调用关系的方法,对源码文件对应的抽象语法树进行递归,获取到抽象语法树中的函数调用关系对象,与存在调用关系的各函数所属的文件名称;进一步的,将函数调用关系对象,与存在调用关系的各函数所属的文件名称相应添加到文件函数调用关系映射表中。由于此文件函数调用关系映射表中,包括了存在调用关系的各函数所属的文件名称信息,因此,可以进一步得到文件与文件之间的依赖关系。
S305,根据目标结构、文件函数定义映射表和文件函数调用关系映射表,构建用于描述源码文件的序列化语言文件。
其中,序列化语言文件中所包括的内容如表3:
表3
具体的,将得到描述源码文件的目录信息的目录结构,文件函数定义映射表和文件函数调用关系映射表进行数据整合,导出描述源码文件的目录结构、函数定义和函数调用关系的序列化语言文件,即YAML文件。
在本实施例中,通过生成源码文件的抽象语法树,并生成源码文件的目录结构对象,进一步得到描述源码文件的目录结构、函数定义和函数调用关系的YAML文件,使获取到YAML文件的过程更加简便,得到的YAML文件更加准确。
在一个实施例中,如图4所示,进一步对上述S203进行细化。具体可以包括以下步骤:
S401,对序列化语言文件中的描述内容进行解析,得到XMI格式所支持的序列化内存对象。
具体的,通过引入SnakeYaml工具,对生成的YAML文件中所描述的源码文件的目录结构、函数定义与函数调用关系进行解析,进一步转换成YAML文件对应的序列化内存对象。该序列化内存对象为XMI格式所支持的内存对象。
S402,对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图。
具体的,对得到的序列化内存对象中描述的目录结构、函数定义和函数调用关系进行递归;进一步的,依次对递归结果进行挂载,生成描述目录结构的目录结构图、描述函数定义的函数定义图以及描述函数调用关系的函数调用关系图,作为YAML文件对应的UML包结构图。
在本实施例中,通过对YAML文件进行转换和解析,生成对应的UML包结构图,使生成UML包结构图的过程更加简便,UML包结构图中所包括的层次与内容更加准确。
示例性的,序列化内存对象可以为包类型对象或源码类型对象。包类型对象中能够包括源码类型对象,而源码类型对象中不能够包括其他源码类型对象。进一步的,序列化内存对象为包类型对象的处理逻辑,与序列化内存对象为源码类型对象的处理逻辑不同。
可选的,若序列化内存对象为源码类型对象,则生成序列化内存对象对应的类对象节点,并将类对象节点挂载至包结构图的根节点上;对序列化内存对象对应的功能函数进行解析,生成操作节点;将操作节点挂载至类对象节点上。
其中,每一个包结构图中都存在一个根节点,即不存在父节点的节点。操作节点可以表示功能函数,在包结构图上进行挂载。
具体的,若判断序列化内存对象为源码类型对象,则针对此源码类型对象生成对应的类对象节点,并将类对象节点挂载到包结构的根节点上,对源码类型对象进行分析,提取出源码类型对象包含的功能函数,对提取出的功能函数进行解析,生成各功能函数对应的操作节点;进一步的,将生成的每个操作节点挂载到源码类型对象对应的类对象节点上。最终,得到此序列化内存对象对应的包结构图。
可选的,若序列化内存对象为包类型对象,则可以通过如下步骤来构建包结构图。结合图5所示,具体包括以下步骤:
S501,生成序列化内存对象对应的包对象节点,并将包对象节点挂载至包结构图的根节点上。
具体的,判断序列化内存对象为包类型对象还是源码类型对象。若判断序列化内存对象为包类型对象,则针对此包类型对象生成对应的包对象节点,并将包对象节点挂载到包结构图的根节点上。
S502,确定序列化内存对象是否存在子对象;若是,则执行S503;若否,则执行S504。
其中,子对象包含于序列化内存对象中;可选的,序列化内存对象中可以有多个子对象,并且子对象中也可以包含子对象。
具体的,对序列化内存对象进行递归,确定序列化内存对象中是否存在子对象。可选的,若序列化内存对象中存在子对象,则执行S503;若序列化内存对象中不存在子对象,则执行S504,即无需继续对序列化内存对象进行挂载操作,本序列化内存对象对应的UML包结构图的生成完成。
S503,生成子对象对应的分支结构,并将分支结构挂载至包对象节点上。
其中,分支结构指的是通过挂载操作生成的子对象的层次结构。序列化对象中存在几个子对象,相应的,就会生成几个分支结构。
具体的,若确定序列化内存对象存在子对象,则对子对象进行递归,通过挂载操作,生成子对象对应的分支结构;进一步的,将此分支结构挂载至包含子对象的包对象节点上。
可选的,与序列化内存对象相类似,子对象可以为包类型对象或源码类型对象;进一步的,子对象为包类型对象的情况下生成子对象对应的分支结构的逻辑,与子对象为源码类型对象的情况下生成子对象对应的分支结构的逻辑不同。
示例性的,若子对象为源码类型对象,则生成子对象对应的类对象子节点;对子对象对应的功能函数进行解析,生成操作子节点;将操作子节点挂载至类对象子节点上,以得到子对象对应的分支结构。
具体的,针对子对象生成子对象对应的类对象子节点;对子对象进行分析,提取出子对象包含的功能函数,对提取出的功能函数进行解析,生成各功能函数对应的操作子节点;进一步的,将各个操作子节点挂载至子对象对应的类对象子节点上。最终,得到子对象对应的分支结构。
进一步的,若子对象为包类型对象,则生成子对象对应的包对象子节点,或者包对象子节点的分支结构;将包对象子节点或包对象子节点的分支结构,作为子对象对应的分支结构。
具体的,针对子对象生成子对象对应的包对象子节点。进一步的,对子对象进行分析,判断子对象中是否存在下一级子对象。若确定子对象中不存在下一级对象,则结束本序列化内存对象对应的UML包结构图的生成操作;可选的,若确定子对象中仍存在下一级子对象,则对下一级子对象进行递归,通过挂载操作,生成下一级子对象对应的分支结构,将下一级子对象对应的分支结构挂载到子对象对应的包对象子节点上,至此得到子对象对应的分支结构。
S504,结束本序列化内存对象对应的UML包结构图的生成操作。
在本实施例中,通过对序列化内存对象进行判断、递归和挂载等操作,生成序列化内存对象对应的UML包结构图,使生成的UML包结构图中所包括的层次与内容更加准确。
在一个实施例中,如图6所示,进一步对上述S204进行细化。具体可以包括以下步骤:
S601,根据包结构图中节点的调用频次,对包结构图中节点的挂载位置进行调整。
具体的,对于包结构图中每一节点,依次统计该节点下挂载的各个节点的调用频次;进一步的,将该节点下挂载的各个节点按照调用频次高至低的顺序进行排序,并按照从左至右的位置依次挂载至此该节点上,完成对包结构图中节点的挂载位置的调整。
S602,对调整后的包结构图进行格式转换,得到源码文件对应的标准格式文件。
具体的,通过XStream工具,对调整后的包结构图进行反序列化,即可得到XMI格式的文件。
可以理解的是,本实施例通过根据节点的调用频次对包结构图进行调整,避免了同一父节点上的子节点在包结构图中出现重合的情况,使得UML包结构图更加清晰,准确。
在一个实施例中,如图7所示,提供了一种文件生成方法的可选实例。具体过程如下:
S701,获取待转换的源码文件。
其中,源码文件基于面向过程的编程语言编写得到。
S702,对源码文件进行解析,得到源码文件的目录结构。
S703,根据源码文件,构建抽象语法树。
S704,从抽象语法树中提取函数定义对象,并将函数定义对象添加至文件函数定义映射表中。
S705,从抽象语法树中提取函数调用关系对象,并将函数调用关系对象添加至文件函数调用关系映射表中。
S706,根据目标结构、文件函数定义映射表和文件函数调用关系映射表,构建用于描述源码文件的序列化语言文件。
S707,对序列化语言文件中的描述内容进行解析,得到XMI格式所支持的序列化内存对象。
S708,判断序列化内存对象是否为包类型对象;若是,则执行S709;若否,则执行S712。
S709,生成序列化内存对象对应的包对象节点,并将包对象节点挂载至包结构图的根节点上。
S710,确定序列化内存对象是否存在子对象;若是,则执行S711;若否,则执行S713。
S711,生成子对象对应的分支结构,并将分支结构挂载至包对象节点上。
具体的,若子对象为包类型对象,则生成子对象对应的包对象子节点,或者包对象子节点的分支结构;将包对象子节点或包对象子节点的分支结构,作为子对象对应的分支结构。
若序列化内存对象为源码类型对象,则生成序列化内存对象对应的类对象节点,并将类对象节点挂载至包结构图的根节点上;对序列化内存对象对应的功能函数进行解析,生成操作节点;将操作节点挂载至类对象节点上。
S712,生成子对象对应的类对象子节点;对子对象对应的功能函数进行解析,生成操作子节点;将操作子节点挂载至类对象子节点上,以得到子对象对应的分支结构。
S713,结束本序列化内存对象对应的UML包结构图的生成操作。
上述S701-S713的具体过程可以参见上述方法实施例的描述,其实现原理合计数效果类似,再在此不再赘述。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的文件生成方法的文件生成装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个文件生成装置实施例中的具体限定可以参见上文中对于文件生成方法的限定,在此不再赘述。
在一个实施例中,如图8所示,提供了一种文件生成装置1,包括:文件获取模块10、文件解析模块20、图生成模块30和文件生成模块40,其中:
文件获取模块10,用于获取待转换的源码文件;其中,源码文件基于面向过程的编程语言编写得到;
文件解析模块20,用于对源码文件进行解析,得到用于描述源码文件的序列化语言文件;
图生成模块30,用于根据序列化语言文件,生成基于通用建模语言编写的包结构图;
文件生成模块40,用于对包结构图进行格式转换,得到源码文件对应的标准格式文件;其中,标准格式文件为可扩展标记语言元数据交换XMI文件。
在一个实施例中,如图9所示,上述图8中的文件解析模块20可以包括:
目录结构获取单元21,用于对源码文件进行解析,得到源码文件的目录结构;
语法树构建单元22,用于根据源码文件,构建抽象语法树;
第一提取单元23,用于从抽象语法树中提取函数定义对象,并将函数定义对象添加至文件函数定义映射表中;
第二提取单元24,用于从抽象语法树中提取函数调用关系对象,并将函数调用关系对象添加至文件函数调用关系映射表中;
文件构建单元25,用于根据目标结构、文件函数定义映射表和文件函数调用关系映射表,构建用于描述源码文件的序列化语言文件。
在一个实施例中,在图8或图9的基础上,进一步对图生成模块30进行细化。以在图9的基础上,对图生成模块30进行细化为例进行说明。如图10所示,图生成模块30可以包括:
对象生成单元31,用于对序列化语言文件中的描述内容进行解析,得到XMI格式所支持的序列化内存对象;
图生成单元32,用于对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图。
在一个实施例中,如图11所示,上述图10中的图生成单元32可以包括:
节点挂载子单元321,用于若序列化内存对象为包类型对象,则生成序列化内存对象对应的包对象节点,并将包对象节点挂载至包结构图的根节点上;
子对象确定子单元322,用于确定序列化内存对象是否存在子对象;
结构挂载子单元323,用于若序列化内存对象存在子对象,则生成子对象对应的分支结构,并将分支结构挂载至包对象节点上。
在一个实施例中,上述结构挂载子单元323具体可以用于:
若子对象为源码类型对象,则生成子对象对应的类对象子节点;对子对象对应的功能函数进行解析,生成操作子节点;将操作子节点挂载至类对象子节点上,以得到子对象对应的分支结构。
在一个实施例中,上述结构挂载子单元323具体还可以用于:
若子对象为包类型对象,则生成子对象对应的包对象子节点,或者包对象子节点的分支结构;将包对象子节点或包对象子节点的分支结构,作为子对象对应的分支结构。
在一个实施例中,上述图10中的图生成单元32具体用于:
若序列化内存对象为源码类型对象,则生成序列化内存对象对应的类对象节点,并将类对象节点挂载至包结构图的根节点上;对序列化内存对象对应的功能函数进行解析,生成操作节点;将操作节点挂载至类对象节点上。
在一个实施例中,上述文件生成模块40具体可以用于:
根据包结构图中节点的调用频次,对包结构图中节点的挂载位置进行调整;对调整后的包结构图进行格式转换,得到源码文件对应的标准格式文件。
上述文件生成装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图12所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储源码文件等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种文件生成方法。
本领域技术人员可以理解,图12中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
获取待转换的源码文件;其中,源码文件基于面向过程的编程语言编写得到;
对源码文件进行解析,得到用于描述源码文件的序列化语言文件;
根据序列化语言文件,生成基于通用建模语言编写的包结构图;
对包结构图进行格式转换,得到源码文件对应的标准格式文件;其中,标准格式文件为可扩展标记语言元数据交换XMI文件。
在一个实施例中,处理器执行计算机程序对源码文件进行解析,得到用于描述源码文件的序列化语言文件的逻辑时,还实现以下步骤:
对源码文件进行解析,得到源码文件的目录结构;
根据源码文件,构建抽象语法树;
从抽象语法树中提取函数定义对象,并将函数定义对象添加至文件函数定义映射表中;
从抽象语法树中提取函数调用关系对象,并将函数调用关系对象添加至文件函数调用关系映射表中;
根据目标结构、文件函数定义映射表和文件函数调用关系映射表,构建用于描述源码文件的序列化语言文件。
在一个实施例中,处理器执行计算机程序根据序列化语言文件,生成基于通用建模语言编写的包结构图的逻辑时,还实现以下步骤:
对序列化语言文件中的描述内容进行解析,得到XMI格式所支持的序列化内存对象;
对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图。
在一个实施例中,处理器执行计算机程序对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图的逻辑时,还实现以下步骤:
若序列化内存对象为包类型对象,则生成序列化内存对象对应的包对象节点,并将包对象节点挂载至包结构图的根节点上;
确定序列化内存对象是否存在子对象;
若是,则生成子对象对应的分支结构,并将分支结构挂载至包对象节点上。
在一个实施例中,处理器执行计算机程序生成子对象对应的分支结构的逻辑时,还实现以下步骤:
若子对象为源码类型对象,则生成子对象对应的类对象子节点;
对子对象对应的功能函数进行解析,生成操作子节点;
将操作子节点挂载至类对象子节点上,以得到子对象对应的分支结构。
在一个实施例中,处理器执行计算机程序生成子对象对应的分支结构的逻辑时,还实现以下步骤:
若子对象为包类型对象,则生成子对象对应的包对象子节点,或者包对象子节点的分支结构;
将包对象子节点或包对象子节点的分支结构,作为子对象对应的分支结构。
在一个实施例中,处理器执行计算机程序对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图的逻辑时,还实现以下步骤:
若序列化内存对象为源码类型对象,则生成序列化内存对象对应的类对象节点,并将类对象节点挂载至包结构图的根节点上;
对序列化内存对象对应的功能函数进行解析,生成操作节点;
将操作节点挂载至类对象节点上。
在一个实施例中,处理器执行计算机程序对包结构图进行格式转换,得到源码文件对应的标准格式文件的逻辑时,还实现以下步骤:
根据包结构图中节点的调用频次,对包结构图中节点的挂载位置进行调整;
对调整后的包结构图进行格式转换,得到源码文件对应的标准格式文件。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取待转换的源码文件;其中,源码文件基于面向过程的编程语言编写得到;
对源码文件进行解析,得到用于描述源码文件的序列化语言文件;
根据序列化语言文件,生成基于通用建模语言编写的包结构图;
对包结构图进行格式转换,得到源码文件对应的标准格式文件;其中,标准格式文件为可扩展标记语言元数据交换XMI文件。
在一个实施例中,计算机程序对源码文件进行解析,得到用于描述源码文件的序列化语言文件被处理器执行时还实现以下步骤:
对源码文件进行解析,得到源码文件的目录结构;
根据源码文件,构建抽象语法树;
从抽象语法树中提取函数定义对象,并将函数定义对象添加至文件函数定义映射表中;
从抽象语法树中提取函数调用关系对象,并将函数调用关系对象添加至文件函数调用关系映射表中;
根据目标结构、文件函数定义映射表和文件函数调用关系映射表,构建用于描述源码文件的序列化语言文件。
在一个实施例中,计算机程序根据序列化语言文件,生成基于通用建模语言编写的包结构图被处理器执行时还实现以下步骤:
对序列化语言文件中的描述内容进行解析,得到XMI格式所支持的序列化内存对象;
对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图。
在一个实施例中,计算机程序对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图被处理器执行时还实现以下步骤:
若序列化内存对象为包类型对象,则生成序列化内存对象对应的包对象节点,并将包对象节点挂载至包结构图的根节点上;
确定序列化内存对象是否存在子对象;
若是,则生成子对象对应的分支结构,并将分支结构挂载至包对象节点上。
在一个实施例中,计算机程序生成子对象对应的分支结构被处理器执行时还实现以下步骤:
若子对象为源码类型对象,则生成子对象对应的类对象子节点;
对子对象对应的功能函数进行解析,生成操作子节点;
将操作子节点挂载至类对象子节点上,以得到子对象对应的分支结构。
在一个实施例中,计算机程序生成子对象对应的分支结构被处理器执行时还实现以下步骤:
若子对象为包类型对象,则生成子对象对应的包对象子节点,或者包对象子节点的分支结构;
将包对象子节点或包对象子节点的分支结构,作为子对象对应的分支结构。
在一个实施例中,计算机程序对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图被处理器执行时还实现以下步骤:
若序列化内存对象为源码类型对象,则生成序列化内存对象对应的类对象节点,并将类对象节点挂载至包结构图的根节点上;
对序列化内存对象对应的功能函数进行解析,生成操作节点;
将操作节点挂载至类对象节点上。
在一个实施例中,计算机程序对包结构图进行格式转换,得到源码文件对应的标准格式文件被处理器执行时还实现以下步骤:
根据包结构图中节点的调用频次,对包结构图中节点的挂载位置进行调整;
对调整后的包结构图进行格式转换,得到源码文件对应的标准格式文件。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取待转换的源码文件;其中,源码文件基于面向过程的编程语言编写得到;
对源码文件进行解析,得到用于描述源码文件的序列化语言文件;
根据序列化语言文件,生成基于通用建模语言编写的包结构图;
对包结构图进行格式转换,得到源码文件对应的标准格式文件;其中,标准格式文件为可扩展标记语言元数据交换XMI文件。
在一个实施例中,计算机程序对源码文件进行解析,得到用于描述源码文件的序列化语言文件被处理器执行时还实现以下步骤:
对源码文件进行解析,得到源码文件的目录结构;
根据源码文件,构建抽象语法树;
从抽象语法树中提取函数定义对象,并将函数定义对象添加至文件函数定义映射表中;
从抽象语法树中提取函数调用关系对象,并将函数调用关系对象添加至文件函数调用关系映射表中;
根据目标结构、文件函数定义映射表和文件函数调用关系映射表,构建用于描述源码文件的序列化语言文件。
在一个实施例中,计算机程序根据序列化语言文件,生成基于通用建模语言编写的包结构图被处理器执行时还实现以下步骤:
对序列化语言文件中的描述内容进行解析,得到XMI格式所支持的序列化内存对象;
对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图。
在一个实施例中,计算机程序对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图被处理器执行时还实现以下步骤:
若序列化内存对象为包类型对象,则生成序列化内存对象对应的包对象节点,并将包对象节点挂载至包结构图的根节点上;
确定序列化内存对象是否存在子对象;
若是,则生成子对象对应的分支结构,并将分支结构挂载至包对象节点上。
在一个实施例中,计算机程序生成子对象对应的分支结构被处理器执行时还实现以下步骤:
若子对象为源码类型对象,则生成子对象对应的类对象子节点;
对子对象对应的功能函数进行解析,生成操作子节点;
将操作子节点挂载至类对象子节点上,以得到子对象对应的分支结构。
在一个实施例中,计算机程序生成子对象对应的分支结构被处理器执行时还实现以下步骤:
若子对象为包类型对象,则生成子对象对应的包对象子节点,或者包对象子节点的分支结构;
将包对象子节点或包对象子节点的分支结构,作为子对象对应的分支结构。
在一个实施例中,计算机程序对序列化内存对象进行解析,生成基于通用建模语言编写的包结构图被处理器执行时还实现以下步骤:
若序列化内存对象为源码类型对象,则生成序列化内存对象对应的类对象节点,并将类对象节点挂载至包结构图的根节点上;
对序列化内存对象对应的功能函数进行解析,生成操作节点;
将操作节点挂载至类对象节点上。
在一个实施例中,计算机程序对包结构图进行格式转换,得到源码文件对应的标准格式文件被处理器执行时还实现以下步骤:
根据包结构图中节点的调用频次,对包结构图中节点的挂载位置进行调整;
对调整后的包结构图进行格式转换,得到源码文件对应的标准格式文件。
需要说明的是,本申请所涉及的数据(包括但不限于源码文件数据等),均为经用户授权或者经过各方充分授权的信息和数据。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (12)

1.一种文件生成方法,其特征在于,所述方法包括:
获取待转换的源码文件;其中,所述源码文件基于面向过程的编程语言编写得到;
对所述源码文件进行解析,得到用于描述所述源码文件的序列化语言文件;
根据所述序列化语言文件,生成基于通用建模语言编写的包结构图;
对所述包结构图进行格式转换,得到所述源码文件对应的标准格式文件;其中,所述标准格式文件为可扩展标记语言元数据交换XMI文件。
2.根据权利要求1所述的方法,其特征在于,所述对所述源码文件进行解析,得到用于描述所述源码文件的序列化语言文件,包括:
对所述源码文件进行解析,得到所述源码文件的目录结构;
根据所述源码文件,构建抽象语法树;
从所述抽象语法树中提取函数定义对象,并将所述函数定义对象添加至文件函数定义映射表中;
从所述抽象语法树中提取函数调用关系对象,并将所述函数调用关系对象添加至文件函数调用关系映射表中;
根据所述目标结构、所述文件函数定义映射表和所述文件函数调用关系映射表,构建用于描述所述源码文件的序列化语言文件。
3.根据权利要求1所述的方法,其特征在于,所述根据所述序列化语言文件,生成基于通用建模语言编写的包结构图,包括:
对所述序列化语言文件中的描述内容进行解析,得到XMI格式所支持的序列化内存对象;
对所述序列化内存对象进行解析,生成基于通用建模语言编写的包结构图。
4.根据权利要求3所述的方法,其特征在于,所述对所述序列化内存对象进行解析,生成基于通用建模语言编写的包结构图,包括:
若所述序列化内存对象为包类型对象,则生成所述序列化内存对象对应的包对象节点,并将所述包对象节点挂载至所述包结构图的根节点上;
确定所述序列化内存对象是否存在子对象;
若是,则生成所述子对象对应的分支结构,并将所述分支结构挂载至所述包对象节点上。
5.根据权利要求4所述的方法,其特征在于,所述生成所述子对象对应的分支结构,包括:
若所述子对象为源码类型对象,则生成所述子对象对应的类对象子节点;
对所述子对象对应的功能函数进行解析,生成操作子节点;
将所述操作子节点挂载至所述类对象子节点上,以得到所述子对象对应的分支结构。
6.根据权利要求4所述的方法,其特征在于,所述生成所述子对象对应的分支结构,包括:
若所述子对象为包类型对象,则生成所述子对象对应的包对象子节点,或者所述包对象子节点的分支结构;
将所述包对象子节点或所述包对象子节点的分支结构,作为所述子对象对应的分支结构。
7.根据权利要求3所述的方法,其特征在于,所述对所述序列化内存对象进行解析,生成基于通用建模语言编写的包结构图,包括:
若所述序列化内存对象为源码类型对象,则生成所述序列化内存对象对应的类对象节点,并将所述类对象节点挂载至所述包结构图的根节点上;
对所述序列化内存对象对应的功能函数进行解析,生成操作节点;
将所述操作节点挂载至所述类对象节点上。
8.根据权利要求1所述的方法,其特征在于,所述对所述包结构图进行格式转换,得到所述源码文件对应的标准格式文件,包括:
根据所述包结构图中节点的调用频次,对所述包结构图中节点的挂载位置进行调整;
对调整后的包结构图进行格式转换,得到所述源码文件对应的标准格式文件。
9.一种文件生成装置,其特征在于,所述装置包括:
文件获取模块,用于获取待转换的源码文件;其中,所述源码文件基于面向过程的编程语言编写得到;
文件解析模块,用于对所述源码文件进行解析,得到用于描述所述源码文件的序列化语言文件;
图生成模块,用于根据所述序列化语言文件,生成基于通用建模语言编写的包结构图;
文件生成模块,用于对所述包结构图进行格式转换,得到所述源码文件对应的标准格式文件;其中,所述标准格式文件为可扩展标记语言元数据交换XMI文件。
10.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至8中任一项所述的方法的步骤。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8中任一项所述的方法的步骤。
12.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至8中任一项所述的方法的步骤。
CN202211499744.3A 2022-11-28 2022-11-28 文件生成方法、装置、设备、存储介质和计算机程序产品 Pending CN118092921A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211499744.3A CN118092921A (zh) 2022-11-28 2022-11-28 文件生成方法、装置、设备、存储介质和计算机程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211499744.3A CN118092921A (zh) 2022-11-28 2022-11-28 文件生成方法、装置、设备、存储介质和计算机程序产品

Publications (1)

Publication Number Publication Date
CN118092921A true CN118092921A (zh) 2024-05-28

Family

ID=91153628

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211499744.3A Pending CN118092921A (zh) 2022-11-28 2022-11-28 文件生成方法、装置、设备、存储介质和计算机程序产品

Country Status (1)

Country Link
CN (1) CN118092921A (zh)

Similar Documents

Publication Publication Date Title
US11797558B2 (en) Generating data transformation workflows
US11475034B2 (en) Schemaless to relational representation conversion
US8732178B2 (en) Using views of subsets of nodes of a schema to generate data transformation jobs to transform input files in first data formats to output files in second data formats
US20060235838A1 (en) System and method for managing complex relationships over distributed heterogeneous data sources
US20170068891A1 (en) System for rapid ingestion, semantic modeling and semantic querying over computer clusters
CN106951231B (zh) 一种计算机软件开发方法及装置
EP3470992B1 (en) Efficient storage and utilization of a hierarchical data set
Bockermann et al. Processing data streams with the rapidminer streams-plugin
CN114168149A (zh) 一种数据转换方法及装置
CN105867886B (zh) 一种写表格的方法及装置
US11449461B2 (en) Metadata-driven distributed dynamic reader and writer
CN117033348A (zh) Sql转换方法、装置、计算机设备和存储介质
CN118092921A (zh) 文件生成方法、装置、设备、存储介质和计算机程序产品
CN112579705B (zh) 元数据采集方法、装置、计算机设备和存储介质
Krijnen et al. Efficient binary serialization of IFC models using HDF5
CN116204554B (zh) 数据处理方法、系统、电子设备和存储介质
CN117573199B (zh) 一种模型差异对比分析方法、装置、设备及介质
CN115774767B (zh) 一种地理信息元数据处理方法及装置
US20240037146A1 (en) Efficient Storage and Query of Schemaless Data
CN118193532A (zh) 数据处理方法、装置、计算机设备、存储介质和产品
CN118200407A (zh) 报文代码的生成方法、装置、计算机设备和可读存储介质
CN117407002A (zh) 代码转换方法、装置、计算机设备和存储介质
CN116737216A (zh) 技术资源的管理方法、装置、设备、存储介质和程序产品
CN117057340A (zh) 报表解析方法、装置、计算机设备和存储介质
CN117370339A (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