CN115016793A - 基于语法树的代码生成方法和装置、电子设备、存储介质 - Google Patents
基于语法树的代码生成方法和装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN115016793A CN115016793A CN202210441404.9A CN202210441404A CN115016793A CN 115016793 A CN115016793 A CN 115016793A CN 202210441404 A CN202210441404 A CN 202210441404A CN 115016793 A CN115016793 A CN 115016793A
- Authority
- CN
- China
- Prior art keywords
- target
- code
- node
- syntax tree
- information
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
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)
Abstract
本申请实施例提供了基于语法树的代码生成方法和装置、电子设备、存储介质,属于计算机领域。该基于语法树的代码生成方法包括:获取待转换的源代码包;通过语法解析器对源代码包进行语法解析处理,得到解析内容;根据解析内容构建目标语法树;遍历目标语法树,获取每一子节点处的子代码信息和每一父节点处的上下文信息;根据子代码信息和上下文信息进行拼接处理,得到中间代码;根据获取到的代码转换指令,调用目标语言生成器;将中间代码输入至目标语言生成器进行语言转换处理,在根节点处输出目标代码。本实施例可以自动对数据库源代码包进行语言转换,且提高转换的准确率和效率。
Description
技术领域
本发明涉及计算机领域,尤其是涉及基于语法树的代码生成方法和装置、电子设备、存储介质。
背景技术
目前,对大多数的数据存储方案中的代码进行转换时,多采用人工翻译的手段对数据库中的代码语言进行转换,或者是采用机器进行字符串匹配的方式自动转换。人工方式往往费时费力,机器翻译方法适配度低、转换精度不高且仍需人工介入。因此,如何提供一种可以高效且准确的代码生成方法成为了一个亟待解决的问题。
发明内容
本申请实施例的主要目的在于提出基于语法树的代码生成方法和装置、电子设备及存储介质本申请,能够自动对数据库源代码包进行语言转换,且提高转换的准确率和效率。
为实现上述目的,本申请实施例的第一方面提出了基于语法树的代码生成方法,所述方法包括:
获取待转换的源代码包;
通过语法解析器对所述源代码包进行语法解析处理,得到解析内容;
根据所述解析内容构建目标语法树;其中,所述目标语法树包括根节点、至少一个父节点、至少一个子节点,所述根节点连接所述至少一个父节点,每一所述父节点连接至少一个所述子节点、且每一所述子节点连接其中一个所述父节点;
遍历所述目标语法树,获取每一所述子节点处的子代码信息和每一所述父节点处的上下文信息;
根据所述子代码信息和所述上下文信息进行拼接处理,得到中间代码;
根据获取到的代码转换指令,调用目标语言生成器;
将所述中间代码输入至所述目标语言生成器进行语言转换处理,通过所述根节点输出目标代码。
在一些实施例中,所述语法解析器包括第一分析器和第二分析器,所述通过语法解析器对所述源代码包进行语法解析处理,得到解析内容,包括:
获取所述第一分析器和所述第二分析器;
将所述源代码包输入至所述第一分析器中,通过所述第一分析器对所述源代码包进行词法解析,得到第一识别信息;
将所述源代码包输入至所述第二分析器中,通过所述第二分析器对所述源代码包进行语法解析,得到第二识别信息;
对所述第一识别信息和所述第二识别信息进行拼接处理,得到所述解析内容。
在一些实施例中,所述根据所述子代码信息和所述上下文信息进行拼接处理,得到中间代码,包括:
从所述子节点获取第一目标节点;其中,所述第一目标节点为当前遍历的子节点;
根据所述第一目标节点筛选所述子代码信息,得到候选代码片段;
根据所述目标语法树和所述第一目标节点筛选所述上下文信息,得到候选上下文片段;
根据所述候选上下文片段对所述候选代码片段进行拼接处理,得到所述中间代码。
在一些实施例中,所述根据所述目标语法树和所述第一目标节点筛选所述上下文信息,得到候选上下文片段,包括:
从所述目标语法树获取与所述第一目标节点连接的父节点,得到第二目标节点;
根据所述第二目标节点对所述上下文信息进行筛选处理,得到所述候选上下文片段。
在一些实施例中,所述根据所述候选上下文片段对所述候选代码片段进行拼接处理,得到所述中间代码,包括:
获取预设的令牌信息;
根据所述令牌信息从所述第二目标节点提取所述第一目标节点的所述候选代码片段;
根据所述候选上下文片段,对所述第一目标节点的拼接逻辑进行识别,得到目标拼接规则;
根据所述目标拼接规则对所述候选代码片段进行拼接处理,得到所述中间代码。
在一些实施例中,所述根据获取到的代码转换指令,调用目标语言生成器,包括:
获取代码转换指令;
解析所述代码转换指令,得到所述代码转换指令对应的目标转换信息;
对所述目标转换信息与预设的生成器目录信息进行匹配处理,得到目标接口文件;
根据所述目标接口文件对获取到的候选语言生成器进行筛选处理,得到所述目标语言生成器,并调用所述目标语言生成器。
在一些实施例中,所述方法还包括:更新所述候选语言生成器,具体包括:
获取预设的生成器更新指令;
根据所述生成器更新指令调用所述候选语言生成器的待更新目录信息和待更新接口文件;
根据所述待更新目录信息和所述待更新接口文件对所述生成器目录信息进行更新。
为实现上述目的,本申请实施例的第二方面提出了基于语法树的代码生成装置,所述方法包括:
源代码获取模块,用于获取待转换的源代码包;
语法解析模块,用于通过语法解析器对所述源代码包进行语法解析处理,得到解析内容;
语法树构建模块,用于根据所述解析内容构建目标语法树;其中,所述目标语法树包括根节点、至少一个父节点、至少一个子节点,所述根节点连接所述至少一个父节点,每一所述父节点连接至少一个所述子节点、且每一所述子节点连接其中一个所述父节点;
语法树遍历模块,用于遍历所述目标语法树,获取每一所述子节点处的子代码信息和每一所述父节点处的上下文信息;
代码拼接模块,用于根据所述子代码信息和所述上下文信息进行拼接处理,得到中间代码;
生成器调用模块,用于据获取到的代码转换指令,调用目标语言生成器;
代码输出模块,用于将所述中间代码输入至所述目标语言生成器进行语言转换处理,通过所述根节点输出目标代码。
为实现上述目的,本申请实施例的第三方面提出了一种电子设备,所述电子设备包括存储器、处理器、存储在所述存储器上并可在所述处理器上运行的程序以及用于实现所述处理器和所述存储器之间的连接通信的数据总线,所述程序被所述处理器执行时实现上述第一方面所述的方法。
为实现上述目的,本申请实施例的第四方面提出了一种存储介质,所述存储介质为计算机可读存储介质,用于计算机可读存储,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现上述第一方面所述的方法。
本申请所提供的基于语法树的代码生成方法和装置、电子设备、存储介质,旨在通过获取待转换的源代码包;并通过语法解析器对所述源代码包进行语法解析处理,得到包含源代码包中语法关系以及词法关系的解析内容;从而根据所述解析内容构建目标语法树;其中,所述目标语法树包括根节点、至少一个父节点、至少一个子节点,所述根节点连接所述至少一个父节点,每一所述父节点连接至少一个所述子节点、且每一所述子节点连接其中一个所述父节点;通过遍历所述目标语法树,本申请可以获取每一所述子节点处的子代码信息和每一所述父节点处的上下文信息,并根据所述子代码信息和所述上下文信息进行拼接处理,得到可以被语言生成器识别的中间代码;通过根据获取到的代码转换指令,调用目标语言生成器,从而将所述中间代码输入至所述目标语言生成器进行语言转换处理,实现在所述根节点输出目标代码。本申请通过对源代码包进行分析,提供了包含源代码包中全部词法信息和语法信息的目标语法树,并依托于目标语法树,获取每一父节点处的上下文信息,从而根据上下文信息对每一子节点处的目标代码信息进行拼接,生成目标语言生成器可以识别的中间代码,并通过目标语言生成器对中间代码进行转换,生成满足代码转换指令的目标代码。通过这一方法,本申请可以自动且高效的源代码包内的代码进行分析,并根据分析结果和用户需求形成对应的目标代码,从而准确且高效的生成目标代码。
附图说明
图1是本申请实施例提供的基于语法树的代码生成方法的流程图;
图2是图1中S200的流程图。
图3是图1中S500的流程图。
图4是图3中S530的另一流程图。
图5是图3中S540的另一流程图。
图6是本申请实施例提供的语法树的示意图。
图7是图1中S600的流程图。
图8是本申请实施例提供的基于语法树的代码生成方法的另一流程图。
图9是本申请实施例提供的基于语法树的代码生成装置的功能模块图。
图10是本申请实施例提供电子设备的功能模块图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
需要说明的是,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
首先,对本申请中涉及的若干名词进行解析:
词法分析器:词法分析器又称为Scanner,Lexical analyser和Tokenizer。程序设计语言通常由关键字和严格定义的语法结构组成。编译的最终目的是将程序设计语言的高层指令翻译成物理机器或虚拟机可以执行的指令。词法分析器的工作是分析量化那些本来毫无意义的字符流,将他们翻译成离散的字符组(也就是一个一个的Token),包括关键字,标识符,符号(symbols)和操作符供语法分析器使用。
语法分析器:编译器又称为Syntactical analyser。在分析字符流的时候,Lexer不关心所生成的单个Token的语法意义及其与上下文之间的关系,而这就是Parser的工作。语法分析器将收到的Tokens组织起来,并转换成为目标语言语法定义所允许的序列。
树分析器:树分析器可以用于对语法分析生成的抽象语法树进行遍历,并能执行一些相关的操作。
ANTLR:ANTLR是指可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器。ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的框架。
ANTLR将词法分析器、语法分析器、树分析器结合起来,通过内置的词法分析器对字符流进行分析量化;通过语法分析器将接收到的Tokens按照预定的组合逻辑进行组合,以生成符合目标语言语法的序列;通过ANTLR将词法分析器和语法分析器的解析结果进行编译,生成符合预设形式的语法树文件;并通过树分析器对语法树文件进行遍历,以实现对语法树文件中的数据文件进行进一步的操作。
结构化查询语言(Structured Query Language,SQL):是访问和处理数据库的标准的计算机语言,用于管理关系数据库管理系统,包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制等。即使对于不同底层结构的数据库系统,也可以使用相同的结构化查询语言作为数据输入与管理的接口。
过程化SQL语言(Procedural Language/SQL):PLSQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PLSQL把数据操作和查询语句组织在PLSQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PLSQL允许混合SQL声明和过程结构,因此可以在将声明发送到甲骨文系统去执行之前使用PLSQL区段和副程序来组合SQL声明,没有P/SQL,甲骨文需要就每次处理SQL声明,在网络环境中,这将影响交通流量,而且增加响应时间。PLSQL区段只被编译一次并且以可运行的形式储存,以降低响应时间。
目标语言生成器:本申请实施例中提供的目标语言生成器是将需要转换的目标语言抽象成一个生成器接口类;通过调用、继承并实现目标语言对应抽象生成的生成器接口类,本申请实施例就可以将当前的代码转换才能目标语言对应目标代码。
抽象语法树(Abstract Syntax Tree,AST):是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构。抽象语法树中并不会出现源代码中的每一具体细节,而是通过树上的每个节点表示源代码中的一种结构。
目前,对大多数的数据存储方案中的代码进行转换时,多采用人工翻译的手段对数据库中的代码语言进行转换,或者是采用机器进行字符串匹配的方式自动转换。人工方式往往费时费力,机器翻译方法适配度低、转换精度不高且仍需人工介入。因此,如何提供一种可以高效且准确的代码生成方法成为了一个亟待解决的问题。
基于此,本申请实施例提出了基于语法树的代码生成方法和装置、电子设备、存储介质,能够自动对数据库源代码包进行语言转换,且提高转换的准确率和效率。
本申请实施例提供的基于语法树的代码生成方法和装置、电子设备、存储介质,具体通过如下实施例进行说明,首先描述本申请实施例中的基于语法树的代码生成方法。
本申请实施例提供的基于语法树的代码生成方法,涉及软件开发与测试技术领域。本申请实施例提供的基于语法树的代码生成方法可应用于终端中,也可应用于服务器端中,还可以是运行于终端或服务器端中的软件。在一些实施例中,终端可以是智能手机、平板电脑、笔记本电脑、台式计算机或者智能手表等;服务器可以是独立的服务器,也可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器;软件可以是实现基于语法树的代码生成方法的应用等,但并不局限于以上形式。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的历程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
下面结合附图对本申请的实施例做进一步阐述。
图1是本申请实施例提供的基于语法树的代码生成方法的一个可选的流程图,图1中的方法可以包括但不限于包括步骤S100至步骤S700。
步骤S100,获取待转换的源代码包;
步骤S200,通过语法解析器对源代码包进行语法解析处理,得到解析内容;
步骤S300,根据解析内容构建目标语法树;其中,目标语法树包括根节点、至少一个父节点、至少一个子节点,根节点连接至少一个父节点,每一父节点连接至少一个子节点、且每一子节点连接其中一个父节点;
步骤S400,遍历目标语法树,获取每一子节点处的子代码信息和每一父节点处的上下文信息;
步骤S500,根据子代码信息和上下文信息进行拼接处理,得到中间代码;
步骤S600,根据获取到的代码转换指令,调用目标语言生成器;
步骤S700,将中间代码输入至目标语言生成器进行语言转换处理,通过根节点输出目标代码。
本申请实施例所示意的步骤S100至步骤S700,首先可以获取数据库中待转换换的源代码包,并通过语法解析器对源代码包进行语法解析处理,得到包含源代码包中全部代码的详细代码信息的解析内容;通过对获取到的解析内容按照预定的生成方法构建目标语法树;其中,目标语法树包括根节点、至少一个父节点和至少一个子节点,且根节点连接至少一个父节点,每一父节点连接至少以一个子节点、且每一子节点连接其中一个父节点;从而提供包含源代码包中各部分代码之间逻辑关系与连接顺序的目标语法树,进而根据目标语法树对代码进行重建与转换生成;通过遍历目标语法树,本申请可以重新提取源代码包中每一子节点处对应的子代码信息,以及在目标语法树上与子节点相连接的父节点处对应的上下文信息;并根据父节点处的上下文信息实现对子节点处的子代码信息进行拼接,以按照预设的规则重建源代码包中的代码信息,得到中间代码;通过获取代码转换指令,本申请可以调用目标语言生成器,并通过将中间代码输入至目标语言生成器,实现对中间代码的转换,以得到满足代码转换指令所需的目标代码。
在一些实施例的步骤S400中,本申请采用深度优先的遍历方式对目标语法树进行遍历,通过深度遍历的方式,本实施例优先遍历子节点,对全部子节点的子代码信息遍历结束后,再对与子节点相连接的父节点进行遍历。通过深度优先的遍历方式,本实施例准确获取每一子节点处的子代码信息和每一父节点处的上下文信息,从而根据子节点信息和上下文信息对源代码包中的代码进行拼接,进而对拼接得到的中间代码进行翻译以输出目标代码。
在一些具体的实施例中,本申请实施例的源代码包为PLSQL语法文件。通过ANTLR,本申请可以将PLSQL语法文件进行分析处理,生成源代码包中PLSQL语法文件对应的目标语法树。本申请实施例的目标语法树包括一个根节点,至少一个父节点与至少一个子节点,其中根节点连接至少一个父节点,每一个父节点连接至少一个子节点,且每一子节点连接其中一个父节点。在一些其它的实施例中,每一父节点均连接根节点,每一子节点存储有代码信息,每一父节点存储有上下文信息,并且本申请的实施例可以通过目标语法树查询与每一父节点所连接的对应子节点,以提取对应子节点的代码信息;本申请实施例还可以通过根节点获取每一父节点处的中间代码,并根据代码转换指令调用的对应目标语言生成器对中间代码进行转换,得到需要生成的目标代码。本申请实施例通过构建源代码包对应的目标语法树,实现了对源代码包内的PLSQL语法文件的分类,并通过对子节点处对子代码信息和父节点处的上下文信息进行拼接,并根据代码转换指令调用的目标语言生成器对拼接得到的中间代码进行转换,提供了一种自动化且高效的基于语法树的代码生成方法。
请参阅图2,在一些实施例中,语法解析器包括第一分析器和第二分析器,步骤S200可以包括但不限于包括步骤S210至步骤S240:
步骤S210,获取第一分析器和第二分析器;
步骤S220,将源代码包输入至第一分析器中,通过第一分析器对源代码包进行词法解析,得到第一识别信息;
步骤S230,将源代码包输入至第二分析器中,通过第二分析器对源代码包进行语法解析,得到第二识别信息;
步骤S240,对第一识别信息和第二识别信息进行拼接处理,得到解析内容。
在一些实施例的步骤S210中,本申请通过调用ANTLR分析器得到第一分析器和第二分析器。其中,第一分析器可以是词法分析器,用于解析源代码包中的词法信息;第二分析器可以是语法分析器,用于解析源代码包中的语法信息。
在一些实施例的步骤S220和步骤S230中,本申请通过第一分析器对源代码包进行词法分析以获取第一识别信息,并通过第二分析器对源代码包进行语法分析得到第二识别信息。
在一些实施例的步骤S240中,本申请调用ANTLR语法分析器中的树分析器对经过遍历后,通过第一分析器和第二分析器得到的第一识别信息和第二识别信息做拼接处理,得到包含源代码包中全部词法信息和与发信息的第一识别信息和第二识别信息。
请参阅图3,在一些实施例中,步骤S500具体包括但不限于步骤S510至步骤S540:
步骤S510,从子节点获取第一目标节点;其中,第一目标节点为当前遍历的子节点;
步骤S520,根据第一目标节点筛选子代码信息,得到候选代码片段;
步骤S530,根据目标语法树和第一目标节点筛选上下文信息,得到候选上下文片段;
步骤S540,根据候选上下文片段对候选代码片段进行拼接处理,得到中间代码。
在一些实施例的步骤S510中,本申请根据采用的深度优先的遍历方式,优先遍历全部子节点,并在子节点中选取正在遍历的第一目标子节点,从而根据第一目标子节点对子代码信息进行获取与筛选。
在一些实施例的步骤S520中,本申请可以获取到已经遍历得到的子代码信息,并根据第一目标节点筛选出对应第一目标节点处的代码,从而在已经遍历得到的子代码信息中筛选出第一目标节点处的候选代码片段。
在一些实施例的步骤S530中,本申请在对全部子节点进行遍历之后,根据第一目标子节点和目标语法树查询得到与第一目标子节点连接的第一目标父节点,从而根据第一目标父节点锁定第二目标节点。其中,依据深度遍历的遍历方式,对全部子节点遍历结束后,第二目标节点所对应的父节点为正在遍历的父节点。本申请还可以通过第二目标节点对应的父节点对已经遍历获取到的上下文信息进行筛选,以得到第二目标节点处对应的候选上下文片段。
在一些实施例的步骤S540中,本申请根据预设的候选上下文片段得到对应第二目标节点处对应的拼装逻辑,从而根据候选上下文片段对候选代码片段进行拼接处理,以得到中间代码。其中,根据候选上下文片段得到的拼装逻辑可以由用户选择,生成的中间代码用于目标语言生成器,以实现对源代码包的语言转换。
请参阅图4,在一些实施例中,步骤S530具体包括但不限于步骤S531至步骤S532:
步骤S531,从目标语法树获取与第一目标节点连接的父节点,得到第二目标节点;
步骤S532,根据第二目标节点对上下文信息进行筛选处理,得到候选上下文片段。
在一些实施例的步骤S531中,本申请对生成的目标语法树进行查询,根据第一目标节点的连接关系可以得到与第一目标节点相连接的父节点,并根据得到的父节点确定第二目标节点。
在一些实施例的步骤S532中,本申请可以对已经遍历得到的上下文信息进行获取,并根据第二目标节点对上下文信息进行筛选,得到第二目标节点处的候选上下文片段。可以理解的是,第二目标节点处的候选上下文片段包含着第二目标节点对应的父节点在目标语法树中的语法关系信息,从而通过包含语法关系的候选上下文片段对候选代码片段,按照对应的语法关系进行代码拼接。
在一些其他的实施例中,第二目标节点对应连接的第一目标节点并不唯一。即,第二目标节点对应的父节点可能连接多个第一目标节点对应的子节点。当第二目标节点对应的父节点连接多个第一目标节点对应的子节点时,本申请可以分别获取每一与第二目标节点对应的父节点连接的子节点对应的目标上下文信息,并将每一与第二目标节点对应的父节点连接的子节点的目标上下文信息进行整合,得到候选上下文片段。
请参阅图5,在一些实施例中,步骤S540具体包括但不限于步骤S541至步骤S544:
步骤S541,获取预设的令牌信息;
步骤S542,根据令牌信息从第二目标节点提取第一目标节点的候选代码片段;
步骤S543,根据候选上下文片段,对第一目标节点的拼接逻辑进行识别,得到目标拼接规则;
步骤S544,根据目标拼接规则对候选代码片段进行拼接处理,得到中间代码。
在一些实施例的步骤S541中,为了保证代码装换过程中的安全性与可控制性,本申请提供了预设的令牌信息。本方法可以通过令牌信息通过第二目标节点获取第一目标节点处的候选代码片段,以保证获取到的候选代码片段为与第二目标节点所对应的第一目标节点处生成的代码,从而使代码的拼接过程更加准确。
在一些实施例的步骤S542至步骤S543中,本申请根据令牌信息提取经过步骤S520筛选完成得到的,第一目标节点处存储的候选代码片段。本申请还通过候选上下文片段,得到在第二目标节点处对候选代码片段进行拼接的拼接逻辑,生成对应第二目标节点处的目标拼接规则。
在一些实施例的步骤S544中,本申请可以通过目标拼接规则对第一节点处的候选代码片段进行拼接处理,得到符合拼接逻辑的中间代码。
在一些具体的实施例中,在步骤S543和步骤S544中,本方案可以对各个第一目标节点的候选代码片段之间的拼接逻辑进行识别,其中各个第一目标节点均为在目标语法树中与同一第二目标节点连接的子节点。具体地,本申请首先获取在目标语法树中第一目标节点连接的第二目标节点处的上下文信息,并对上下文信息进行解析,如得到package、function、sql等上下文信息,形成第二目标节点的候选上下文片段。候选上下文片段中包括与在目标语法树中第二目标节点相连接的各个第一目标节点处对应的候选代码片段之间的连接关系,例如各个第一目标节点处包含根据plsql token形成的候选代码片段,第二目标节点处包含各个第一目标节点对应的候选代码片段之间的逻辑关系,例如:if、and、else、=、!=等。通过第二节点处包含的对应候选代码片段之间的逻辑关系,本申请可以将各个候选代码片段拼接为一条符合源代码包中原plsql语句逻辑要求的中间代码,从而实现根据上下文信息对代码的有效拼接。
在一些具体的实施例中,第二目标节点可能对应多个第一目标子节点,本申请通过候选上下文片段可以对多个候选代码片段进行拼接,得到这一第二目标节点对应的父节点下,全部子节点的候选代码片段的拼接结果。在一些其他的实施例中,第二目标节点对应的多个第一目标节点的节点类型可能相同。即,同一个第二目标节点下,多个第一目标节点的对应的候选上下文片段中的目标拼接规则可能存在部分相同。本申请所提供的基于语法树的代码生成方法可以首先对需要拼接的第二目标节点下的每一第一目标节点的节点类型进行判断,当后识别到的第一目标节点的节点类型与先识别到的第一目标节点的节点类型一致时,本申请可以对后识别到的相同节点类型的第一目标节点的候选代码片段采用先识别到的第一目标节点的目标拼接规则,而避免再次执行调用上下文信息,并对上下文信息进行筛选得到候选上下文片段的步骤,进而有效的提高中间代码的生成效率。
请参阅图6,在另一些具体的实施例中,本申请可以根据目标语法树获取第二目标节点处的候选上下文片段,并根据候选上下文片段得到与第二目标节点连接的每一第一目标节点之间对应的候选代码片段之间的逻辑关系,从而实现根据候选上下文片段对候选代码片段的拼接。如图6中,当图中的“and”节点作为根节点时,与根节点and相连接的“==”节点和“!=”节点为两个父节点,当“==”作为第二目标节点时,“r_prem”和“v_flag”作为对应第二目标节点“==”的第一目标节点,并根据第二目标节点“==”对应的对候选代码片段“r_prem”和“v_flag”进行拼装,得到拼接后的结果:r_prem.pol_yr==ConversionFunction.ToNumber(v_flag),该拼接后的结果为中间代码。类似地,当图中的“!=”节点作为第二目标节点时,“v_flag”和“12”作为对应第二目标节点“!=”的第一目标节点,并根据第二目标节点“!=”对应的对候选代码片段“v_flag”和“12”进行拼装,得到拼接后的结果:!12.equals(v_flag),该拼接后的结果为中间代码。在一些实施例中,得到的中间代码可以是数字型数据类型(num),也可以是字符串型数据类型(str),或者是布尔型变量(bool)。还可以是num数据类型、str数据类型、或者bool数据类型的组合。
请参阅图7,在一些实施例中,步骤S600具体包括但不限于步骤S610至步骤S640:
步骤S610,获取代码转换指令;
步骤S620,解析代码转换指令,得到代码转换指令对应的目标转换信息;
步骤S630,对目标转换信息与预设的生成器目录信息进行匹配处理,得到目标接口文件;
步骤S640,根据目标接口文件对获取到的候选语言生成器进行筛选处理,得到目标语言生成器,并调用目标语言生成器。
在本实施例的一些步骤S610至步骤S620中,本申请通过获取并解析代码转换指令得到所需要的目标语言对应的信息对应的目标转换信息。具体的,本申请首先获取代码转换指令,并对代码转换指令进行解析,得到代码转换指令所对应的具体代码种类数据;本申请进一步调用预设的可用语言种类数据表,并根据具体代码种类数据查询可用语言种类数据表中的目标语言,当可用语言种类数据表中存在代码转换指令对应的目标语言时,本申请所提供的实施例可以调用可用语言种类数据表中对应目标语言的目标转换信息,从而提供根据目标转换信息获取对应的语言生成器,进而对中间码进行转换生成目标代码的代码生成方法。
请参阅在本实施例的一些步骤S630至步骤S640中,本申请可以获取预设的生成器目录信息。生成器目录信息用于存储当前全部可用的语言生成器的种类信息。通过目标转换信息,本申请的实施例可以对生成器目录信息进行匹配处理,得到生成器目录信息中对应目标语言的目标语言生成器的目标接口文件,从而根据目标接口文件调用对应的目标语言生成器。通过目标接口文件,本申请对生成器目录信息中对应的每一候选语言生成器进行筛选,得到可以用于转换生成目标语言的目标语言生成器,并调用目标语言生成器,从而实现对中间代码的转换,进而实现生成目标代码。
请参阅图8,在一些实施例中,该基于语法树的代码生成方法还包括:更新候选语言生成器,具体还包括但不限于步骤S810至步骤S830:
步骤S810,获取预设的生成器更新指令;
步骤S820,根据生成器更新指令调用候选语言生成器的待更新目录信息和待更新接口文件;
步骤S830,根据待更新目录信息和待更新接口文件对生成器目录信息进行更新。
在一些实施例的步骤S810中,本申请可以获取预设的生成器更新指令,其中,步骤S810可以在任意时刻执行,当本申请在任意时刻获取到预设的生成器更新指令时,本申请所提供的基于语法树的代码生成方法会根据步骤S810顺序执行步骤S820和步骤S830。
在一些实施例的步骤S820中,本申请可以根据生成器更新指令对所需更新的候选语言生成器的待更新目录信息和待更新接口文件进行调用。其中,待更新目录信息用于查询候选语言生成器、待更新接口文件用于调用候选语言生成器。
在一些实施例的步骤S830中,本申请可以获取待更新目录信息和待更新接口文件,并将待更新目录信息和待更新接口文件更新至生成器目录信息,以使本方法根据目标转换信息与生成器目录信息进行匹配时,可以通过匹配处理得到候选语言生成器,并调用候选语言生成器。
在一些具体的实施例中,本申请在对生成器目录信息进行更新之前,会根据待更新目录信息和待更新接口文件对当前生成器目录信息中的目录信息干和接口文件进行查重,当目录信息中存在待更新目录信息时,或者接口文件中存在待更新接口文件时,本申请所提供的基于语法树的代码生成方法会停止将待更新目录信息和待更新接口文件更新至生成器目录信息,并返回更新异常指令。
在一些其他的实施例中,本申请在对根据生成器更新指令调用候选语言生成器的待更新目录信息和待更新接口文件时,当解析生成器更新指令之后并没有对应的待更新目录信息或者待更新接口文件时,会根据生成器更新指令查询预设的生成器库,以获取所需更新的候选语言生成器的待更新目录信息和待更新接口文件,以继续执行步骤S830。
请参阅图9,本申请实施例还提供一种基于语法树的代码生成装置,可以实现上述基于语法树的代码生成方法,该装置包括:
源代码获取模块100,用于获取待转换的源代码包;
语法解析模块200,用于通过语法解析器对源代码包进行语法解析处理,得到解析内容;
语法树构建模块300,用于根据解析内容构建目标语法树;其中,目标语法树包括根节点、至少一个父节点、至少一个子节点,根节点连接至少一个父节点,每一父节点连接至少一个子节点、且每一子节点连接其中一个父节点;
语法树遍历模块400,用于遍历目标语法树,获取每一子节点处的子代码信息和每一父节点处的上下文信息;
代码拼接模块500,用于根据子代码信息和上下文信息进行拼接处理,得到中间代码;
生成器调用模块600,用于据获取到的代码转换指令,调用目标语言生成器;
代码输出模块700,用于将中间代码输入至目标语言生成器进行语言转换处理,通过根节点输出目标代码。
该基于语法树的代码生成装置的具体实施方式与上述基于语法树的代码生成方法的具体实施例基本相同,在此不再赘述。
请参阅图10,图10示意了另一实施例的电子设备的硬件结构,电子设备包括:
处理器901,可以采用通用的CPU(CentralProcessingUnit,中央处理器)、微处理器、应用专用集成电路(ApplicationSpecificIntegratedCircuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本申请实施例所提供的技术方案;
存储器902,可以采用只读存储器(ReadOnlyMemory,ROM)、静态存储设备、动态存储设备或者随机存取存储器(RandomAccessMemory,RAM)等形式实现。存储器902可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器902中,并由处理器901来调用执行本申请实施例的基于语法树的代码生成方法;
输入/输出接口903,用于实现信息输入及输出;
通信接口904,用于实现本设备与其他设备的通信交互,可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信;
总线905,在设备的各个组件(例如处理器901、存储器902、输入/输出接口903和通信接口904)之间传输信息;
其中处理器901、存储器902、输入/输出接口903和通信接口904通过总线905实现彼此之间在设备内部的通信连接。
本申请实施例还提供了一种存储介质,存储介质为计算机可读存储介质,用于计算机可读存储,存储介质存储有一个或者多个程序,一个或者多个程序可被一个或者多个处理器执行,以实现上述基于语法树的代码生成方法。
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本申请所提供的基于语法树的代码生成方法和装置、电子设备、存储介质,旨在通过获取待转换的源代码包;并通过语法解析器对源代码包进行语法解析处理,得到包含源代码包中语法关系以及词法关系的解析内容;从而根据解析内容构建目标语法树;其中,目标语法树包括根节点、至少一个父节点、至少一个子节点,根节点连接至少一个父节点,每一父节点连接至少一个子节点、且每一子节点连接其中一个父节点;通过遍历目标语法树,本申请可以获取每一子节点处的子代码信息和每一父节点处的上下文信息,并根据子代码信息和上下文信息进行拼接处理,得到可以被语言生成器识别的中间代码;通过根据获取到的代码转换指令,调用目标语言生成器,从而将中间代码输入至目标语言生成器进行语言转换处理,实现在根节点输出目标代码。本申请通过对源代码包进行分析,提供了包含源代码包中全部词法信息和语法信息的目标语法树,并依托于目标语法树,获取每一父节点处的上下文信息,从而根据上下文信息对每一子节点处的目标代码信息进行拼接,生成目标语言生成器可以识别的中间代码,并通过目标语言生成器对中间代码进行转换,生成满足代码转换指令的目标代码。通过这一方法,本申请可以自动且高效的源代码包内的代码进行分析,并根据分析结果和用户需求形成对应的目标代码,从而准确且高效的生成目标代码。
本申请实施例描述的实施例是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域技术人员可知,随着技术的演变和新应用场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本领域技术人员可以理解的是,图1-7中示出的技术方案并不构成对本申请实施例的限定,可以包括比图示更多或更少的步骤,或者组合某些步骤,或者不同的步骤。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。
本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括多指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例的方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序的介质。
以上参照附图说明了本申请实施例的优选实施例,并非因此局限本申请实施例的权利范围。本领域技术人员不脱离本申请实施例的范围和实质内所作的任何修改、等同替换和改进,均应在本申请实施例的权利范围之内。
Claims (10)
1.基于语法树的代码生成方法,其特征在于,包括:
获取待转换的源代码包;
通过语法解析器对所述源代码包进行语法解析处理,得到解析内容;
根据所述解析内容构建目标语法树;其中,所述目标语法树包括根节点、至少一个父节点、至少一个子节点,所述根节点连接所述至少一个父节点,每一所述父节点连接至少一个所述子节点、且每一所述子节点连接其中一个所述父节点;
遍历所述目标语法树,获取每一所述子节点处的子代码信息和每一所述父节点处的上下文信息;
根据所述子代码信息和所述上下文信息进行拼接处理,得到中间代码;
根据获取到的代码转换指令,调用目标语言生成器;
将所述中间代码输入至所述目标语言生成器进行语言转换处理,通过所述根节点输出目标代码。
2.根据权利要求1所述的基于语法树的代码生成方法,其特征在于,所述语法解析器包括第一分析器和第二分析器,所述通过语法解析器对所述源代码包进行语法解析处理,得到解析内容,包括:
获取所述第一分析器和所述第二分析器;
将所述源代码包输入至所述第一分析器中,通过所述第一分析器对所述源代码包进行词法解析,得到第一识别信息;
将所述源代码包输入至所述第二分析器中,通过所述第二分析器对所述源代码包进行语法解析,得到第二识别信息;
对所述第一识别信息和所述第二识别信息进行拼接处理,得到所述解析内容。
3.根据权利要求1所述的基于语法树的代码生成方法,其特征在于,所述根据所述子代码信息和所述上下文信息进行拼接处理,得到中间代码,包括:
从所述子节点获取第一目标节点;其中,所述第一目标节点为当前遍历的子节点;
根据所述第一目标节点筛选所述子代码信息,得到候选代码片段;
根据所述目标语法树和所述第一目标节点筛选所述上下文信息,得到候选上下文片段;
根据所述候选上下文片段对所述候选代码片段进行拼接处理,得到所述中间代码。
4.根据权利要求3所述的基于语法树的代码生成方法,其特征在于,所述根据所述目标语法树和所述第一目标节点筛选所述上下文信息,得到候选上下文片段,包括:
从所述目标语法树获取与所述第一目标节点连接的父节点,得到第二目标节点;
根据所述第二目标节点对所述上下文信息进行筛选处理,得到所述候选上下文片段。
5.根据权利要求4所述的基于语法树的代码生成方法,其特征在于,所述根据所述候选上下文片段对所述候选代码片段进行拼接处理,得到所述中间代码,包括:
获取预设的令牌信息;
根据所述令牌信息从所述第二目标节点提取所述第一目标节点的所述候选代码片段;
根据所述候选上下文片段,对所述第一目标节点的拼接逻辑进行识别,得到目标拼接规则;
根据所述目标拼接规则对所述候选代码片段进行拼接处理,得到所述中间代码。
6.根据权利要求1至5任一项所述的基于语法树的代码生成方法,其特征在于,所述根据获取到的代码转换指令,调用目标语言生成器,包括:
获取代码转换指令;
解析所述代码转换指令,得到所述代码转换指令对应的目标转换信息;
对所述目标转换信息与预设的生成器目录信息进行匹配处理,得到目标接口文件;
根据所述目标接口文件对获取到的候选语言生成器进行筛选处理,得到所述目标语言生成器,并调用所述目标语言生成器。
7.根据权利要求6所述的基于语法树的代码生成方法,其特征在于,所述方法还包括:更新所述候选语言生成器,具体包括:
获取预设的生成器更新指令;
根据所述生成器更新指令调用所述候选语言生成器的待更新目录信息和待更新接口文件;
根据所述待更新目录信息和所述待更新接口文件对所述生成器目录信息进行更新。
8.基于语法树的代码生成装置,其特征在于,包括:
源代码获取模块,用于获取待转换的源代码包;
语法解析模块,用于通过语法解析器对所述源代码包进行语法解析处理,得到解析内容;
语法树构建模块,用于根据所述解析内容构建目标语法树;其中,所述目标语法树包括根节点、至少一个父节点、至少一个子节点,所述根节点连接所述至少一个父节点,每一所述父节点连接至少一个所述子节点、且每一所述子节点连接其中一个所述父节点;
语法树遍历模块,用于遍历所述目标语法树,获取每一所述子节点处的子代码信息和每一所述父节点处的上下文信息;
代码拼接模块,用于根据所述子代码信息和所述上下文信息进行拼接处理,得到中间代码;
生成器调用模块,用于据获取到的代码转换指令,调用目标语言生成器;
代码输出模块,用于将所述中间代码输入至所述目标语言生成器进行语言转换处理,通过所述根节点输出目标代码。
9.电子设备,其特征在于,所述电子设备包括存储器、处理器、存储在所述存储器上并可在所述处理器上运行的程序以及用于实现所述处理器和所述存储器之间的连接通信的数据总线,所述程序被所述处理器执行时实现如权利要求1至7任一项所述的基于语法树的代码生成方法的步骤。
10.存储介质,所述存储介质为计算机可读存储介质,用于计算机可读存储,其特征在于,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现权利要求1至7任一项所述的基于语法树的代码生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210441404.9A CN115016793A (zh) | 2022-04-25 | 2022-04-25 | 基于语法树的代码生成方法和装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210441404.9A CN115016793A (zh) | 2022-04-25 | 2022-04-25 | 基于语法树的代码生成方法和装置、电子设备、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115016793A true CN115016793A (zh) | 2022-09-06 |
Family
ID=83066406
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210441404.9A Pending CN115016793A (zh) | 2022-04-25 | 2022-04-25 | 基于语法树的代码生成方法和装置、电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115016793A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115408595A (zh) * | 2022-11-03 | 2022-11-29 | 博和利统计大数据(天津)集团有限公司 | 数据抓取引擎开发方法、执行方法、设备及存储介质 |
CN116738899A (zh) * | 2023-08-14 | 2023-09-12 | 摩尔线程智能科技(北京)有限责任公司 | 硬件知识产权块的代码转换装置和方法 |
CN116738900A (zh) * | 2023-08-14 | 2023-09-12 | 摩尔线程智能科技(北京)有限责任公司 | 知识产权块的代码转换装置和方法 |
CN117289919A (zh) * | 2023-11-24 | 2023-12-26 | 浙江口碑网络技术有限公司 | 一种数据处理方法、装置及电子设备 |
CN117724804A (zh) * | 2023-12-19 | 2024-03-19 | 万物镜像(北京)计算机系统有限公司 | 一种虚拟机指令集的生成方法、装置及设备 |
-
2022
- 2022-04-25 CN CN202210441404.9A patent/CN115016793A/zh active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115408595A (zh) * | 2022-11-03 | 2022-11-29 | 博和利统计大数据(天津)集团有限公司 | 数据抓取引擎开发方法、执行方法、设备及存储介质 |
CN115408595B (zh) * | 2022-11-03 | 2023-03-24 | 博和利统计大数据(天津)集团有限公司 | 数据抓取引擎开发方法、执行方法、设备及存储介质 |
CN116738899A (zh) * | 2023-08-14 | 2023-09-12 | 摩尔线程智能科技(北京)有限责任公司 | 硬件知识产权块的代码转换装置和方法 |
CN116738900A (zh) * | 2023-08-14 | 2023-09-12 | 摩尔线程智能科技(北京)有限责任公司 | 知识产权块的代码转换装置和方法 |
CN116738899B (zh) * | 2023-08-14 | 2023-10-31 | 摩尔线程智能科技(北京)有限责任公司 | 硬件知识产权块的代码转换装置和方法 |
CN116738900B (zh) * | 2023-08-14 | 2023-11-28 | 摩尔线程智能科技(北京)有限责任公司 | 知识产权块的代码转换装置和方法 |
CN117289919A (zh) * | 2023-11-24 | 2023-12-26 | 浙江口碑网络技术有限公司 | 一种数据处理方法、装置及电子设备 |
CN117289919B (zh) * | 2023-11-24 | 2024-02-20 | 浙江口碑网络技术有限公司 | 一种数据处理方法、装置及电子设备 |
CN117724804A (zh) * | 2023-12-19 | 2024-03-19 | 万物镜像(北京)计算机系统有限公司 | 一种虚拟机指令集的生成方法、装置及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115016793A (zh) | 基于语法树的代码生成方法和装置、电子设备、存储介质 | |
US20200293293A1 (en) | Pruning Engine | |
CN107644323B (zh) | 一种面向业务流的智能审核系统 | |
CN109582691B (zh) | 用于控制数据查询的方法和装置 | |
CN110704479A (zh) | 任务处理方法、装置、电子设备及存储介质 | |
US9710243B2 (en) | Parser that uses a reflection technique to build a program semantic tree | |
US9122540B2 (en) | Transformation of computer programs and eliminating errors | |
US9311058B2 (en) | Jabba language | |
CN106371997B (zh) | 一种代码检查方法及装置 | |
Cánovas Izquierdo et al. | A domain specific language for extracting models in software modernization | |
CN112860727A (zh) | 基于大数据查询引擎的数据查询方法、装置、设备及介质 | |
CN113504900A (zh) | 一种编程语言转换方法和装置 | |
CN113297251A (zh) | 多源数据检索方法、装置、设备及存储介质 | |
CN110716953A (zh) | Sql语句自动生成方法、装置、设备及可读存储介质 | |
CN113608748B (zh) | C语言转换Java语言的数据处理方法、装置及设备 | |
CN114064601B (zh) | 存储过程转换方法、装置、设备和存储介质 | |
CN114816356A (zh) | 基于接口文档生成http请求代码的系统及方法 | |
CN114816420A (zh) | 一种数据处理方法和装置 | |
CN113505143A (zh) | 语句类型的转换方法、装置、存储介质及电子装置 | |
CN113032366A (zh) | 基于Flex和Bison的SQL语法树解析方法 | |
Grigorev et al. | String-embedded language support in integrated development environment | |
CN117555925B (zh) | 数据库访问代码转换方法、装置及电子设备 | |
CN114489682B (zh) | nginx配置文件的操作方法、装置和设备 | |
Quesada et al. | Parsing abstract syntax graphs with ModelCC | |
CN116107588A (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 |