CN110069259A - 基于idl文件的解析方法、装置、电子设备和存储介质 - Google Patents

基于idl文件的解析方法、装置、电子设备和存储介质 Download PDF

Info

Publication number
CN110069259A
CN110069259A CN201910161247.4A CN201910161247A CN110069259A CN 110069259 A CN110069259 A CN 110069259A CN 201910161247 A CN201910161247 A CN 201910161247A CN 110069259 A CN110069259 A CN 110069259A
Authority
CN
China
Prior art keywords
abstract syntax
file
idl file
syntax tree
connection class
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
CN201910161247.4A
Other languages
English (en)
Other versions
CN110069259B (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.)
Beijing Sankuai Online Technology Co Ltd
Original Assignee
Beijing Sankuai Online 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 Beijing Sankuai Online Technology Co Ltd filed Critical Beijing Sankuai Online Technology Co Ltd
Priority to CN201910161247.4A priority Critical patent/CN110069259B/zh
Publication of CN110069259A publication Critical patent/CN110069259A/zh
Application granted granted Critical
Publication of CN110069259B publication Critical patent/CN110069259B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services

Landscapes

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

Abstract

本发明提供了一种基于IDL文件的解析方法、装置、电子设备和存储介质,所述方法包括:获取用户配置信息,并从所述用户配置信息中确定IDL文件;采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树;从所述抽象语法树中提取连接类,并对所述连接类进行实例化得到连接类实例;将所述连接类实例和抽象语法树封装为客户端函数。可以通过解析函数栈对IDL文件进行解析,并将解析结果封装为客户端函数,实现了编译的自动化,有助于降低人工成本,提高准确度。

Description

基于IDL文件的解析方法、装置、电子设备和存储介质
技术领域
本发明实施例涉及计算机软件技术领域,尤其涉及一种基于IDL文件的解析方法、装置、电子设备和存储介质。
背景技术
Thrift是一种用于远程调用的开源通信框架,其通过内置的编译器对IDL(Interface Description Language,接口描述文件)中定义的变量类型声明、数据结构声明、服务定义、异常定义等信息进行编译,实现调用逻辑。
现有技术中,在编译过程中,开发人员需要关注编译文件的路径,手动引入编译文件;并根据IDL文件中对方法参数类型的声明,将参数转换为正确的参数类型,才能实现序列化和传输。
可以看出,现有技术需要开发人员干涉编译过程,人工成本较高,准确度也较差。
发明内容
本发明提供一种基于IDL文件的解析方法、装置、电子设备和存储介质,以解决现有技术中的上述问题。
根据本发明的第一方面,提供了一种基于IDL文件的解析方法,所述方法包括:
获取用户配置信息,并从所述用户配置信息中确定IDL文件;
采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树;
从所述抽象语法树中提取连接类,并对所述连接类进行实例化得到连接类实例;
将所述连接类实例和抽象语法树封装为客户端函数。
根据本发明的第二方面,提供了一种基于IDL文件的解析装置,所述装置包括:
IDL文件确定模块,用于获取用户配置信息,并从所述用户配置信息中确定IDL文件;
IDL文件解析模块,用于采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树;
连接类实例化模块,用于从所述抽象语法树中提取连接类,并对所述连接类进行实例化得到连接类实例;
函数封装模块,用于将所述连接类实例和抽象语法树封装为客户端函数。
根据本发明的第三方面,提供了一种电子设备,包括:
处理器、存储器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现前述的方法。
根据本发明的第四方面,提供了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行前述的方法。
本发明实施例提供了一种基于IDL文件的解析方法、装置、电子设备和存储介质,所述方法包括:获取用户配置信息,并从所述用户配置信息中确定IDL文件;采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树;从所述抽象语法树中提取连接类,并对所述连接类进行实例化得到连接类实例;将所述连接类实例和抽象语法树封装为客户端函数。可以通过解析函数栈对IDL文件进行解析,并将解析结果封装为客户端函数,实现了编译的自动化,有助于降低人工成本,提高准确度。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的一种基于IDL文件的解析方法的具体步骤流程图;
图2是基于Thrift框架的结构示意图;
图3是本发明实施例二提供的一种基于IDL文件的解析方法的具体步骤流程图;
图4是本发明实施例三提供的一种基于IDL文件的解析装置的结构图;
图5是本发明实施例四提供的一种基于IDL文件的解析装置的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
参照图1,其示出了本发明实施例一提供的一种基于IDL文件的解析方法的具体步骤流程图。
步骤101,获取用户配置信息,并从所述用户配置信息中确定IDL文件。
本发明实施例应用于远程调用框架Thrift,如图2所示,远程调用框架涉及处于前端的客户端和和处于后端的服务端,客户端通常通过Node.js实现,能够完成底层的协议转化、参数序列化、网络I/O等环节,客户端和服务端分别具有对应的底层网络I/O层、TTransport传输层、TProtocol协议层、以及Foo.write()/read()读写层、FooService.Client客户端类层、FooService.Processor处理层、业务逻辑层。其中,Foo.write()/read()读写层、FooService.Client客户端类层、FooService.Processor处理层通过对IDL文件解析实现。
其中,用户配置信息为用户定义的个性化配置信息,可以为配置文件形式,也可以为静态参数的形式,本发明实施例对其不加以限制。
IDL文件中定义客户端的实现逻辑,包括但不限于:方法的声明、变量的声明、文件的导入等。
具体地,可以将IDL文件的路径写入用户配置信息中。
步骤102,采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树。
其中,预设解析函数栈由一个或多个解析函数构成,每个解析函数均可以针对一种IDL文件中的语法规则进行解析,解析函数可以根据IDL文件的语法规则预先编写。为了解析IDL文件,可以预先编写好解析IDL文件中各种语法规则的解析函数,从而针对其中一个语法规则,解析函数栈中至少存在一个解析函数可以解析出其语法结构。
具体地,解析过程即从IDL文件中识别语法结构的过程,得到语法节点,语法节点可以为一个函数声明,一个静态全局变量的声明,一个文件的引入等。
可以理解,语法规则可以嵌套,例如,一个函数声明对应的语法节点中包含对一个文件的引入,从而文件引入的语法节点为函数声明的语法节点的子节点,函数声明的语法节点为文件引入的语法节点的父节点。类似这种父节点和子节点构成树形结构,即抽象语法树。
步骤103,从所述抽象语法树中提取连接类,并对所述连接类进行实例化得到连接类实例。
其中,连接类用于远程连接远端服务器,可以根据连接类对应的关键字获取连接类。
可以理解,类在调用之前需要建立类的实例,对类的调用其实是对实例的调用。
步骤104,将所述连接类实例和抽象语法树封装为客户端函数。
具体地,将多个连接类实例封装为一个接口,从而调用时仅需要调用该接口,不需要根据场景区别调用连接类实例。
此外,将抽象语法树封装至客户端函数中,使得该客户端函数实现特定的业务逻辑。
综上所述,本发明实施例提供了一种基于IDL文件的解析方法,所述方法包括:获取用户配置信息,并从所述用户配置信息中确定IDL文件;采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树;从所述抽象语法树中提取连接类,并对所述连接类进行实例化得到连接类实例;将所述连接类实例和抽象语法树封装为客户端函数。可以通过解析函数栈对IDL文件进行解析,并将解析结果封装为客户端函数,实现了编译的自动化,有助于降低人工成本,提高准确度。
实施例二
参照图3,其示出了本发明实施例二提供的一种基于IDL文件的解析方法的具体步骤流程图。
步骤201,获取用户配置信息,并从所述用户配置信息中确定IDL文件。
该步骤可以参照步骤101的详细说明,在此不再赘述。
步骤202,根据所述用户配置信息从所述IDL文件中确定入口IDL文件。
其中,入口IDL文件为定义服务Service的IDL文件,通常,入口IDL文件的路径可以在用户配置信息中指明。
步骤203,读取所述入口IDL文件得到目标字符集。
具体地,可以调用文件打开、读取接口从入口IDL文件中读取入口IDL文件的内容,得到目标字符集。
步骤204,采用预设解析函数栈对所述目标字符集进行解析得到抽象语法树。
具体地,可以采用每个解析函数逐步对目标字符集中的内容识别,确定连续几个字符组成的内容对应哪种语法规则。
可选地,在本发明的另一种实施例中,所述步骤204包括子步骤2041至2044:
子步骤2041,采用预设解析函数栈中的每个解析函数,对所述目标字符集中的多个连续字符进行解析。
其中,连续字符的数目可以为变化的量,例如,在初始状态下,连续字符的起始位置可以设置为1,字符长度为1,此时获取一个字符,通过预设解析函数栈进行解析,在该字符解析失败时,可以向后多获取一个字符,同时将该连续的两个字符进行解析,在该两个字符解析失败时,还可以向后多获取一个字符,直至解析成功。
具体地,针对每个解析函数,若该解析函数根据对应的语法规则,确定连续字符是否符合该语法规则,若符合该语法规则,则解析成功,该连续字符组成一个语法节点。
在其中一种实施例中,针对一组连续字符,首先对解析函数栈进行初始化,即将所有解析函数入栈;然后采用处于栈顶位置的解析函数对连续字符进行解析,并在栈顶位置的解析函数解析失败时,将处于栈顶位置的解析函数出栈,直至解析函数栈为空栈(此时抛出异常),解析函数栈对该连续字符的解析失败。
子步骤2042,在其中一个解析函数对所述连续字符解析成功的情况下,将所述解析函数解析得到的语法节点添加至抽象语法树中,所述语法节点包括参数类型。
在其中一种实施例中,若处于栈顶位置的解析函数对连续字符解析成功,则将得到的语法节点添加至抽象语法树中;在处于栈顶位置的解析函数对连续字符解析失败,则抛出异常,将该解析函数出栈,并用下一个处于栈顶位置的解析函数进行解析,直至其中一个解析函数解析成功,或解析函数栈为空,解析失败。
子步骤2043,在所述预设解析函数栈对所述连续字符解析失败的情况下,向后扩展所述连续字符,并采用预设解析函数栈对扩展之后的连续字符进行解析。
具体地,最基础、稳定的扩展为向后扩展一个字符,即将原连续字符和原连续字符之后的一个字符组成新的连续字符;还可以根据原连续字符和其之后的一个字符或多个字符的特点进行判断,从而实现多个字符的扩展,有助于提高解析速率。例如,若原连续字符之后的一个字符为起始类字符(例如{、或(、或“等),则继续向后扩展,直至遇到对应的结束字符(例如,}、或)、或”等)。
可以理解,扩展之后的连续字符的解析与原连续字符的解析相同,此时进入子步骤2041,需要注意的是,在扩展之后,需要初始化解析函数栈,可以保证解析成功率。
子步骤2044,在所述连续字符中最后一个字符的位置偏移量小于所述目标字符集包含的字符数目的情况下,采用预设解析函数栈对所述连续字符之后的字符进行解析。
可以理解,若连续字符中最后一个字符的位置偏移量小于所述目标字符集包含的字符数目,则连续字符未达到最后一个字符,可以继续扩展字符进行解析;若连续字符中最后一个字符的位置偏移量等于或大于目标字符集包含的字符数目,则连续字符达到最后一个字符,不能继续扩展字符,该IDL文件解析完成。
步骤205,在所述抽象语法树中包含依赖关系节点的情况下,从所述依赖关系节点中获取被依赖文件。
具体地,可以通过关键字include识别依赖关系节点,并从节点中提取出被依赖文件。
其中,被依赖文件以路径的形式表示。
步骤206,获取所述被依赖IDL文件对应的抽象语法子树,并添加至所述抽象语法树中。
具体地,将被依赖IDL文件的抽象语法子树作为依赖IDL文件(例如,入口IDL文件)的抽象语法树的子节点,可以在子节点中注明父节点。
可以理解,当依赖IDL文件不为入口IDL文件时,依赖IDL文件对应抽象语法子树作为被依赖IDL文件对应抽象语法子树的父节点,被依赖IDL文件的解析过程可以参照入口IDL文件的解析步骤203至204。
可选地,在本发明的另一种实施例中,所述步骤206包括子步骤2061至2062:
子步骤2061,从预设缓存中获取所述被依赖IDL文件对应的抽象语法子树。
其中,预设缓存预先从设备的缓存中划分出,用于临时存储IDL解析过程中的抽象语法子树。大小可以根据实际应用场景设定,本发明实施例对其不加以限制。在一个入口IDL文件以及相关的被依赖IDL文件解析完成之后,或按照一定周期,该入口IDL文件及被依赖IDL文件对应的抽象语法树的内容可以清除。
子步骤2062,在从预设缓存中获取所述抽象语法子树失败的情况下,采用预设解析函数栈对所述被依赖IDL文件进行解析得到抽象语法子树。
在实际应用中,若存在多个入口IDL文件在解析时,前面解析过程中产生的抽象语法子树需要等所有语法子树解析成功之后才会从缓存中清楚,则后面的IDL解析过程可以直接使用缓存中的抽象语法子树。
本发明实施例可以优先从缓存中直接获取抽象语法子树,在缓存中没有抽象语法子树时,再通过解析得到抽象语法子树,可以有效提高解析速度。
步骤207,从所述抽象语法树中提取结构声明节点和服务声明节点。
其中,结构声明节点可以通过关键字Struct识别,服务声明节点可以通过关键字Service识别,两者均为远程调用框架的代码。
步骤208,根据所述结构声明节点导入对应的结构编译文件。
其中,结构编译文件为远程调用框架提供的编译文件,本发明实施例可以直接导入使用。
步骤209,根据所述服务声明节点导入对应的服务编译文件。
其中,服务编译文件为远程调用框架提供的编译文件,本发明实施例可以直接导入使用。
步骤210,从所述结构编译文件和服务编译文件中获取连接类,并对所述连接类进行实例化得到连接类实例。
具体地,可以根据关键字获取连接类。
本发明实施例可以直接从结构编译文件和服务编译文件中获取得到编译之后的连接类,从而创建连接类实例,实现了连接的预编译和实例化,有助于提高运行和响应速度。
步骤211,将所述连接类实例和抽象语法树封装为客户端函数。
该步骤可以参照步骤104的详细说明,在此不再赘述。
步骤212,响应于针对所述客户端函数的网络调用请求,根据所述参数类型进行参数编码,得到编码之后的参数。
其中,参数类型可以包含于抽象语法树中的节点中。
步骤213,采用所述编码之后的参数调用所述客户端函数得到结果数据。
本发明实施例可以直接调用封装好的客户端函数实现业务逻辑,实现了客户端函数的灵活调用。
可选地,在本发明的另一种实施例中,所述步骤213包括子步骤2031至2032:
子步骤2031,在预设的数据来源为真实数据的情况下,采用所述编码之后的参数调用所述客户端函数从远端服务器获取结果数据。
其中,数据来源可以作为客户端函数的一个参数,从而客户端函数可以根据该参数确定是否使用真实数据作为结果数据。
子步骤2032,在预设的数据来源为非真实数据的情况下,采用所述编码之后的参数调用所述客户端函数从预设数据库中获取结果数据。
其中,预设数据库用于存储预先制作的虚拟数据,可以用于线下测试。
本发明实施例可以适应于线上使用,也可以适用于线下测试,应用场景广泛。
综上所述,本发明实施例提供了一种基于IDL文件的解析方法,所述方法包括:获取用户配置信息,并从所述用户配置信息中确定IDL文件;采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树;从所述抽象语法树中提取连接类,并对所述连接类进行实例化得到连接类实例;将所述连接类实例和抽象语法树封装为客户端函数。可以通过解析函数栈对IDL文件进行解析,并将解析结果封装为客户端函数,实现了编译的自动化,有助于降低人工成本,提高准确度。
实施例三
参照图4,其示出了本发明实施例三提供的一种基于IDL文件的解析装置的结构图,具体如下。
IDL文件确定模块301,用于获取用户配置信息,并从所述用户配置信息中确定IDL文件。
IDL文件解析模块302,用于采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树。
连接类实例化模块303,用于从所述抽象语法树中提取连接类,并对所述连接类进行实例化得到连接类实例。
函数封装模块304,用于将所述连接类实例和抽象语法树封装为客户端函数。
综上所述,本发明实施例提供了一种基于IDL文件的解析装置,所述装置包括:IDL文件确定模块,用于获取用户配置信息,并从所述用户配置信息中确定IDL文件;IDL文件解析模块,用于采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树;连接类实例化模块,用于从所述抽象语法树中提取连接类,并对所述连接类进行实例化得到连接类实例;函数封装模块,用于将所述连接类实例和抽象语法树封装为客户端函数。可以通过解析函数栈对IDL文件进行解析,并将解析结果封装为客户端函数,实现了编译的自动化,有助于降低人工成本,提高准确度。
实施例三为方法实施例一对应的装置实施例,详细信息可以参照实施例一的详细说明,在此不再赘述。
实施例四
参照图5,其示出了本发明实施例四提供的一种基于IDL文件的解析装置的结构图,具体如下。
IDL文件确定模块401,用于获取用户配置信息,并从所述用户配置信息中确定IDL文件。
IDL文件解析模块402,用于采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树,所述抽象语法树包括语法节点,所述语法节点包括参数类型;可选地,在本发明实施例中,所述IDL文件解析模块402,包括:
入口IDL文件确定子模块4021,用于根据所述用户配置信息从所述IDL文件中确定入口IDL文件。
字符集读取子模块4022,用于读取所述入口IDL文件得到目标字符集。
入口IDL文件解析子模块4023,用于采用预设解析函数栈对所述目标字符集进行解析得到抽象语法树。
被依赖文件获取子模块4024,用于在所述抽象语法树中包含依赖关系节点的情况下,从所述依赖关系节点中获取被依赖文件。
子树添加子模块4025,用于获取所述被依赖IDL文件对应的抽象语法子树,并添加至所述抽象语法树中。
连接类实例化模块403,用于从所述抽象语法树中提取连接类,并对所述连接类进行实例化得到连接类实例;可选地,在本发明实施例中,所述连接类实例化模块403,包括:
节点获取子模块4031,用于从所述抽象语法树中提取结构声明节点和服务声明节点。
结构编译文件导入子模块4032,用于根据所述结构声明节点导入对应的结构编译文件。
服务编译文件导入子模块4033,用于根据所述服务声明节点导入对应的服务编译文件。
连接类获取子模块4034,用于从所述结构编译文件和服务编译文件中获取连接类。
函数封装模块404,用于将所述连接类实例和抽象语法树封装为客户端函数。
参数编码模块405,用于响应于针对所述客户端函数的网络调用请求,根据所述参数类型进行参数编码,得到编码之后的参数。
结果数据获取模块406,用于采用所述编码之后的参数调用所述客户端函数得到结果数据。
可选地,在本发明的另一种实施例中,所述入口IDL文件解析子模块4023,包括:
字符解析单元,用于采用预设解析函数栈中的每个解析函数,对所述目标字符集中的多个连续字符进行解析。
语法节点添加单元,用于在其中一个解析函数对所述连续字符解析成功的情况下,将所述解析函数解析得到的语法节点添加至抽象语法树中。
第一继续解析单元,用于在所述预设解析函数栈对所述连续字符解析失败的情况下,向后扩展所述连续字符,并采用预设解析函数栈对扩展之后的连续字符进行解析。
第二继续解析单元,用于在所述连续字符中最后一个字符的位置偏移量小于所述目标字符集包含的字符数目的情况下,采用预设解析函数栈对所述连续字符之后的字符进行解析。
可选地,在本发明的另一种实施例中,所述子树添加子模块4025,包括:
第一抽象语法子树获取单元,用于从预设缓存中获取所述被依赖IDL文件对应的抽象语法子树。
第二抽象语法子树获取单元,用于在从预设缓存中获取所述抽象语法子树失败的情况下,采用预设解析函数栈对所述被依赖IDL文件进行解析得到抽象语法子树。
可选地,在本发明的另一种实施例中,所述结果数据获取模块406,包括:
真实数据获取子模块,用于在预设的数据来源为真实数据的情况下,采用所述编码之后的参数调用所述客户端函数从远端服务器获取结果数据。
伪装数据获取子模块,用于在预设的数据来源为非真实数据的情况下,采用所述编码之后的参数调用所述客户端函数从预设数据库中获取结果数据。
综上所述,本发明实施例提供了一种基于IDL文件的解析装置,所述装置包括:IDL文件确定模块,用于获取用户配置信息,并从所述用户配置信息中确定IDL文件;IDL文件解析模块,用于采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树;连接类实例化模块,用于从所述抽象语法树中提取连接类,并对所述连接类进行实例化得到连接类实例;函数封装模块,用于将所述连接类实例和抽象语法树封装为客户端函数。。可以通过解析函数栈对IDL文件进行解析,并将解析结果封装为客户端函数,实现了编译的自动化,有助于降低人工成本,提高准确度。
实施例四为方法实施例二对应的装置实施例,详细信息可以参照实施例二的详细说明,在此不再赘述。
本发明实施例还提供了一种电子设备,包括:处理器、存储器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现前述的方法。
本发明实施例还提供了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行前述的方法。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的编译设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (10)

1.一种基于IDL文件的解析方法,其特征在于,所述方法包括:
获取用户配置信息,并从所述用户配置信息中确定IDL文件;
采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树;
从所述抽象语法树中提取连接类,并对所述连接类进行实例化得到连接类实例;
将所述连接类实例和抽象语法树封装为客户端函数。
2.根据权利要求1所述的方法,其特征在于,所述采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树的步骤,包括:
根据所述用户配置信息从所述IDL文件中确定入口IDL文件;
读取所述入口IDL文件得到目标字符集;
采用预设解析函数栈对所述目标字符集进行解析得到抽象语法树;
在所述抽象语法树中包含依赖关系节点的情况下,从所述依赖关系节点中获取被依赖文件;
获取所述被依赖IDL文件对应的抽象语法子树,并添加至所述抽象语法树中。
3.根据权利要求2所述的方法,其特征在于,所述采用预设解析函数栈对所述目标字符集进行解析得到抽象语法树的步骤,包括:
采用预设解析函数栈中的每个解析函数,对所述目标字符集中的多个连续字符进行解析;
在其中一个解析函数对所述连续字符解析成功的情况下,将所述解析函数解析得到的语法节点添加至抽象语法树中;
在所述预设解析函数栈对所述连续字符解析失败的情况下,向后扩展所述连续字符,并采用预设解析函数栈对扩展之后的连续字符进行解析;
在所述连续字符中最后一个字符的位置偏移量小于所述目标字符集包含的字符数目的情况下,采用预设解析函数栈对所述连续字符之后的字符进行解析。
4.根据权利要求2所述的方法,其特征在于,所述获取所述被依赖IDL文件对应的抽象语法子树的步骤,包括:
从预设缓存中获取所述被依赖IDL文件对应的抽象语法子树;
在从预设缓存中获取所述抽象语法子树失败的情况下,采用预设解析函数栈对所述被依赖IDL文件进行解析得到抽象语法子树。
5.根据权利要求1~4之任一项所述的方法,其特征在于,所述从所述抽象语法树中提取连接类的步骤,包括:
从所述抽象语法树中提取结构声明节点和服务声明节点;
根据所述结构声明节点导入对应的结构编译文件;
根据所述服务声明节点导入对应的服务编译文件;
从所述结构编译文件和服务编译文件中获取连接类。
6.根据权利要求1~4之任一项所述的方法,其特征在于,所述抽象语法树包括语法节点,所述语法节点包括参数类型,在所述将所述连接类实例和抽象语法树封装为客户端函数的步骤之后,还包括:
响应于针对所述客户端函数的网络调用请求,根据所述参数类型进行参数编码,得到编码之后的参数;
采用所述编码之后的参数调用所述客户端函数得到结果数据。
7.根据权利要求6所述的方法,其特征在于,所述采用所述编码之后的参数调用所述客户端函数得到结果数据的步骤,包括:
在预设的数据来源为真实数据的情况下,采用所述编码之后的参数调用所述客户端函数从远端服务器获取结果数据;
在预设的数据来源为非真实数据的情况下,采用所述编码之后的参数调用所述客户端函数从预设数据库中获取结果数据。
8.一种基于IDL文件的解析装置,其特征在于,所述装置包括:
IDL文件确定模块,用于获取用户配置信息,并从所述用户配置信息中确定IDL文件;
IDL文件解析模块,用于采用预设解析函数栈对所述IDL文件进行解析得到抽象语法树;
连接类实例化模块,用于从所述抽象语法树中提取连接类,并对所述连接类进行实例化得到连接类实例;
函数封装模块,用于将所述连接类实例和抽象语法树封装为客户端函数。
9.一种电子设备,其特征在于,包括:
处理器、存储器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7中任意一个所述的方法。
10.一种可读存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1至7中任意一个所述的方法。
CN201910161247.4A 2019-03-04 2019-03-04 基于idl文件的解析方法、装置、电子设备和存储介质 Active CN110069259B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910161247.4A CN110069259B (zh) 2019-03-04 2019-03-04 基于idl文件的解析方法、装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910161247.4A CN110069259B (zh) 2019-03-04 2019-03-04 基于idl文件的解析方法、装置、电子设备和存储介质

Publications (2)

Publication Number Publication Date
CN110069259A true CN110069259A (zh) 2019-07-30
CN110069259B CN110069259B (zh) 2020-08-04

Family

ID=67366032

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910161247.4A Active CN110069259B (zh) 2019-03-04 2019-03-04 基于idl文件的解析方法、装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN110069259B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110457144A (zh) * 2019-08-05 2019-11-15 北京字节跳动网络技术有限公司 一种实现前端应用的方法、装置、介质和设备
CN111338944A (zh) * 2020-02-21 2020-06-26 北京字节跳动网络技术有限公司 远程过程调用rpc接口测试方法、装置、介质及设备
CN111949253A (zh) * 2020-08-07 2020-11-17 北京字节跳动网络技术有限公司 组合idl文件的方法、装置、计算机设备和存储介质
CN111950239A (zh) * 2020-08-07 2020-11-17 北京字节跳动网络技术有限公司 Schema文档生成方法、装置、计算机设备和介质
CN111949254A (zh) * 2020-08-07 2020-11-17 北京字节跳动网络技术有限公司 生成统一ast的方法、装置、计算机设备和存储介质
CN111949336A (zh) * 2020-08-03 2020-11-17 中国民用航空华东地区空中交通管理局 函数文件的调整方法、装置、计算机设备和存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105205183A (zh) * 2015-10-29 2015-12-30 哈尔滨工业大学 一种基于xml的dds分布式系统自动构建方法
CN107832046A (zh) * 2017-10-31 2018-03-23 北京聆云信息技术有限公司 数据生成方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105205183A (zh) * 2015-10-29 2015-12-30 哈尔滨工业大学 一种基于xml的dds分布式系统自动构建方法
CN107832046A (zh) * 2017-10-31 2018-03-23 北京聆云信息技术有限公司 数据生成方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李颖: "软件无线电中SCA-IDL编译器设计与实现", 《中国优秀硕士学位论文全文数据库》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110457144A (zh) * 2019-08-05 2019-11-15 北京字节跳动网络技术有限公司 一种实现前端应用的方法、装置、介质和设备
CN110457144B (zh) * 2019-08-05 2021-12-07 北京字节跳动网络技术有限公司 一种实现前端应用的方法、装置、介质和设备
CN111338944A (zh) * 2020-02-21 2020-06-26 北京字节跳动网络技术有限公司 远程过程调用rpc接口测试方法、装置、介质及设备
CN111338944B (zh) * 2020-02-21 2023-09-08 北京字节跳动网络技术有限公司 远程过程调用rpc接口测试方法、装置、介质及设备
CN111949336A (zh) * 2020-08-03 2020-11-17 中国民用航空华东地区空中交通管理局 函数文件的调整方法、装置、计算机设备和存储介质
CN111949253A (zh) * 2020-08-07 2020-11-17 北京字节跳动网络技术有限公司 组合idl文件的方法、装置、计算机设备和存储介质
CN111950239A (zh) * 2020-08-07 2020-11-17 北京字节跳动网络技术有限公司 Schema文档生成方法、装置、计算机设备和介质
CN111949254A (zh) * 2020-08-07 2020-11-17 北京字节跳动网络技术有限公司 生成统一ast的方法、装置、计算机设备和存储介质
CN111949253B (zh) * 2020-08-07 2023-12-01 抖音视界有限公司 组合idl文件的方法、装置、计算机设备和存储介质

Also Published As

Publication number Publication date
CN110069259B (zh) 2020-08-04

Similar Documents

Publication Publication Date Title
CN110069259A (zh) 基于idl文件的解析方法、装置、电子设备和存储介质
US7010796B1 (en) Methods and apparatus providing remote operation of an application programming interface
US20030149799A1 (en) System supporting unified event handling in ECMAScript
US9183007B2 (en) Dynamic determination of application server runtime classloading
US9608893B2 (en) Methods and systems for parsing data objects
US20180121320A1 (en) Analysis to check web api code usage and specification
CN110688122B (zh) 编译和执行智能合约的方法及装置
CN110704064B (zh) 编译和执行智能合约的方法及装置
EP1410184A4 (en) PROGRAMMING LANGUAGE EXTENSIONS FOR PROCESSING XML OBJECTS AND CORRESPONDING APPLICATIONS
CN106844153B (zh) 应用程序运行监控方法、装置以及终端
CA2454610A1 (en) Programming language extensions for processing data representation language objects and related applications
CN110704063A (zh) 编译和执行智能合约的方法及装置
Dahlgren et al. Babel users' guide
JP2021502632A (ja) プログラムのコメントを使用した最適化の提供
CN110678839B (zh) 基于流的范围界定
CN109766099A (zh) 前端源码编译方法、装置、存储介质及计算机设备
CN101185116A (zh) 在软件程序中使用强数据类型表示语音识别语法
CN104134039A (zh) 病毒查杀方法、客户端、服务器以及病毒查杀系统
US20060070043A1 (en) System and method for analyzing computer code
CN114327477A (zh) 智能合约执行方法、装置、电子装置和存储介质
US9652205B2 (en) Method, system and computer program for bytecode weaving
US20080127128A1 (en) Type Validation for Applications Incorporating A Weakly-Typed Language
Cifuentes et al. Procedure abstraction recovery from binary code
CN107092474B (zh) 程序开发方法、etl处理方法及装置
CN110659022B (zh) 一种基于Java自动调用Python脚本的方法

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