CN117008920A - 引擎***、请求处理方法、装置、计算机设备及存储介质 - Google Patents

引擎***、请求处理方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN117008920A
CN117008920A CN202310989574.5A CN202310989574A CN117008920A CN 117008920 A CN117008920 A CN 117008920A CN 202310989574 A CN202310989574 A CN 202310989574A CN 117008920 A CN117008920 A CN 117008920A
Authority
CN
China
Prior art keywords
mixed
language
code
language code
syntax tree
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
CN202310989574.5A
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.)
Shanghai Bilibili Technology Co Ltd
Original Assignee
Shanghai Bilibili 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 Shanghai Bilibili Technology Co Ltd filed Critical Shanghai Bilibili Technology Co Ltd
Priority to CN202310989574.5A priority Critical patent/CN117008920A/zh
Publication of CN117008920A publication Critical patent/CN117008920A/zh
Pending legal-status Critical Current

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/425Lexical analysis
    • 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)

Abstract

本申请公开了一种请求处理方法,包括:接收页面获取请求;对所述页面获取请求进行处理,得到所述页面获取请求对应的JSON报文;调用基于混编语言的引擎***执行如下步骤:将JSON报文转换为对应的混编语言代码,以及对所述混编语言代码进行解析,得到抽象语法树,其中,所述混编语言代码包括至少两种编码语言代码;执行所述抽象语法树,得到所述页面获取请求对应的页面请求结果。

Description

引擎***、请求处理方法、装置、计算机设备及存储介质
技术领域
本申请涉及互联网技术领域,尤其涉及一种引擎***、请求处理方法、装置、计算机设备及存储介质。
背景技术
互联网技术中编程语言的品类繁多,各种编码语言都具有各自的优势与缺陷。比如,针对脚本语言引擎,以Groovy引擎为例,使用起来需要严格按照Groovy语言规范编写执行或引擎内容,语言规范与风格偏向Java语言,用户使用体验笨重。虽然该引擎的语法与Java语法类似,对于后端同学编程人员来说学习起来成本不大,但是对于前端编程人员来说就比较陌生。又比如,针对JS语言引擎,以Java自带的JS引擎为例,使用是纯JS语法,语法适用面非常广,前后端的编程人员都能快速掌握,门槛低。但是采用JS语言进行编程时也会存在一些缺陷,比如,数字类型的精度缺失问题。
发明内容
有鉴于此,现提供一种基于混编语言的引擎***、请求处理方法、装置、计算机设备及存储介质,以解决现有中的单一编程语言引擎在编程过程中会存在一些缺陷的问题。
本申请提供了一种引擎***,所述引擎***包括引擎应用层及引擎执行层,其中:
所述引擎应用层,用于将JSON报文将所述JSON报文切分为多个逻辑单元;将多个所述逻辑单元分别映射成对应的代码模块;以及将多个代码模块拼接成混编语言代码,其中,所述混编语言代码包括至少两种编码语言代码;
所述引擎应用层,还用于对所述混编语言代码进行词法分析,以将所述混编语言代码转换为对应的令牌流;以及对所述令牌流进行语法分析,得到所述抽象语法树;
所述引擎执行层,用于循环遍历所述抽象语法树中包含的多个节点,获取多个所述节点对应的***级别接口;以及通过每一个节点对应的***级别接口执行每一个节点对应的代码段,得到执行结果。
本申请还提供了一种请求处理方法,所述方法包括:
接收页面获取请求;
对所述页面获取请求进行处理,得到所述页面获取请求对应的JSON报文;
调用基于混编语言的引擎***执行如下步骤:
将JSON报文转换为对应的混编语言代码,以及对所述混编语言代码进行解析,得到抽象语法树,其中,所述混编语言代码包括至少两种编码语言代码;
执行所述抽象语法树,得到所述页面获取请求对应的页面请求结果。
可选地,所述将JSON报文转换为对应的混编语言代码包括:
将所述JSON报文切分为多个逻辑单元;
将多个所述逻辑单元分别映射成对应的代码模块;
将多个代码模块拼接成所述混编语言代码。
可选地,所述对所述混编语言代码进行解析,得到抽象语法树包括:
对所述混编语言代码进行词法分析,以将所述混编语言代码转换为对应的令牌流;
对所述令牌流进行语法分析,得到所述抽象语法树。
可选地,所述混编语言代码包括Java语言代码及JS语言代码,所述对所述混编语言代码进行解析,得到抽象语法树包括:
在对所述混编语言代码的解析过程中,将所述混编语言代码中的JS语言代码解析成符合Java虚拟机可执行模式的类型,将所述混编语言代码中的Java语言代码解析成Java语言对应的类加载器加载***内存中拥有的java代码类的类型。
可选地,所述将所述混编语言代码中的JS语言代码解析成符合Java虚拟机可执行模式的类型包括:
获取JS语言对应的类加载器,使用所述类加载器加载JS类,并在完成JS类加载后,通过预设的JS引擎将所述JS语言代码转换成符合Java虚拟机可执行模式的类型。
可选地,所述执行所述抽象语法树,得到所述页面获取请求对应的页面请求结果包括:
循环遍历所述抽象语法树中包含的多个节点,获取多个所述节点对应的***级别接口;
通过每一个节点对应的***级别接口执行每一个节点对应的代码段,得到所述页面获取请求对应的页面请求结果。
本申请还提供了一种请求处理装置,包括:
接收模块,用于接收页面获取请求;
处理模块,用于对所述页面获取请求进行处理,得到所述页面获取请求对应的JSON报文;
调用模块,用于调用基于混编语言的引擎***执行如下步骤:将JSON报文转换为对应的混编语言代码,以及对所述混编语言代码进行解析,得到抽象语法树,其中,所述混编语言代码包括至少两种编码语言代码;执行所述抽象语法树,得到所述页面获取请求对应的页面请求结果。
本申请还提供了一种计算机设备,所述计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。
本申请实施例提供的引擎***、请求处理方法、装置、计算机设备及存储介质,可以包括以下技术效果:
通过融合了多种单一引擎***的功能,从而可以将脚本语言、java语言进行混编,并与js语言进行融合,让脚本语言执行逻辑编码,java语言执行***功能,让js语言执行数据处理,纯js语言的脚本可以扩展成其他脚本语言类型,实现逻辑一致,并且达到让前端编程人员可以进行js层面的数据处理工作,让后端编程人员进行java层面的复杂逻辑与***交互工作,学习成本低,并且简单明了。
附图说明
图1为本申请实施例的应用环境示意图;
图2为本申请所述的基于混编语言的引擎***的架构图;
图3为本申请所述的引擎***中的引擎应用层及引擎执行层的功能示意图;
图4为本申请所述的混编语言代码的转换过程示意流程图;
图5为本申请的混编语言代码与抽象语法树的转换示意图;
图6示意性示出了根据本申请实施例的请求处理方法的流程图;
图7为混编语言代码中包含有Java语言代码时的对请求进行处理的流程示意图;
图8为混编语言代码中包含有JS语言代码时的对请求进行处理的流程示意图;
图9为本申请所述的请求处理装置的程序模块图;
图10为本申请实施例提供的执行请求处理方法的计算机设备的硬件结构示意图。
具体实施方式
以下结合附图与具体实施例进一步阐述本申请的优点。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本公开采用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所采用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中采用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所采用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在本申请的描述中,需要理解的是,步骤前的数字标号并不标识执行步骤的前后顺序,仅用于方便描述本申请及区别每一步骤,因此不能理解为对本申请的限制。
以下为本申请的术语解释:
表达式引擎:使用轻量级脚本语言,允许开发者使用表达式引擎规定的脚本语言执行对应表达式的一种程序内核或代码。
规则引擎:使用轻量级脚本语言,允许开发者通过某种规则执行具有业务规则的操作的一种程序内核或代码。
脚本引擎:重量级脚本语言,允许开发者通过大量扩展、第三方、开源组件等完整语言生态的脚本语言,执行对应逻辑,用于解释和执行脚本语言的一种程序内核或代码。
JSON:一种轻量级的数据交换格式,易于人阅读与编写,也易于机器解析与生产。
DSL:领域特定语言,这里特指可以进行正确翻译成脚本语言的JSON报文。
AST:抽象语法树(Abstract Syntax Tree),是源代码语法结构一种抽象表示,它以树状的形式表现编程语言的语法结构。
混编语言:指在同一段代码块里,包含至少两种编程语言的代码,即包含有java语言语法、脚本语言语法或者JS语言语法等。
Graal-JS:由GraalVM提供的一款最新执行在jvm中的js脚本引擎。
下面提供本申请的示例性应用环境。图1示意性示出了根据本申请实施例的环境应用示意图。
服务平台2,可以部署基于混编语言的引擎***,服务平台2可以是单个服务器、服务器集群或云计算服务中心。
用户终端(如,4A、4B、…、4N),可以被配置为向服务平台2发送页面逻辑图获取请求,以使服务平台2中部署的基于混编语言的引擎***可以对基于该页面逻辑图请求获取到的混编语言代码进行执行,从而得到页面逻辑图请求结果。用户终端可以是任意类型的计算设备,诸如智能手机、平板设备、膝上型计算机、智能电视、车载终端等。
用户终端和服务平台2可以通过网络连接。网络可以包括各种网络设备,例如路由器、交换机、多路复用器、集线器、调制解调器、网桥、中继器、防火墙和/或代理设备等。网络可以包括物理链路,例如同轴电缆链路、双绞线电缆链路、光纤链路及其组合和/或类似物。网络可以包括无线链路,例如蜂窝链路、卫星链路、Wi-Fi链路和/或类似物。
需要说明的是,图1中的用户终端的数量仅是示意性的,不用于限制本申请的专利保护范围。
下面,将在上述示例性应用环境下提供若干个实施例,来说明本申请中的评论数据处理方案。
参阅图2,其为本申请一实施例的基于混编语言的引擎***的架构图。所述引擎***包括引擎应用层20及引擎执行层21。
引擎应用层20,用于将JSON报文转换为对应的混编语言代码,以及对所述混编语言代码进行解析,得到抽象语法树,其中,所述混编语言代码包括至少两种编码语言代码。
具体地,所述JSON报文用于描述用户编写的页面所具有的逻辑功能。所述JSON报文可以由用户通过引擎应用层20提供的页面逻辑图编辑模块直接进行编写得到,也可以由用户通过引擎应用层20提供的页面逻辑图编辑模块来对多个逻辑功能框进行拖拽后,基于这些用户拖拽的逻辑功能框生成所述JSON报文。
在一具体场景中,引擎应用层20可以对外提供基于逻辑功能框编写页面的页面编辑单元。用户通过该页面编辑单元可以采用拖拽逻辑功能框的方式编写具有如图4所示的页面逻辑功能的页面,比如,用户可以拖拽开始逻辑框、分支逻辑框、结束逻辑框等来编写页面。在用户完成各个逻辑框的拖拽后,页面编辑单元会将编辑好的具有多个页面逻辑功能的页面转换成图4所示的JSON报文。
需要说明的是,为了便于将具有多个页面逻辑功能的页面转换成JSON报文,可以预先定义各个逻辑功能框对应的JSON字符串,这样,当用户完成具有多个页面逻辑功能的页面的编写后,即可以将该页面中包含的所有逻辑功能框对应的JSON字符串拼接起来,从而得到所述JSON报文。
在一实施方式中,将JSON报文转换为对应的混编语言代码的步骤包括:将所述JSON报文切分为多个逻辑单元;将多个所述逻辑单元分别映射成对应的代码模块;将多个代码模块拼接成所述混编语言代码。
具体地,在得到所述JSON报文后,会将所述JSON报文按照其中包含的逻辑功能将所述JSON报文切分为多个逻辑单元。每一个逻辑单元对应一个逻辑功能,且该每一个逻辑单元为用户拖拽的逻辑功能框所对应的JSON字符串。也就是说,在切分逻辑单元时,逻辑单元的数量与用户预先拖拽的逻辑功能框的数量相同。
在得到多个逻辑单元后,即可以将每一个逻辑单元映射成如图4所示的代码模块。其中,每一个逻辑单元对应的代码模块是通过模板技术预先编写好的。
其中,模板技术指的是将函数参数类型抽象化的技术,通过使用模板类型参数,可以定义通用的函数,而不用为每种类型都写一个函数。
在完成各个逻辑单元的映射后,可以将所有的代码模块按照代码逻辑拼接成一个完整的混编语言代码,即可以得到如图4所示的混编语言代码。
其中,所述混编语言代码包括至少两种编码语言代码,比如,包括Java语言代码、JS语言代码、脚本语言代码等。
在一实施方式中,对所述混编语言代码进行解析,得到抽象语法树的步骤包括:对所述混编语言代码进行词法分析,以将所述混编语言代码转换为对应的令牌流;以及对所述令牌流进行语法分析,得到所述抽象语法树。
具体地,对所述混编语言代码进行词法分析时,会将所述混编语言代码从左到右一个字符一个字符地读取,从中识别出一个个“单词”、"符号"、“数字”等,即识别出最小语法单元。在识别出“单词”、"符号"等会将这些识别出的“单词”、"符号"等按照预定的规则合并成一个个的标识tokens(令牌),即会将一个“单词”或"符号"合成一个对应的令牌,所有的令牌组成所述令牌流。
作为示例,如下所示的混编语言代码(let sum=10+66;)在经过词法分析后,可以得到如下所示的令牌流:
[
{"type":"word",value:"let"}
{"type":"word",value:"sum"}
{"type":"Punctuator",value:"="}
{"type":"Numeric",value:"10"}
{"type":"Punctuator",value:"+"}
{"type":"Numeric",value:"66""}
{"type":"Punctuator",value:";"}
]
在得到令牌流后,会对令牌流进行语法分析,从而得到所述抽象语法树。
在一具体场景中,参阅图5,通过对图5中的混编语言代码进行解析后,可以得到图5所示的抽象语法树。
在一示例性的实施方式中,当所述混编语言代码包括Java语言代码及JS语言代码时,对所述混编语言代码进行解析,得到抽象语法树包括:在对所述混编语言代码的解析过程中,将所述混编语言代码中的JS语言代码解析成符合Java虚拟机可执行模式的类型,将所述混编语言代码中的Java语言代码解析成Java语言对应的类加载器加载***内存中拥有的java代码类的类型。
具体地,在对JS语言代码进行解析时,会将JS语言代码扩充成完整的且符合Java虚拟机可执行模式的类型,以便Java虚拟机可以对解析后的代码进行执行。
在一示例性的实施方式中,为了使得JS语言代码可以被转换成符合Java虚拟机可执行模式的类型,所述将所述混编语言代码中的JS语言代码解析成符合Java虚拟机可执行模式的类型包括:获取JS语言对应的类加载器,使用所述类加载器加载JS类,并在完成JS类加载后,通过预设的JS引擎将所述JS语言代码转换成符合Java虚拟机可执行模式的类型。
具体地,JS语言对应的类加载器为用户自定义的。通过该类加载器可以直接对JS类进行加载,这样,在完成JS类加载后,通过调用预设的JS引擎将所述JS语言代码转换成符合Java虚拟机可执行模式的类型,实现通过JS引擎执行对混编语言代码中的JS语言代码进行解析。在一示例性的实施方式中,该JS引擎可以为Graal-JS引擎。
在本实施例中,在对混编语言代码中的Java语言代码进行解析时,可以直接调用***能力,以通过***能力将Java语言代码解析成Java语言对应的类加载器加载***内存中拥有的java代码类的类型。
需要说明的是,上述所述的***能力指的是Java虚拟机所具有的能力。该***能力包括:元数据、连接器、事务、锁、函数扩展等能力。
引擎执行层21,用于执行所述抽象语法树,得到执行结果。
具体地,所述执行结果为对抽象语法树中的所有节点进行依次执行后得到的最终结果。
在一具体的实施方式中,执行所述抽象语法树,得到执行结果包括:循环遍历所述抽象语法树中包含的多个节点,获取多个所述节点对应的***级别接口;通过每一个节点对应的***级别接口执行每一个节点对应的代码段,得到执行结果。
具体地,抽象语法树可以理解成一连串的节点集合,因此,引擎执行层21在执行抽象语法树时,可以循环遍历所述抽象语法树中包含的多个节点,并在每遍历到一个节点后,会获取该节点对应的***级别接口,之后,可以将该***级别接口与该节点进行绑定,可以使用该***级别接口对该节点对应的代码段进行执行。具体的执行操作可以包括计算、变量、逻辑以及数据结构操作。
在完成所有节点对应的代码段的执行后,即可以得到最终的执行结果。
需要说明的是,每一个节点对应的代码段指的是每一个节点所对应抽象语法树的代码。
在示例性的应用中,参阅图3,上述引擎应用层20还具有如下功能:
接口注册、节点注册、模块注册、方法注册、接口权限、***、对插件进行模块注册、进行ResultProvider等。
引擎执行层21还具有如下功能:
Javax.script(用于执行jvm脚本)、compileCache LRU(500)(用于编译缓存)、ExtensionMethod(用于Java基础类型扩展)、@MagicModule(用于模块定义注解)、@Funcition(用于方法定义注解)、Exception(用于异常捕获)、ScriptMetric等。
上述引擎***可以将脚本语言、java语言进行混编,并与js语言进行融合,让脚本语言执行逻辑编码,java语言执行***功能,让js语言执行数据处理,纯js语言的脚本可以扩展成其他脚本语言类型,实现逻辑一致,并且达到让前端编程人员可以进行js层面的数据处理工作,让后端编程人员进行java层面的复杂逻辑与***交互工作,学习成本低,并且简单明了。
图6示意性示出了根据本申请实施例的请求处理方法的流程图。
如图6所示,所述方法包括S60-S62。
S60,接收页面获取请求;
S61,对所述页面获取请求进行处理,得到所述页面获取请求对应的JSON报文;
S62,调用基于混编语言的引擎***执行如下步骤:将JSON报文转换为对应的混编语言代码,以及对所述混编语言代码进行解析,得到抽象语法树,其中,所述混编语言代码包括至少两种编码语言代码;执行所述抽象语法树,得到所述页面获取请求对应的页面请求结果。
在本实施例中,所述页面获取请求为用于获取用户通过混编语言代码编写的页面的请求,这样,当接收到页面获取请求后,即可以对该页面获取请求进行解析处理,从而从服务器中获取该页面获取请求对应的JSON报文,在得到JSON报文后会调用基于混编语言的引擎***将JSON报文转换为对应的混编语言代码,以及对所述混编语言代码进行解析,得到抽象语法树,其中,所述混编语言代码包括至少两种编码语言代码;执行所述抽象语法树,得到所述页面获取请求对应的页面请求结果。
其中,所述的基于混编语言的引擎***为上述图2所示的引擎***。
在一示例性的实施方式中,所述将JSON报文转换为对应的混编语言代码包括:将所述JSON报文切分为多个逻辑单元;将多个所述逻辑单元分别映射成对应的代码模块;将多个代码模块拼接成所述混编语言代码。
具体地,在得到所述JSON报文后,会将所述JSON报文按照其中包含的逻辑功能将所述JSON报文切分为多个逻辑单元。每一个逻辑单元对应一个逻辑功能,且该每一个逻辑单元为用户拖拽的逻辑功能框所对应的JSON字符串。也就是说,在切分逻辑单元时,逻辑单元的数量与用户预先拖拽的逻辑功能框的数量相同。
在得到多个逻辑单元后,即可以将每一个逻辑单元映射成如图4所示的代码模块。其中,每一个逻辑单元对应的代码模块是通过模板技术预先编写好的。
其中,模板技术指的是将函数参数类型抽象化的技术,通过使用模板类型参数,可以定义通用的函数,而不用为每种类型都写一个函数。
在完成各个逻辑单元的映射后,可以将所有的代码模块按照代码逻辑拼接成一个完整的混编语言代码,即可以得到如图4所示的混编语言代码。
其中,所述混编语言代码包括至少两种编码语言代码,比如,包括Java语言代码、JS语言代码、脚本语言代码等。
在一示例性的实施方式中,所述对所述混编语言代码进行解析,得到抽象语法树的步骤包括:对所述混编语言代码进行词法分析,以将所述混编语言代码转换为对应的令牌流;以及对所述令牌流进行语法分析,得到所述抽象语法树。
具体地,对所述混编语言代码进行词法分析时,会将所述混编语言代码从左到右一个字符一个字符地读取,从中识别出一个个“单词”、"符号"、“数字”等,即识别出最小语法单元。在识别出“单词”、"符号"等会将这些识别出的“单词”、"符号"等按照预定的规则合并成一个个的标识tokens(令牌),即会将一个“单词”或"符号"合成一个对应的令牌,所有的令牌组成所述令牌流。
作为示例,如下所示的混编语言代码(let sum=10+66;)在经过词法分析后,可以得到如下所示的令牌流:
[
{"type":"word",value:"let"}
{"type":"word",value:"sum"}
{"type":"Punctuator",value:"="}
{"type":"Numeric",value:"10"}
{"type":"Punctuator",value:"+"}
{"type":"Numeric",value:"66""}
{"type":"Punctuator",value:";"}
]
在得到令牌流后,会对令牌流进行语法分析,从而得到所述抽象语法树。
在一具体场景中,参阅图5,通过对图5中的混编语言代码进行解析后,可以得到图5所示的抽象语法树。
在一示例性的实施方式中,当所述混编语言代码包括Java语言代码及JS语言代码时,对所述混编语言代码进行解析,得到抽象语法树包括:在对所述混编语言代码的解析过程中,将所述混编语言代码中的JS语言代码解析成符合Java虚拟机可执行模式的类型,将所述混编语言代码中的Java语言代码解析成Java语言对应的类加载器加载***内存中拥有的java代码类的类型。
具体地,在对JS语言代码进行解析时,会将JS语言代码扩充成完整的且符合Java虚拟机可执行模式的类型,以便Java虚拟机可以对解析后的代码进行执行。
在一示例性的实施方式中,为了使得JS语言代码可以被转换成符合Java虚拟机可执行模式的类型,所述将所述混编语言代码中的JS语言代码解析成符合Java虚拟机可执行模式的类型包括:获取JS语言对应的类加载器,使用所述类加载器加载JS类,并在完成JS类加载后,通过预设的JS引擎将所述JS语言代码转换成符合Java虚拟机可执行模式的类型。
具体地,JS语言对应的类加载器为用户自定义的。通过该类加载器可以直接对JS类进行加载,这样,在完成JS类加载后,通过调用预设的JS引擎将所述JS语言代码转换成符合Java虚拟机可执行模式的类型,实现通过JS引擎执行对混编语言代码中的JS语言代码进行解析。在一示例性的实施方式中,该JS引擎可以为Graal-JS引擎。
在本实施例中,在对混编语言代码中的Java语言代码进行解析时,可以直接调用***能力,以通过***能力将Java语言代码解析成Java语言对应的类加载器加载***内存中拥有的java代码类的类型。
需要说明的是,上述所述的***能力指的是Java虚拟机所具有的能力。该***能力包括:元数据、连接器、事务、锁、函数扩展等能力。
在一示例性的实施方式中,所述执行所述抽象语法树,得到所述页面获取请求对应的页面请求结果包括:循环遍历所述抽象语法树中包含的多个节点,获取多个所述节点对应的***级别接口;通过每一个节点对应的***级别接口执行每一个节点对应的代码段,得到所述页面获取请求对应的页面请求结果。
具体地,抽象语法树可以理解成一连串的节点集合,因此,在执行抽象语法树时,可以循环遍历所述抽象语法树中包含的多个节点,并在每遍历到一个节点后,会获取该节点对应的***级别接口,之后,可以将该***级别接口与该节点进行绑定,可以使用该***级别接口对该节点对应的代码段进行执行。具体的执行操作可以包括计算、变量、逻辑以及数据结构操作。
在完成所有节点对应的代码段的执行后,即可以得到最终的执行结果,并将该最终的执行结果作为所述页面获取请求对应的页面请求结果。
需要说明的是,每一个节点对应的代码段指的是每一个节点所对应抽象语法树的代码。
为了便于理解本申请的请求处理方法,参阅图7和图8,在接收到页面获取请求后,该页面获取请求会首先经过Request处理器进行处理,以便可以根据该请求查找API,之后会通过API资源池获取到该请求对应的JSON报文,在得到JSON报文后,会调用基于混编语言的引擎***(script-engine)将该JSON报文转换为对应的混编语言代码,之后会执行该混编语言代码。在引擎***在执行该混编语言代码时,会查询获取该混编语言代码对应的抽象语法树,其中,该抽象语法树(AST)是通过分析执行器对混编语言代码进行语法分析和词法分析得到的。在引擎***查询得到该混编语言代码对应的抽象语法树后,会循环遍历所述抽象语法树中包含的多个节点,并在每遍历到一个节点后,会获取该节点对应的***级别接口(JNI接口),之后,可以将该***级别接口与该节点进行绑定,最后,可以使用该***级别接口对该节点对应的脚本语言进行执行。具体的执行操作可以包括计算、变量、逻辑以及数据结构操作。
需要说明的是,引擎***在查询获取该混编语言代码对应的抽象语法树时,若混编语言代码中包含有JS语言代码,该引擎***会调用***能力,以通过该***能力查询Function(方法定义注解);之后,可以在Function资源池中查询到JS语言对应的类加载器;接着,可以获取该类加载器,并加载js类;最后,可以,通过调用JS引擎(js-engine)将所述JS语言代码转换成符合Java虚拟机可执行模式的类型。若混编语言代码中包含有Java语言代码,该引擎***会调用***能力,找到对应的java语法类的***功能类,之后会调用该***功能类将Java语言代码解析成Java语言对应的类加载器加载***内存中拥有的java代码类的类型。
参阅图9所示,是本申请请求处理装置90一实施例的程序模块图。
本实施例中,所述请求处理装置90包括一系列的存储于存储器上的计算机程序指令,当该计算机程序指令被处理器执行时,可以实现本申请各实施例的的功能。在一些实施例中,基于该计算机程序指令各部分所实现的特定的操作,请求处理装置90可以被划分为一个或多个模块,具体可以划分的模块如下:
接收模块91,用于接收页面获取请求;
处理模块92,用于对所述页面获取请求进行处理,得到所述页面获取请求对应的JSON报文;
调用模块93,用于调用基于混编语言的引擎***执行如下步骤:将JSON报文转换为对应的混编语言代码,以及对所述混编语言代码进行解析,得到抽象语法树,其中,所述混编语言代码包括至少两种编码语言代码;执行所述抽象语法树,得到所述页面获取请求对应的页面请求结果。
在一示例性的实施方式中,处理模块92,还用于将所述JSON报文切分为多个逻辑单元;将多个所述逻辑单元分别映射成对应的代码模块;将多个代码模块拼接成所述混编语言代码。
在一示例性的实施方式中,调用模块93,还用于对所述混编语言代码进行词法分析,以将所述混编语言代码转换为对应的令牌流;对所述令牌流进行语法分析,得到所述抽象语法树。
在一示例性的实施方式中,所述混编语言代码包括Java语言代码及JS语言代码,调用模块93,还用于在对所述混编语言代码的解析过程中,将所述混编语言代码中的JS语言代码解析成符合Java虚拟机可执行模式的类型,将所述混编语言代码中的Java语言代码解析成Java语言对应的类加载器加载***内存中拥有的java代码类的类型。
在一示例性的实施方式中,调用模块93,还用于获取JS语言对应的类加载器,使用所述类加载器加载JS类,并在完成JS类加载后,通过预设的JS引擎将所述JS语言代码转换成符合Java虚拟机可执行模式的类型。
在一示例性的实施方式中,调用模块93,还用于循环遍历所述抽象语法树中包含的多个节点,获取多个所述节点对应的***级别接口;通过每一个节点对应的***级别接口执行每一个节点对应的代码段,得到所述页面获取请求对应的页面请求结果。
图10示意性示出了根据本申请实施例的适于实现请求处理方法的计算机设备10的硬件架构示意图。本实施例中,计算机设备10是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。例如,可以是平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图10所示,计算机设备10至少包括但不限于:可通过***总线相互通信链接存储器120、处理器121、网络接口122。其中:
存储器120至少包括一种类型的计算机可读存储介质,该可读存储介质可以是易失性的,也可以是非易失性的,具体而言,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器120可以是计算机设备10的内部存储模块,例如该计算机设备10的硬盘或内存。在另一些实施例中,存储器120也可以是计算机设备10的外部存储设备,例如该计算机设备10上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,存储器120还可以既包括计算机设备10的内部存储模块也包括其外部存储设备。本实施例中,存储器120通常用于存储安装于计算机设备10的操作***和各类应用软件,例如请求处理方法的程序代码等。此外,存储器120还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器121在一些实施例中可以是中央处理器(Central Processing Unit,简称为CPU)、控制器、微控制器、微处理器、或其它拍摄芯片。该处理器121通常用于控制计算机设备10的总体操作,例如执行与计算机设备10进行数据交互或者通信相关的控制和处理等。本实施例中,处理器121用于运行存储器120中存储的程序代码或者处理数据。
网络接口122可包括无线网络接口或有线网络接口,该网络接口122通常用于在计算机设备10与其它计算机设备之间建立通信链接。例如,网络接口122用于通过网络将计算机设备10与外部终端相连,在计算机设备10与外部终端之间的建立数据传输通道和通信链接等。网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯***(GlobalSystem of Mobile communication,简称为GSM)、宽带码分多址(Wideband Code DivisionMultiple Access,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。
需要指出的是,图10仅示出了具有部件120~122的计算机设备,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
在本实施例中,存储于存储器120中的请求处理方法可以被分割为一个或者多个程序模块,并由一个或多个处理器(本实施例为处理器121)所执行,以完成本申请。
本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,计算机程序被处理器执行时实现实施例中的请求处理方法的步骤。
本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作***和各类应用软件,例如实施例中的请求处理方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到至少两个网络单元上。可以根据实际的需要筛选出其中的部分或者全部模块来实现本申请实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域普通技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (10)

1.一种请求处理方法,其特征在于,所述方法包括:
接收页面获取请求;
对所述页面获取请求进行处理,得到所述页面获取请求对应的JSON报文;
调用基于混编语言的引擎***执行如下步骤:
将JSON报文转换为对应的混编语言代码,以及对所述混编语言代码进行解析,得到抽象语法树,其中,所述混编语言代码包括至少两种编码语言代码;
执行所述抽象语法树,得到所述页面获取请求对应的页面请求结果。
2.根据权利要求1所述的请求处理方法,其特征在于,所述将JSON报文转换为对应的混编语言代码包括:
将所述JSON报文切分为多个逻辑单元;
将多个所述逻辑单元分别映射成对应的代码模块;
将多个代码模块拼接成所述混编语言代码。
3.根据权利要求1所述的请求处理方法,其特征在于,所述对所述混编语言代码进行解析,得到抽象语法树包括:
对所述混编语言代码进行词法分析,以将所述混编语言代码转换为对应的令牌流;
对所述令牌流进行语法分析,得到所述抽象语法树。
4.根据权利要求1所述的请求处理方法,其特征在于,所述混编语言代码包括Java语言代码及JS语言代码,所述对所述混编语言代码进行解析,得到抽象语法树包括:
在对所述混编语言代码的解析过程中,将所述混编语言代码中的JS语言代码解析成符合Java虚拟机可执行模式的类型,将所述混编语言代码中的Java语言代码解析成Java语言对应的类加载器加载***内存中拥有的java代码类的类型。
5.根据权利要求4所述的请求处理方法,其特征在于,所述将所述混编语言代码中的JS语言代码解析成符合Java虚拟机可执行模式的类型包括:
获取JS语言对应的类加载器,使用所述类加载器加载JS类,并在完成JS类加载后,通过预设的JS引擎将所述JS语言代码转换成符合Java虚拟机可执行模式的类型。
6.根据权利要求1至5任一项所述的请求处理方法,其特征在于,所述执行所述抽象语法树,得到所述页面获取请求对应的页面请求结果包括:
循环遍历所述抽象语法树中包含的多个节点,获取多个所述节点对应的***级别接口;
通过每一个节点对应的***级别接口执行每一个节点对应的代码段,得到所述页面获取请求对应的页面请求结果。
7.一种请求处理装置,其特征在于,包括:
接收模块,用于接收页面获取请求;
处理模块,用于对所述页面获取请求进行处理,得到所述页面获取请求对应的JSON报文;
调用模块,用于调用基于混编语言的引擎***执行如下步骤:将JSON报文转换为对应的混编语言代码,以及对所述混编语言代码进行解析,得到抽象语法树,其中,所述混编语言代码包括至少两种编码语言代码;执行所述抽象语法树,得到所述页面获取请求对应的页面请求结果。
8.一种基于混编语言的引擎***,其特征在于,所述引擎***包括引擎应用层及引擎执行层,其中:
所述引擎应用层,用于将JSON报文将所述JSON报文切分为多个逻辑单元;将多个所述逻辑单元分别映射成对应的代码模块;以及将多个代码模块拼接成混编语言代码,其中,所述混编语言代码包括至少两种编码语言代码;
所述引擎应用层,还用于对所述混编语言代码进行词法分析,以将所述混编语言代码转换为对应的令牌流;以及对所述令牌流进行语法分析,得到所述抽象语法树;
所述引擎执行层,用于循环遍历所述抽象语法树中包含的多个节点,获取多个所述节点对应的***级别接口;以及通过每一个节点对应的***级别接口执行每一个节点对应的代码段,得到执行结果。
9.一种计算机设备,所述计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6任一项所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6任一项所述的方法的步骤。
CN202310989574.5A 2023-08-07 2023-08-07 引擎***、请求处理方法、装置、计算机设备及存储介质 Pending CN117008920A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310989574.5A CN117008920A (zh) 2023-08-07 2023-08-07 引擎***、请求处理方法、装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310989574.5A CN117008920A (zh) 2023-08-07 2023-08-07 引擎***、请求处理方法、装置、计算机设备及存储介质

Publications (1)

Publication Number Publication Date
CN117008920A true CN117008920A (zh) 2023-11-07

Family

ID=88566935

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310989574.5A Pending CN117008920A (zh) 2023-08-07 2023-08-07 引擎***、请求处理方法、装置、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN117008920A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117724804A (zh) * 2023-12-19 2024-03-19 万物镜像(北京)计算机***有限公司 一种虚拟机指令集的生成方法、装置及设备

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117724804A (zh) * 2023-12-19 2024-03-19 万物镜像(北京)计算机***有限公司 一种虚拟机指令集的生成方法、装置及设备

Similar Documents

Publication Publication Date Title
CN110968325B (zh) 一种小程序转换方法及装置
US11663110B2 (en) Analysis to check web API code usage and specification
US11481200B1 (en) Checking source code validity at time of code update
CN106547527B (zh) 一种JavaScript文件构建方法及装置
US20170134478A1 (en) Selection mapping between fetched files and source files
US20100042585A1 (en) Command Interpretation
CN113885849B (zh) 基于工业互联网平台的应用开发方法、装置及终端设备
CN111796855B (zh) 一种增量版本更新方法、装置、存储介质及计算机设备
CN117008920A (zh) 引擎***、请求处理方法、装置、计算机设备及存储介质
CN112087370A (zh) 发布GitHub Issues的方法、***、电子设备和计算机可读存储介质
CN109828759B (zh) 代码编译方法、装置、计算机装置及存储介质
CN113568605B (zh) 约定式路由配置方法、装置、和***
CN111309332A (zh) 文件内容按需加载方法、装置及电子设备、存储介质
CN112988163B (zh) 编程语言智能适配方法、装置、电子设备和介质
US20200097260A1 (en) Software application developer tools platform
CN114385148A (zh) 一种实现联动功能的方法、装置、设备和存储介质
CN113238739A (zh) 一种插件开发和数据获取方法、装置、电子设备及介质
CN114115900B (zh) 一种脚本编译方法、装置及电子设备
CN107643892B (zh) 接口处理方法、装置、存储介质和处理器
CN116150527A (zh) 组件样式隔离方法、装置、设备、存储介质及产品
CN113821486B (zh) pod库之间依赖关系的确定方法及其装置、电子设备
US20190317877A1 (en) Application state monitoring
CN114816364A (zh) 基于Swagger动态生成范本文件的方法、装置及应用
CN114449063A (zh) 一种报文处理方法、装置及设备
CN113342647A (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