CN114611500A - 表达式处理方法、装置、电子设备及计算机可读存储介质 - Google Patents
表达式处理方法、装置、电子设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN114611500A CN114611500A CN202210220948.2A CN202210220948A CN114611500A CN 114611500 A CN114611500 A CN 114611500A CN 202210220948 A CN202210220948 A CN 202210220948A CN 114611500 A CN114611500 A CN 114611500A
- Authority
- CN
- China
- Prior art keywords
- character string
- expression
- aiel
- processing
- returned
- 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
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
- G06F9/4451—User profiles; Roaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
Abstract
本申请实施例提供了一种表达式处理方法、装置、电子设备及计算机可读存储介质,涉及计算机数据处理领域。该方法包括:获取输入的字符串表达式,并从字符串表达式中识别出需要处理的目标字符串表达式片段和目标字符串表达式片段的返回对象类型;接着,通过表达式语言AIEL,对目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈,并对字符串解析栈进行运算处理,得到返回对象类型的运算结果;接着,利用返回对象类型的运算结果替换目标字符串表达式片段中的部分字符串,或者,将返回对象类型的运算结果构造成JSON对象返回。本申请实施例可以极大提高文本解析功能和运算能力。
Description
技术领域
本申请涉及计算机数据处理技术领域,具体而言,本申请涉及一种表达式处理方法、装置、电子设备及计算机可读存储介质。
背景技术
表达式是由数字、算符、数字分组符号、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。很多程序代码中都涉及到表达式的计算,目前代码中表达式的算术运算,都交给表达式引擎来完成。表达式引擎是第三方提供的表达式计算工具,其可以对字符串表达式进行四则运算、三目运算以及函数调用等等一系列处理,将表达式解析成计算机能识别的代码。
虽然,当前流行的表达式语引擎的主要功能类型包括自动转换、访问变量、算术运算、逻辑运算、关系运算、条件运算、正则表达式、方法调用、自定义函数、调用构造函数及简单模板等;但是,本申请发明人在实现过程中发现:当前的表达式引擎主要做表达式的计算,作用范围小、文本解析功能弱。
发明内容
本申请实施例提供了一种表达式处理方法、装置、电子设备及计算机存储介质,可以解决当前表达式语言作用范围小、文本解析功能弱的问题。技术方案如下:
根据本申请实施例的一个方面,提供了一种表达式处理方法,该方法包括:
获取输入的字符串表达式,并从字符串表达式中识别出需要处理的目标字符串表达式片段和目标字符串表达式片段的返回对象类型;
通过表达式语言AIEL,对目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈,并对字符串解析栈进行运算处理,得到返回对象类型的运算结果;
利用返回对象类型的运算结果替换目标字符串表达式片段中的部分字符串,或者,将返回对象类型的运算结果构造成JSON对象返回。
在一种可能的实现方式中,通过表达式语言AIEL,对目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈,包括:
通过AIEL解析目标字符串表达式片段中的业务处理逻辑,得到至少一个执行节点,并根据至少一个执行节点形成字符串解析栈;
字符串解析栈进行运算处理,包括:
每当得到一个执行节点,则通过对一个执行节点进行对应的方法调用,来对字符串解析栈进行运算处理。
在一种可能的实现方式中,对一个执行节点进行对应的方法调用,包括:
若方法调用的调用过程出现异常或方法调用的返回结果为空,则保留一个执行节点的原有的字符串表达式不变;
若方法调用的返回结果为正常值,则将返回结果设置到返回结果对象上。
在一种可能的实现方式中,返回对象类型包括字符串、JS对象简谱JSON对象、JS对象简谱数组JSONArray对象;
其中,当目标字符串表达式片段为JSON格式的字符串时,返回对象类型为JSON对象;当目标字符串表达式片段为JSONArray格式的字符串时,返回对象类型为JSONArray对象;当目标字符串表达式片段不是JSON格式的字符串、且不是JSONArray格式的字符串时,返回对象类型为字符串。
在一种可能的实现方式中,AIEL的功能包括以下至少一项:
方法调用和变量混合语法;数据结构映射;将JSON字符串通过运算转换为JSON对象。
在一种可能的实现方式中,AIEL包括上下文部分、处理逻辑部分和基础功能部分;
上下文部分是AIEL运行时能够从运行时的环境中获取到的内容,上下文部分包括字符串表达式、数据对象集、方法对象集及内置方法集;
处理逻辑部分是AIEL的运算过程,该运算过程是将一个字符串表达式变成一个返回对象的运算逻辑,处理逻辑部分包括第一方法调用、变量计算和/或获取、表达式运算、内置方法引用、数据结构转换、路径数据获取、内置方法、扩展表达式运算、扩展方法;
基础功能部分用于支撑处理逻辑部分,基础功能部分包括字符串解析、变量路径获取、数据结构转换和第二方法调用。
根据本申请实施例的另一个方面,提供了一种表达式处理装置,该装置包括:
第一处理模块,用于获取输入的字符串表达式,并从字符串表达式中识别出需要处理的目标字符串表达式片段和目标字符串表达式片段的返回对象类型;
第二处理模块,用于通过表达式语言AIEL,对目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈,并对字符串解析栈进行运算处理,得到返回对象类型的运算结果;
第三处理模块,用于利用返回对象类型的运算结果替换目标字符串表达式片段中的部分字符串,或者,将返回对象类型的运算结果构造成JSON对象返回。
在一种可能的实现方式中,第二处理模块在通过表达式语言AIEL,对目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈时,用于:
通过AIEL解析目标字符串表达式片段中的业务处理逻辑,得到至少一个执行节点,并根据至少一个执行节点形成字符串解析栈;
第二处理模块在对字符串解析栈进行运算处理时,用于:
每当得到一个执行节点,则通过对一个执行节点进行对应的方法调用,来对字符串解析栈进行运算处理。
在一种可能的实现方式中,第二处理模块在对一个执行节点进行对应的方法调用时,用于:
当方法调用的调用过程出现异常或方法调用的返回结果为空,保留一个执行节点的原有的字符串表达式不变;
当方法调用的返回结果为正常值,将返回结果设置到返回结果对象上。
在一种可能的实现方式中,返回对象类型包括字符串、JS对象简谱JSON对象、JS对象简谱数组JSONArray对象;
其中,当目标字符串表达式片段为JSON格式的字符串时,返回对象类型为JSON对象;当目标字符串表达式片段为JSONArray格式的字符串时,返回对象类型为JSONArray对象;当目标字符串表达式片段不是JSON格式的字符串、且不是JSONArray格式的字符串时,返回对象类型为字符串。
在一种可能的实现方式中,AIEL的功能包括以下至少一项:
方法调用和变量混合语法;数据结构映射;将JSON字符串通过运算转换为JSON对象。
在一种可能的实现方式中,AIEL包括上下文部分、处理逻辑部分和基础功能部分;
上下文部分是AIEL运行时能够从运行时的环境中获取到的内容,上下文部分包括字符串表达式、数据对象集、方法对象集及内置方法集;
处理逻辑部分是AIEL的运算过程,该运算过程是将一个字符串表达式变成一个返回对象的运算逻辑,处理逻辑部分包括第一方法调用、变量计算和/或获取、表达式运算、内置方法引用、数据结构转换、路径数据获取、内置方法、扩展表达式运算、扩展方法;
基础功能部分用于支撑处理逻辑部分,基础功能部分包括字符串解析、变量路径获取、数据结构转换和第二方法调用。
根据本申请实施例的另一个方面,提供了一种电子设备,该电子设备包括:存储器、处理器及存储在存储器上的计算机程序,处理器执行计算机程序以实现上述的表达式处理方法的步骤。
根据本申请实施例的再一个方面,提供了一种计算机可读存储介质,计算机程序被处理器执行时实现上述的表达式处理方法的步骤。
根据本申请实施例的一个方面,提供了一种计算机程序产品,计算机程序被处理器执行时实现上述的表达式处理方法的步骤。
本申请实施例通过能够表示业务逻辑的文本解析语言AIEL,不仅可以描述一个业务处理逻辑,而且可以动态实现应用逻辑的处理和文本解析功能,实现文本表达式的高效解析和逻辑运算,极大提高文本解析功能和运算能力。同时,本申请实施例通过表达式语言AIEL,对目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈,并对字符串解析栈进行运算处理,得到返回对象类型的运算结果,实现了对字符串表达式的高效的文本解析能力和运算处理能力,不仅使得在对字符串表达式解析完毕后就可以立刻准备好待返回的运算结果,还使得可以根据一个JSON字符串表达式从上下文环境中解析出一个JSON对象。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种表达式处理方法的流程示意图;
图2为本申请实施例提供的AIEL结构图的示意图;
图3为本申请实施例提供的关于测试访问变量的性能的测试对比结果;
图4为本申请实施例提供的关于算术运算的测试对比结果;
图5为本申请实施例提供的关于逻辑运算的测试对比结果;
图6为本申请实施例提供的关于关系运算的测试对比结果;
图7为本申请实施例提供的关于条件运算的测试对比结果;
图8为本申请实施例提供的关于正则表达式的测试对比结果;
图9为本申请实施例提供的关于方法调用的测试对比结果;
图10为本申请实施例提供的一种表达式处理装置的结构示意图;
图11为本申请实施例提供的一种电子设备的结构示意。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”指示实现为“A”,或者实现为“A”,或者实现为“A和B”。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
先对本申请涉及的几个名词及相关内容进行介绍和解释:
EL(Expression Language,表达式语言),通过执行一段文本表达式来获取执行结果。通常由上下文和执行器两部分组成。主要用于变量获取、逻辑运算和代码依赖松耦合。用于业务逻辑经常变化、jar包依赖松耦合的场景。
当前流行的表达式语言主要有:
EL(Expression Language,表达式语言)是JSP2.0中引入的一个新内容。通过EL可以简化在JSP开发中对对象的引用,从而规范页面代码,增加程序的可读性及维护性。EL为不熟悉Java语言页面开发的人员提供了一个开发Java Web应用的新途径。
1、JSF-EL的基本语法
JSF-EL表达式语法很简单,它以“${”开头,以“}”结束,中间为合法的表达式,具体的语法格式如下:${expression}。expression:用于指定要输出的内容,可以是字符串,也可以是由EL运算符组成的表达式。
JSF-EL的使用场景如下:
1.1通过JSF-EL输出字符串
在JSF-EL表达式中要输出一个字符串,可以将此字符串放在一对单引号或双引号内。
示例:使用EL表达式输出字符串内容:${'pan_junbiao的博客'}
1.2通过JSF-EL访问数据
通过JSF-EL提供的“[]”和“.”运算符可以访问数据。通常情况下,“[]”和“.”运算符是等价的,可以相互代替。
示例:${userInfo.id},${userInfo["id"]}
2、JSF-EL的特点
JSF-EL除了具有语法简单、使用方便的特点,还具有以下特点。
(1)JSF-EL可以与JSTL结合使用,也可以与JavaScript语句结合使用。
(2)JSF-EL中会自动进行类型转换。
(3)JSF-EL不仅可以访问一般变量,而且还可以访问JavaBean中的属性以及嵌套属性和集合对象。
(4)在JSF-EL中可以执行算术运算、逻辑运算、关系运算和条件运算等。
(5)在JSF-EL中可以获得命名空间(PageContext对象,它是页面中所有其它内置对象的最大范围的集成对象,通过它可以访问其它内置对象)。
(6)在使用JSF-EL进行除法运算时,如果0作为除数,则返回无穷大Infinity,而不返回错误。
(7)在JSF-EL中可以访问JSP的作用域(request、session、application以及page)。
(8)扩展函数可以与Java类的静态方法进行映射。
3、保留的关键字:and、eq、gt、instanceof、div、or、le、false、empty、not、lt、ge。
4、JSF-EL的运算符
算数计算符:+,-(binary),*,/and div,%and mod,-(unary).
字符连接符:+=
逻辑运算符:and,&&,or,||,not,!.
关系运算符:==,eq,!=,ne,<,lt,>,gt,<=,ge,>=
JEXL是Java表达式语言(Java EXpression Language)的缩写,是一种简单的表达式语言,最初是受Apache Velocity和JavaServer Pages Standard Tag Library 1.1(JSTL)和JavaServer Pages 2.0(JSP)定义的表达式语言的启发。JEXL可以使用在很多场景:
1).脚本功能
使用在需要让使用者自定义一些运算表达式的应用中。
2).组件配置
允许用户自定义配置文件,实现功能的个性化配置,这些配置文件主要涉及到系统变量和表达式。
3).接口和实现的松耦合
当某些组件不需要在编译阶段依赖时,或者不想强依赖时,通过配置实现接口和实现类的映射。
4).简单的模板功能
在不需要jsp或Velocity的场景的时候,可以实现简单模的功能。
当对表达式求值时,JEXL将JexlExpression或JexlScript与JexlContext合并。使用JexlEngine#createExpression()创建表达式,传递一个包含有效JEXL语法的字符串。
虽然JEXL与JSTL中定义的表达式语言类似,但它在一些方面改进了语法:
■支持调用任何可访问的方法
■支持设置/获取任何可访问的公共字段
■一个通用的new()方法,允许实例化对象
■一个通用的size()方法,用于:
■String—返回长度
■返回键的数量
■返回元素的数量
■一个通用的empty()方法,用于集合和字符串
■支持三元运算符'a?b:c'-和它的GNU-C/“Elvis”变体'a?:c'
■支持类似perl的正则表达式匹配操作符'=~'和'!~”
■支持受css3启发的'startsWith'和'endsWith'operators'=^'和'=$'
■支持用户定义函数。
■'+'已被重载,用作字符串连接操作符
Spring表达式语言(简称SpEL)是一种强大的表达式语言,支持在运行时查询和操作对象。语言语法类似于统一EL,但提供了其他特性,最明显的是方法调用和基本的字符串模板功能。其中,Spring表达式语言的功能列表包括:
■文字表达方式
■布尔和关系运算符
■正则表达式
■类表达式
■访问属性、数组、列表、映射
■方法调用
■关系运算符
■赋值
■调用构造函数
■Bean的引用
■阵列结构
■内联列表
■内联映射
■三元运算符
■变量
■用户定义函数
■选择集合
■模板化表达式
J2EE规范的JSF-EL、Apache的JEXL、Spring EL这些表达式语言还主要用于对一段文本表达式进行计算,并输出一个计算结果,他们的作用都集中体现在“ExpressionLanguage”的“Expression”上。J2EE规范的JSF-EL用在J2EE的JSTL规范中,Spring EL用于Spring自身的框架中,基本都服务于一个框架,实现框架自身的功能。
综合JSF-EL、Apache JEXL、Spring EL的主要功能有:类型自动转换、访问变量、算术运算、逻辑运算、关系运算、条件运算、正则表达式、方法调用、自定义函数、调用构造函数、简单模板等。当前对比的EL产品功能主要做表达式的计算,作用范围小,文本解析功能弱;我们需要一款能够表示业务逻辑的文本解析语言,可以用于描述一个业务处理逻辑,而不仅仅是一个运算表达式。
针对上述情况,本申请提出一种表达式处理的方案,下面通过对几个示例性实施方式的描述,对本申请实施例的技术方案以及本申请的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
图1为本申请实施例提供的表达式处理方法的流程示意图,如图1所示,该方法包括:步骤S110,获取输入的字符串表达式,并从字符串表达式中识别出需要处理的目标字符串表达式片段和目标字符串表达式片段的返回对象类型;步骤S120:通过表达式语言AIEL,对目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈,并对字符串解析栈进行运算处理,得到返回对象类型的运算结果;步骤S130,利用返回对象类型的运算结果替换目标字符串表达式片段中的部分字符串,或者,将返回对象类型的运算结果构造成JSON对象返回。
表达式语言AIEL具有固定的语法、语义、保留字,能够描述一个运算表达式、数据结构的映射、方法的调用、方法调用前后的数据处理、数据校验、调用超时、表达一个完整的业务逻辑等等,因为完整的处理逻辑是在解析表达式过程中执行的,所以可以根据需要创建一个新的EL,并定义特殊的规范来嵌入Apache JEXL、Spring EL的功能,减少重复功能的开发。
AIEL是一种通过文本表达的逻辑运算语言,通过运行时动态解析XML配置逻辑实现应用逻辑的处理,属于解析类开发语言,服务于Web应用中间件(FlyingServer),AIEL主要目的是实现一种配置化的处理“Language”,处理一个具有完整业务含义的表达式集合。
AIEL的主要功能包括但不限于:类型自动转换、访问变量、算术运算、逻辑运算、关系运算、条件运算、方法调用、自定义函数、数据映射、数据脱敏、逻辑模板等。AIEL的关键优点是根据发展可以自定义增加或修改表达式元素。
在基于AIEL进行表达式处理的过程中,可以执行如下处理过程:
首先,获取输入的字符串表达式,并根据输入的字符串表达式识别出需要处理的字符串片段(即目标字符串表达式片段)和确定出该字符串片段的返回对象格式(即返回对象类型),包括表达式嵌套处理的情。
接着,通过表达式语言AIEL扫描字符串片段中的字符串表达式char数组,解析出其中包含的方法、变量、逻辑运算、算术运算、关系运算、数据映射的字符,即对目标字符串表达式片段中的业务处理逻辑进行解析,得到相应的业务处理逻辑,此处的业务处理逻辑指上述的方法、变量、逻辑运算、算术运算、关系运算、数据映射的字符。在解析得到相应的业务处理逻辑后,将该业务处理逻辑形成相应的字符串解析栈(亦可称作方法调用树、执行栈)。其中,为了提高解析效率,本申请实施例只从头到尾扫描需要处理的字符串片段中的字符串一次,就把字符串解析成方法调用树。
接着,字符串解析栈进行运算处理,得到返回对象类型的运算结果,即根据方法调用树从里到外进行运算处理,得到返回对象类型的运算结果;在做运算处理后,可以利用该返回对象类型的运算结果替换目标字符串表达式片段中的部分字符串,或者,将该返回对象类型的运算结果构造成JSON对象返回。
需要说明的是,上述字符串片段中的字符串解析完毕后,返回结果(即返回对象类型的运算结果)也就准备完毕了。相当于,是在对目标字符串表达式片段中的业务处理逻辑解析完毕后,方法调用树也就调用完毕了,返回结果(即运算结果)也就准备完毕了。
上述基于AIEL进行表达式处理的过程亦可表述为:AIEL通过扫描字符串表达式char数组,解析出其中包含的方法、变量、逻辑运算、算术运算、关系运算、数据映射的字符,形成一个执行栈(即字符串解析栈),对执行栈做运算处理后,把计算结果返回到字符串中或构造成JSON对象返回。
本申请实施例提供的方法,通过能够表示业务逻辑的文本解析语言AIEL,不仅可以描述一个业务处理逻辑,而且可以动态实现应用逻辑的处理和文本解析功能,实现文本表达式的高效解析和逻辑运算,极大提高文本解析功能和运算能力。同时,本申请实施例通过表达式语言AIEL,对目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈,并对字符串解析栈进行运算处理,得到返回对象类型的运算结果,实现了对字符串表达式的高效的文本解析能力和运算处理能力,不仅使得在对字符串表达式解析完毕后就可以立刻准备好待返回的运算结果,还使得可以根据一个JSON字符串表达式从上下文环境中解析出一个JSON对象。
在本申请实施例的一种可能的实现方式中,通过表达式语言AIEL,对目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈的处理过程可以为:通过AIEL解析目标字符串表达式片段中的业务处理逻辑,得到至少一个执行节点,并根据至少一个执行节点形成字符串解析栈;其中,对字符串解析栈进行运算处理的过程可以为:每当得到一个执行节点,则通过对一个执行节点进行对应的方法调用,来对字符串解析栈进行运算处理。
在对一个执行节点进行对应的方法调用的过程中,若方法调用的调用过程出现异常或方法调用的返回结果为空,则保留一个执行节点的原有的字符串表达式不变;若方法调用的返回结果为正常值,则将返回结果设置到返回结果对象上。
AIEL的实现原理可以表述为:通过扫描字符串表达式char数组(即上述的目标字符串表达式片段),解析出其中包含的方法、变量、逻辑运算、算术运算、关系运算、数据映射的字符(即对目标字符串表达式片段中的业务处理逻辑进行解析),形成一个执行栈(即上述的字符串解析栈),对该执行栈做计算(即对字符串解析栈进行运算处理)后,把计算结果(即返回对象类型的运算结果)返回到字符串(即上述字符串表达式char数组中的字符串)中或构造成JSON对象返回。AIEL的作用是为解析性语言服务,目前可以作为应用容器的基础功能。
具体的处理过程可以包括如下步骤:
第一步,根据输入的字符串表达式识别出需要处理的字符串片段和需要返回的对象格式(即识别出需要处理的目标字符串表达式片段和目标字符串表达式片段的返回对象类型),包括表达式嵌套处理的情况。为了提高解析效率,本申请实施例中的方法只需要从头到尾扫描需要处理的字符串片段中的字符串一次,就可以把字符串解析成方法调用树(即上述的字符串解析栈),并根据方法调用树从里到外进行了运算处理。当字符串解析完毕后,返回结果(即需要返回的对象格式,也即返回对象类型的运算结果)也就准备完毕。
第二步,执行运算处理;在第一步的解析过程中,可以得到一个或多个执行节点,其中,在第一步解析出一个执行节点时,就针对该一个执行节点进行对应的方法调用,来对字符串解析栈进行运算处理。如果在运算处理的执行过程中出现异常或方法调用的返回结果为空,则保留该该一个执行节点的原有的节点表达式,即保留该一个执行节点的原有的字符串表达式不变;如果有正常的返回值,则根据返回结果类型替换原有节点表达式或设置到返回结果对象上,即当方法调用的返回结果为正常值,则将返回结果类型的返回结果设置到返回结果对象上。
第三步,在解析完毕、方法调用树调用完毕后,对返回对象(即返回结果类型的返回结果)根据要求做格式化,可以根据配置对返回对象做进一步加工处理。比如,利用返回对象类型的运算结果替换目标字符串表达式片段中的部分字符串,或者,将返回对象类型的运算结果构造成JSON对象返回。
在一种可能的实现方式中,AIEL包括上下文部分、处理逻辑部分和基础功能部分;其中,上下文部分是AIEL运行时能够从运行时的环境中获取到的内容,上下文部分包括字符串表达式、数据对象集、方法对象集及内置方法集;处理逻辑部分是AIEL的运算过程,该运算过程是将一个字符串表达式变成一个返回对象的运算逻辑,处理逻辑部分包括第一方法调用、变量计算和/或获取、表达式运算、内置方法引用、数据结构转换、路径数据获取、内置方法、扩展表达式运算、扩展方法;基础功能部分用于支撑处理逻辑部分,基础功能部分包括字符串解析、变量路径获取、数据结构转换和第二方法调用。
如图2所示,关于本申请实施例中的AIEL包括上下文部分、处理逻辑部分和基础功能部分,关于这三个部分的具体说明如下所示:
上下文部分指的是AIEL运行时可以从运行时环境获取的内容,该部分的内容包括:
(1)表达式:需要AIEL计算的表达式,表达式是以字符串的形式存在,通过参数方式传入AIEL。
(2)数据对象集:是AIEL运行时环境设置加载的数据对象集合,用于匹配表达式中的变量。
(3)方法对象集:是AIEL运行环境设置加载的java对象集合,用于匹配表达式中的方法。表达式需要指明方法归属的java对象名称。
(4)内置方法集:是AIEL自己内置的方法集合,表达式中无需指定具体方法归属的对象名称,通过内置方法名称+参数可以直接调用。
处理逻辑部分是AIEL运算的过程,就是将一个字符串变成一个返回对象的运算逻辑。图2中填充黑点的区域描述了运算处理的逻辑,先通过基础功能部分的字符串解析(解析表达式),把字符串表达式分解成AIEL可以识别的字符串栈,再判断字符串栈中每个字符串匹配的解析单元,接着使用该解析单元处理匹配的字符串,返回处理结果到字符串栈中对应字符串的位置,最后根据字符串栈中的结果集组装成返回对象。这里的解析单元包括:
(1)方法调用@{}:用“@{方法名称}.方法名称(参数)”字符串表示需要调用的java对象的方法。其中,方法调用@{}即为上述的第一方法调用。
(2)变量计算/获取${}:用“${变量名称}”从上下文环境中运算或直接获取到数据对象。
(3)表达式运算#{}:用“#{逻辑运算/算术运算/关系运算的表达式}”执行逻辑运算、算术运算或关系运算。
(4)内置方法引用():用“(内置方法名称)”可以调用内置的方法。
(5)数据结构转换mapping:定义数据对象转换的mapping格式。
(6)路径数据获取./[]:通过“.”或“/”表示路径,[]表示数组或集合,使用基础功能变量路径获取返回解析的对象。
(6)内置方法:内置了时间、大小写转换、格式化、编码、加密等方法。
(7)扩展表达式运算:当前集成了Spring Expression和Jexl,用于丰富的表达式计算。“#sp{表达式内容}”表示Spring Expression的运算,“#jxel{表达式内容)”表示Jexl的运算。
(8)扩展方法:支持自定义解析单元,扩展字符串表达式功能。
(9)基础功能部分提供的功能用于支撑上层的处理逻辑,其不会轻易增加和修改,基本满足上层处理逻辑的增加和变更。主要包括:
(10)字符串解析:用于把字符串解析成调用栈。
(11)变量路径获取:用于从上下文中运算出数据。
(12)数据结构转换:用于数据对象之间的转换。
(13)方法调用:用于调用环境中的对象方法,复杂的逻辑可以封装到对象方法中,简化字符串的表达。其中,该方法调用即为上述的第二方法调用。
在一个示例中,AIEL功能的主要方法是getValueFromExpress,该主要方法的输入参数如下表1所示,该主要方法的返回参数如下表2所示,其中,故返回参数的名称为空是因为返回参数的名称不固定或不唯一。
表1输入参数
名称 | 类型 | 是否集合 | 备注 |
expression | String | No | 表达式字符串 |
evn | Map | No | 上下文环境数据 |
obj | java.lang.Object | No | 方法类管理器 |
表2返回参数
根据表2的返回参数可以看出,返回对象类型包括字符串、JS对象简谱JSON对象、JS对象简谱数组JSONArray对象。其中,当目标字符串表达式片段为JSON格式的字符串时,返回对象类型为JSON对象;当目标字符串表达式片段为JSONArray格式的字符串时,返回对象类型为JSONArray对象;当目标字符串表达式片段不是JSON格式的字符串、且不是JSONArray格式的字符串时,返回对象类型为字符串。
在一种可能的实现方式中,AIEL的功能包括以下至少一项:方法调用和变量混合语法;数据结构映射;将JSON字符串通过运算转换为JSON对象。
在一个示例中,AIEL独有的功能至少包括以下内容:
(1)方法调用和变量混合语法,JXEL和SPEL都不支持,例如:company.getStaffs()[0].getName()。其中,“变量混合语法”是变量、方法调用的组合,目的是通过简洁的字符串表达来返回需要的对象,图2中的“变量路径获取”具有“变量混合语法”的功能。
(2)替换文本中含有定义的表达式,例如:Veris_SecFrame_(env_code)_Entity_Template_V1.0.xlsx,在运行时(env_code)替换为对应的环境编号。
(3)数据结构映射,其中,图2中的“数据结构转换”通过“数据结构映射”描述信息进行数据结构转换。图2中的“数据结构转换”由“数据结构映射”和转换逻辑代码组成。此处的“数据结构映射”是原数据结构和目标数据结构的转换关系的JSON格式的描述信息。
数据结构映射可以为如下形式,例如:
经过上述形式的处理过程,可以把一个或多个数据转换为一个预定义结构的数据对象。
(4)JSON字符串通过运算并转换为JSON对象,下面给出了一个数据结构转换的示例,该示例与图2中的“数据结构转换”对应。
经过上述形式的处理过程,最终会将一个JSON字符串转换为一个JSON对象返回。
在同一个测试环境下,通过对AIEL、SpringEL及JEXL的测试访问变量的性能、算术运算、逻辑运算、关系运算、条件运算、正则表达式及方法调用等主要功能进行对比测试,发现本申请实施例的AIEL的性能明显优于SpringEL和JEXL,具体对比情况可以参考图3至图9。其中,图3是关于测试访问变量的性能的测试对比结果,根据图3可以看出本申请实施例的AIEL执行测试访问变量的总耗时明显少于SpringEL和JEXL;图4是关于算术运算的测试对比结果,根据图4可以看出本申请实施例的AIEL执行算术运算的总耗时明显少于SpringEL和JEXL;图5是关于逻辑运算的测试对比结果,根据图5可以看出本申请实施例的AIEL执行逻辑运算的总耗时明显少于SpringEL和JEXL;图6是关于关系运算的测试对比结果,根据图6可以看出本申请实施例的AIEL执行关系运算的总耗时明显少于SpringEL和JEXL;图7是关于条件运算的测试对比结果,根据图7可以看出本申请实施例的AIEL执行条件运算的总耗时明显少于SpringEL和JEXL;图8是关于正则表达式的测试对比结果,根据图8可以看出本申请实施例的AIEL执行正则表达式的总耗时明显少于SpringEL和JEXL;图9是关于方法调用的测试对比结果,根据图9可以看出本申请实施例的AIEL执行方法调用的总耗时明显少于SpringEL和JEXL。
通过上述的图3至图9及本申请实施例可以看出,AIEL的处理效率明显优于当前使用的SpringEL和JEXL,AIEL可以用于根据一个JSON字符串表达式并结合上下文环境,解析出一个JSON对象;也可以用于定义的一个数据结构,在不同的上下文环境中实例化;还可以用于数据对象结构的映射转换、数据裁剪、数据脱敏、数据中某些字段的授权控制。可见,本申请实施例的AIEL可以兼容其他EL引擎,功能强大且处理效率极高,是一个JSON表达式解析引擎,不仅可以解析某个单一的表达式,而且可以作为解析型语言的基础功能,承接数据和参数的实例化。
本申请实施例提供了一种表达式处理装置,如图10所示,该网络容量预测装置100可以包括:第一处理模块1001、第二处理模块1002和第三处理模块1003,其中,
第一处理模块1001,用于获取输入的字符串表达式,并从字符串表达式中识别出需要处理的目标字符串表达式片段和目标字符串表达式片段的返回对象类型;
第二处理模块1002,用于通过表达式语言AIEL,对目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈,并对字符串解析栈进行运算处理,得到返回对象类型的运算结果;
第三处理模块1003,用于利用返回对象类型的运算结果替换目标字符串表达式片段中的部分字符串,或者,将返回对象类型的运算结果构造成JSON对象返回。
在一种可能的实现方式中,第二处理模块在通过表达式语言AIEL,对目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈时,用于:
通过AIEL解析目标字符串表达式片段中的业务处理逻辑,得到至少一个执行节点,并根据至少一个执行节点形成字符串解析栈;
第二处理模块在对字符串解析栈进行运算处理时,用于:
每当得到一个执行节点,则通过对一个执行节点进行对应的方法调用,来对字符串解析栈进行运算处理。
在一种可能的实现方式中,第二处理模块在对一个执行节点进行对应的方法调用时,用于:
当方法调用的调用过程出现异常或方法调用的返回结果为空,保留一个执行节点的原有的字符串表达式不变;
当方法调用的返回结果为正常值,将返回结果设置到返回结果对象上。
在一种可能的实现方式中,返回对象类型包括字符串、JS对象简谱JSON对象、JS对象简谱数组JSONArray对象;
其中,当目标字符串表达式片段为JSON格式的字符串时,返回对象类型为JSON对象;当目标字符串表达式片段为JSONArray格式的字符串时,返回对象类型为JSONArray对象;当目标字符串表达式片段不是JSON格式的字符串、且不是JSONArray格式的字符串时,返回对象类型为字符串。
在一种可能的实现方式中,AIEL的功能包括以下至少一项:
方法调用和变量混合语法;数据结构映射;将JSON字符串通过运算转换为JSON对象。
在一种可能的实现方式中,AIEL包括上下文部分、处理逻辑部分和基础功能部分;
上下文部分是AIEL运行时能够从运行时的环境中获取到的内容,上下文部分包括字符串表达式、数据对象集、方法对象集及内置方法集;
处理逻辑部分是AIEL的运算过程,该运算过程是将一个字符串表达式变成一个返回对象的运算逻辑,处理逻辑部分包括第一方法调用、变量计算和/或获取、表达式运算、内置方法引用、数据结构转换、路径数据获取、内置方法、扩展表达式运算、扩展方法;
基础功能部分用于支撑处理逻辑部分,基础功能部分包括字符串解析、变量路径获取、数据结构转换和第二方法调用。
本申请实施例通过能够表示业务逻辑的文本解析语言AIEL,不仅可以描述一个业务处理逻辑,而且可以动态实现应用逻辑的处理和文本解析功能,实现文本表达式的高效解析和逻辑运算,极大提高文本解析功能和运算能力。同时,本申请实施例通过表达式语言AIEL,对目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈,并对字符串解析栈进行运算处理,得到返回对象类型的运算结果,实现了对字符串表达式的高效的文本解析能力和运算处理能力,不仅使得在对字符串表达式解析完毕后就可以立刻准备好待返回的运算结果,还使得可以根据一个JSON字符串表达式从上下文环境中解析出一个JSON对象。
本申请实施例的表达式处理装置可执行本申请上述实施例所示的表达式处理方法,其实现原理相类似,本申请各实施例的装置中的各模块所执行的动作是与本申请各实施例的方法中的步骤相对应的,对于装置的各模块的详细功能描述具体可以参见前文中所示的对应方法中的描述,此处不再赘述。
本申请实施例中提供了一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,该处理器执行上述计算机程序以实现确定网络覆盖的方法的步骤,与现有技术相比可实现:获取输入的字符串表达式,并从字符串表达式中识别出需要处理的目标字符串表达式片段和目标字符串表达式片段的返回对象类型;接着,通过表达式语言AIEL,对目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈,并对字符串解析栈进行运算处理,得到返回对象类型的运算结果;接着,利用返回对象类型的运算结果替换目标字符串表达式片段中的部分字符串,或者,将返回对象类型的运算结果构造成JSON对象返回。
在一个可选实施例中提供了一种电子设备,如图11所示,图11所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图11中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质、其他磁存储设备、或者能够用于携带或存储计算机程序并能够由计算机读取的任何其他介质,在此不做限定。
存储器4003用于存储执行本申请实施例的计算机程序,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的计算机程序,以实现前述方法实施例所示的步骤。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
应该理解的是,虽然本申请实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本申请实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本申请实施例对此不限制。
以上所述仅是本申请部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请的方案技术构思的前提下,采用基于本申请技术思想的其他类似实施手段,同样属于本申请实施例的保护范畴。
Claims (10)
1.一种表达式处理方法,其特征在于,包括:
获取输入的字符串表达式,并从所述字符串表达式中识别出需要处理的目标字符串表达式片段和所述目标字符串表达式片段的返回对象类型;
通过表达式语言AIEL,对所述目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈,并对所述字符串解析栈进行运算处理,得到所述返回对象类型的运算结果;
利用所述返回对象类型的运算结果替换所述目标字符串表达式片段中的部分字符串,或者,将所述返回对象类型的运算结果构造成JSON对象返回。
2.根据权利要求1所述的方法,其特征在于,所述通过表达式语言AIEL,对所述目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈,包括:
通过所述AIEL解析所述目标字符串表达式片段中的业务处理逻辑,得到至少一个执行节点,并根据所述至少一个执行节点形成所述字符串解析栈;
所述字符串解析栈进行运算处理,包括:
每当得到一个执行节点,则通过对所述一个执行节点进行对应的方法调用,来对所述字符串解析栈进行运算处理。
3.根据权利要求2所述的方法,其特征在于,所述对所述一个执行节点进行对应的方法调用,包括:
若所述方法调用的调用过程出现异常或所述方法调用的返回结果为空,则保留所述一个执行节点的原有的字符串表达式不变;
若所述方法调用的返回结果为正常值,则将所述返回结果设置到返回结果对象上。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述返回对象类型包括字符串、JS对象简谱JSON对象、JS对象简谱数组JSONArray对象;
其中,当所述目标字符串表达式片段为JSON格式的字符串时,所述返回对象类型为JSON对象;当所述目标字符串表达式片段为JSONArray格式的字符串时,所述返回对象类型为JSONArray对象;当所述目标字符串表达式片段不是JSON格式的字符串、且不是JSONArray格式的字符串时,所述返回对象类型为字符串。
5.根据权利要求1-3任一项所述的方法,其特征在于,所述AIEL的功能包括以下至少一项:
方法调用和变量混合语法;数据结构映射;将JSON字符串通过运算转换为JSON对象。
6.根据权利要求1-3任一项所述的方法,其特征在于,所述AIEL包括上下文部分、处理逻辑部分和基础功能部分;
所述上下文部分是所述AIEL运行时能够从运行时的环境中获取到的内容,所述上下文部分包括字符串表达式、数据对象集、方法对象集及内置方法集;
所述处理逻辑部分是所述AIEL的运算过程,该运算过程是将一个字符串表达式变成一个返回对象的运算逻辑,所述处理逻辑部分包括第一方法调用、变量计算和/或获取、表达式运算、内置方法引用、数据结构转换、路径数据获取、内置方法、扩展表达式运算、扩展方法;
所述基础功能部分用于支撑所述处理逻辑部分,所述基础功能部分包括字符串解析、变量路径获取、数据结构转换和第二方法调用。
7.一种表达式处理装置,其特征在于,包括:
第一处理模块,用于获取输入的字符串表达式,并从所述字符串表达式中识别出需要处理的目标字符串表达式片段和所述目标字符串表达式片段的返回对象类型;
第二处理模块,用于通过表达式语言AIEL,对所述目标字符串表达式片段中的业务处理逻辑进行解析并形成相应的字符串解析栈,并对所述字符串解析栈进行运算处理,得到所述返回对象类型的运算结果;
第三处理模块,用于利用所述返回对象类型的运算结果替换所述目标字符串表达式片段中的部分字符串,或者,将所述返回对象类型的运算结果构造成JSON对象返回。
8.一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,其特征在于,所述处理器执行所述计算机程序以实现权利要求1-6任一项所述方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-6任一项所述的方法的步骤。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-6任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210220948.2A CN114611500A (zh) | 2022-03-08 | 2022-03-08 | 表达式处理方法、装置、电子设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210220948.2A CN114611500A (zh) | 2022-03-08 | 2022-03-08 | 表达式处理方法、装置、电子设备及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114611500A true CN114611500A (zh) | 2022-06-10 |
Family
ID=81861519
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210220948.2A Pending CN114611500A (zh) | 2022-03-08 | 2022-03-08 | 表达式处理方法、装置、电子设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114611500A (zh) |
-
2022
- 2022-03-08 CN CN202210220948.2A patent/CN114611500A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20130159981A1 (en) | Extension mechanism for scripting language compiler | |
WO2013070561A1 (en) | External serialization and deserialization | |
US9043757B2 (en) | Identifying differences between source codes of different versions of a software when each source code is organized using incorporated files | |
US8281287B2 (en) | Compact, portable, and efficient representation of a user interface control tree | |
CN111324619B (zh) | 微服务系统中的对象更新方法、装置、设备和存储介质 | |
US7472391B2 (en) | Resource loader for applications that utilize relative uniform resource identifiers | |
CN111427583A (zh) | 组件的编译方法、装置和电子设备及计算机可读存储介质 | |
US9311111B2 (en) | Programming environment with support for handle and non-handle user-created classes | |
CN112416787A (zh) | 基于java的项目源码扫描分析方法、系统及存储介质 | |
CN100511140C (zh) | 构件化软件系统实现脚本语言调用多输出参数接口的方法 | |
JPH06501583A (ja) | 多言語最適化コンパイラ内のフォールディングメカニズムを構成する方法 | |
CN114428639A (zh) | 一种字节码指令集的指令精简方法和系统 | |
CN112181924A (zh) | 文件转换方法、装置、设备及介质 | |
CN111580830A (zh) | 超文本标记语言文档元素的绑定及解析方法 | |
US20210036944A1 (en) | Ranking service implementations for a service interface | |
CN113805890A (zh) | 小程序跨应用迁移方法、设备、终端、系统及存储介质 | |
CN110941655A (zh) | 一种数据格式转换方法及装置 | |
CN114611500A (zh) | 表达式处理方法、装置、电子设备及计算机可读存储介质 | |
US8650536B2 (en) | Modular server architecture | |
CN116414689A (zh) | 一种基于反射机制的接口参数校验方法及系统 | |
CN116266119A (zh) | 生成依赖于使用的代码嵌入的方法、装置和制品 | |
US20230060957A1 (en) | Creation of Message Serializer for Event Streaming Platform | |
US20220043639A1 (en) | Control of mission data tool application program interfaces | |
CN111399842A (zh) | 一种代码编译方法及装置 | |
US7555708B2 (en) | Mechanism for converting text output into objects |
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 |