一种验证方法、装置和存储介质与流程

文档序号:18894259发布日期:2019-10-15 22:39阅读:610来源:国知局
一种验证方法、装置和存储介质与流程

本申请涉及计算机通信的技术领域,具体而言,涉及一种验证方法、装置和存储介质。



背景技术:

目前,可以使用目标验证逻辑表达式来验证业务请求是否合理,求解表达式主要有两种方法,一种是嵌入如lua的脚本方案、或者基于flex,bison等通用开源编译工具生成解析、计算逻辑。典型的流程如下:将表达式进行词法解析得到词法单元,根据词法单元,对表达式进行语法解析生成产生式,最终生成抽象语法树,然后遍历抽象语法树,对语法树中的节点进行语义解析,审查表达式是否符合语义要求,解析步骤多,而且解析步骤复杂,每个解析步骤的结束后,需要重新读取表达式,进行下一解析步骤的处理,因此,目前的表达式求解方法效率较低,导致业务请求的验证效率较低。



技术实现要素:

本申请实施例提供一种验证方法、装置和存储介质,可以提高验证效率。

本申请提供一种验证方法,包括:

获取业务请求对应的目标验证逻辑表达式,目标验证逻辑表达式包括多个字符;

对目标验证逻辑表达式中字符进行词法单元划分;

当每次划分得到词法单元时,对划分得到的当前词法单元进行语法分析,得到词法单元的运算顺序;

根据所有词法单元的运算顺序对目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式;

基于调整后目标验证逻辑表达式对业务请求进行验证。

在一些实施例中,对目标验证逻辑表达式中字符进行词法单元划分,包括:

从目标验证逻辑表达式中读取当前字符,并确定当前字符的字符类型;

根据当前字符的字符类型,确定当前字符划分点;

基于当前字符划分点,对目标验证逻辑表达式中的字符进行词法单元划分。

在一些实施例中,当每次划分得到词法单元时,对划分得到的当前词法单元进行语法分析,得到词法单元的运算顺序,包括:

当每次划分得到词法单元时,确定划分得到的当前词法单元的单元类型;

根据当前词法单元的单元类型,从预设令牌集合中选择目标令牌表示当前词法单元;

基于目标令牌的类型、运算优先级、运算分组关系以及读取顺序,确定目标令牌在预设线性表中的存储位置;

根据目标令牌在预设线性表中的存储位置,得到目标令牌运算顺序。

在一些实施例中,当每次划分得到词法单元时,确定划分得到的当前词法单元的单元类型,包括:

当每次划分得到词法单元时,在预设二维算符表中查找划分得到的当前词法单元对应的算符,其中,预设二维算符表存储有预设算符;

当在预设二维算符表中查询到当前词法单元对应的算符,则确定当前词法单元的单元类型为算符单元类型;

当在预设二维算符表中未查询到词法单元对应的算符,则根据当前词法单元中字符的字符类型,确定当前词法单元的单元类型。

在一些实施例中,根据当前词法单元的单元类型,从预设令牌集合中选择目标令牌表示当前词法单元,包括:

建立指向当前词法单元的字符划分点的当前指针;

从预设令牌集合中确定目标令牌,目标令牌的令牌类型与当前词法单元的单元类型相对应;

根据当前指针、当前词法单元的长度以使目标令牌表示当前词法单元。

在一些实施例中,基于目标令牌的类型、运算优先级、运算分组关系以及读取顺序,确定目标令牌在预设线性表中的存储位置,包括:

若目标令牌的类型为算符类型,则根据目标令牌的运算优先级、运算分组关系,确定目标令牌在预设线性表中的存储位置;

若目标令牌的类型为操作量类型,根据目标令牌的读取顺序,确定目标令牌在预设线性表中的存储位置。

在一些实施例中,若目标令牌的类型为算符类型,则根据目标令牌的运算优先级、运算分组关系,确定目标令牌在调整后目标验证逻辑表达式中的位置,包括:

若目标令牌不为分组算符类型,比较目标令牌与目标令牌的上一算符类型的令牌的运算优先级,得到优先级比较结果;

根据优先级比较结果,确定目标令牌在确定目标令牌在预设线性表中的存储位置;

若目标令牌为分组算符类型,则获取与目标令牌相对应的分组算符类型令牌;

根据与目标令牌相对应的分组算符类型令牌,确定与目标令牌相对应的分组算符类型令牌与目标令牌之间的令牌,确定目标令牌在预设线性表中的存储位置。

在一些实施例中,根据所有词法单元的运算顺序对目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式,包括:

根据所有令牌在预设线性表中的存储位置,确定令牌对应的所有词法单元的运算顺序;

按照令牌对应的所有词法单元的运算顺序,将令牌进行组合,得到调整后目标验证逻辑表达式。

在一些实施例中,获取用于验证的目标验证逻辑表达式,包括:

接收终端发送的业务请求,该请求携带业务信息;

从用于验证的候选验证逻辑表达式中选择业务请求的初始验证逻辑表达式;

根据业务信息对初始验证逻辑表达式进行更新,得到目标验证逻辑表达式。

本申请实施例还提供了一种验证装置,包括:

获取单元,用于获取业务请求对应的目标验证逻辑表达式,目标验证逻辑表达式包括多个字符;

词法划分单元,用于对目标验证逻辑表达式中字符进行词法单元划分;

语法分析单元,用于当每次划分得到词法单元时,对划分得到的当前词法单元进行语法分析,得到词法单元的运算顺序;

转换单元,用于根据所有词法单元的运算顺序对目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式;

运算单元,用于基于调整后目标验证逻辑表达式对业务请求进行验证。

本申请实施例还提供一种存储介质,存储介质存储有多条指令,指令适于处理器进行加载,以执行本申请实施例所提供的任一种验证方法中的步骤。

本申请实施例可以获取业务请求对应的目标验证逻辑表达式,所述目标验证逻辑表达式包括多个字符;对所述目标验证逻辑表达式中字符进行词法单元划分;当每次划分得到词法单元时,对划分得到的当前词法单元进行语法分析,得到所述词法单元的运算顺序;根据所有词法单元的运算顺序对所述目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式;基于所述调整后目标验证逻辑表达式对业务请求进行验证。本申请实施例对目标验证逻辑表达式进行词法分析后,每得到一个词法单元,立即对得到的词法单元,进行类型确定和语法分析,并确定词法单元的运算顺序,无需等待词法划分全部完成,进行词法划分的同时可以进行语法分析,从而可以提高验证效率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的验证方法的应用场景示意图。

图2是本申请实施例提供的验证方法的一个流程示意图。

图3是本申请实施例提供的验证方法的另一个流程示意图。

图4a是本申请实施例提供的验证方法的第一个结构示意图。

图4b是本申请实施例提供的验证方法的第二个结构示意图。

图4c是本申请实施例提供的验证方法的第三个结构示意图。

图5是本申请实施例提供的网络设备的示意图。

图6a是本申请实施例提供的目标验证逻辑表达式的解析过程示意图。

图6b是本申请实施例提供的建立令牌与词法单元的对应关系的示意图。

具体实施方式

下面将分组本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供一种验证方法、装置和存储介质。

本发明的实施例提供了一种验证系统,包括本发明实施例任一提供的验证装置,该验证装置具体可集成在服务器中,该验证装置可以集成在服务器中,该服务器可以单台服务器,也可以为服务器集群,比如,该验证装置可以集成在离线服务器和在线服务器中。

此外,该验证系统还可以包括其他设备,比如终端等。

例如,参考图1,验证系统,包括终端和服务器,终端与服务器通过网络链接。其中,网络中包括路由器、网关等网络实体。在一实施例中,终端还可以通过远程过程调用(remoteprocedurecall)与服务器相连,以免网络状态影响验证系统的运行。

其中,服务器可以直接可以从本地存储中获取目标验证逻辑表达式,在另一实施例中,服务器还可以通过网络链接,从终端或者其他服务器中获取目标验证逻辑表达式。

服务器可以获取业务请求对应的目标验证逻辑表达式,所述目标验证逻辑表达式包括多个字符;对所述目标验证逻辑表达式中字符进行词法单元划分;当每次划分得到词法单元时,对划分得到的当前词法单元进行语法分析,得到所述词法单元的运算顺序;根据所有词法单元的运算顺序对所述目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式;基于所述调整后目标验证逻辑表达式对业务请求进行验证。

当服务器对业务请求验证通过时,可以对业务请求进行响应。例如,在抽奖的业务场景中,服务器可以向符合获奖资格的抽奖系统用户发放奖品。

在另一实施例中,服务器可以基于所述调整后目标验证逻辑表达式得到验证结果,服务器还可以向终端或者其它服务器发送验证结果,终端或者其它服务器可以保存该验证结果,并根据验证结果对业务要求进行相应,例如,可以向用于抽奖的终端转发该验证结果,用于抽奖的终端可以根据验证结果向符合要求的用户发放奖品。

在一实施例中,验证系统包括服务器和终端,服务器和终端通过网络链接,其中服务器包括离线服务器和在线服务器,终端包括业务终端和管理终端。业务终端可以通过远程过程调用(remoteprocedurecall)与离线服务器相连,以免网络状态影响验证系统的运行。

上述图1的例子只是实现本发明实施例的一个系统架构实例,本发明实施例不限于上述图1所示的系统结构,基于该系统架构,提出本发明各个实施例。

以下分别进行详细说明。需说明的是,以下实施例的序号不作为对实施例优选顺序的限定。

参考图2,本实施例将从验证装置的角度进行描述,以验证装置具体集成在单一服务器中为例进行描述。

101、获取用于验证的目标验证逻辑表达式,所述目标验证逻辑表达式包括多个字符。

其中,目标验证逻辑表达式是用来验证用户要求是否符合资格的表达式,目标验证逻辑表达式是由字符组成的,字符的类型有多种,可以为字母、数字、运算符等多种类型。

在一实施例中,所述获取目标验证逻辑表达式,具体可以通过如下步骤实现:

接收终端发送的业务请求,该请求携带业务信息;

从用于验证的候选验证逻辑表达式中选择业务请求的初始验证逻辑表达式;

根据业务信息对初始验证逻辑表达式进行更新,得到目标验证逻辑表达式。

其中,终端可以是手机、平板电脑、笔记本电脑或个人计算机(pc,personalcomputer)等。该终端可以是验证系统中的用于发出业务请求的业务终端,比如用于发出抽奖请求的业务终端,那么业务请求可以是抽奖请求,业务信息可以是关于抽奖要求的信息,例如,具有获奖资格的业务终端的用户必须注册某应用5年以上,那么业务信息可以包括用户注册某应用的时间。

其中,获取业务请求及业务信息的方法有多种,比如,服务器可以通过网络链接从终端中获取业务请求及业务信息,业务终端通过网络链接,向服务器发送业务请求及业务信息。

在一实施例中,服务器可以通过指令获取业务请求和业务信息,为了方便业务终端的用户触发指令,可以设置输入框、选择框或者按钮等作为指令接口,比如,可以在业务终端的抽奖界面上设置输入框及确认按钮,用户在输入框输入用户在某应用的注册账号,服务器接收指令,并根据指令携带的注册账号信息获取该注册账号的注册时间等信息。

其中,候选验证逻辑表达式是由数字、算符、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。相应地,初始验证逻辑表达式是指可以用来验证业务请求是否合理的表达式。相应地,目标验证逻辑表达式可以是分配了业务信息的初始验证逻辑表达式。

在一实施例中,验证系统还包括管理终端,管理终端具有编辑页面,管理终端的用户可以在编辑页面上操作,在管理终端中生成候选验证逻辑表达式,并将候选验证逻辑表达式存储在管理终端的存储器中。管理终端可以通过网络链接,将候选验证逻辑表达式发送给服务器。

在一实施例中,服务器可以将业务信息分配给所述初始验证逻辑表达式,得到目标验证逻辑表达式,并对目标验证逻辑表达式进行处理,最终得到验证结果。例如,具有获奖资格的用户必须注册某应用5年以上,那么初始验证逻辑表达式可以是判断注册时间是都大于5年,相应地,将业务终端的用户的注册时间的具体数值,代入初始验证逻辑表达式,即可得到目标验证逻辑表达式。

102、对所述目标验证逻辑表达式中字符进行词法单元划分。

其中,词法单元是目标验证逻辑表达式中的相邻的字符组成的有意义的字符段,词法单元中的字符的字符类型相同。例如,==是由两个算符类型的字符组成的词法单元,appid是由5个字母类型的字符组成的词法单元。

在一实施例中,对所述目标验证逻辑表达式中字符进行词法单元划分,具体可以包括如下步骤:

从目标验证逻辑表达式中读取当前字符,并确定当前字符的字符类型;

根据所述当前字符的字符类型,确定当前字符划分点;

基于当前字符划分点,对所述目标验证逻辑表达式中字符进行词法单元划分。

其中,字符划分点为逻辑表达式中的字符段划分位置,字符划分点之间的字符段组成词法单元。

在一实施例中,所述根据所述当前字符的字符类型,确定当前字符划分点,具体可以通过以下步骤实现:

若所述字符类型为分隔字符类型,则确定当前字符划分点位于当前字符与所述当前字符的前一字符之间,并删除该字符;

若所述字符类型为非分隔字符类型,且存在当前字符的下一字符,则将所述当前字符更新为当前字符的下一字符,重复所述读取当前字符步骤;

若所述字符类型为非分隔字符类型,且不存在当前字符的下一字符,确定所述字符划分点位于所述当前字符之后。

判断所述字符类型为算符字符类型,则确定当前字符划分点位于当前字符与所述当前字符的前一字符之间;

判断所述当前字符的下一字符的字符类型,并根据所述下一字符的字符类型确定下一字符划分点;

若否,则当前字符划分点位于当前字符与所述当前字符的前一字符之间。

其中,分隔字符用来分隔多个变量、数据项、表达式等的符号。包括逗号、空白符、分号和冒号逗号作为分隔符用来分隔多个变量和函数参数;空白符常用来作为多个单词间的分隔符,也可以作为输数据时自然输入项的缺省分隔符;分号常用于for循环语中for后面,圆括号内的三个表达式之间;冒号用于语句标号与语句之间。

其中,算符为用于对操作量做出改变的字符,包括>>、=、<<、(、)等符号

在一实施例中,所述判断所述当前字符的下一字符的字符类型,并根据所述下一字符的字符类型确定下一字符划分点,具体包括如下步骤:

若所述当前字符类型为非算符类型;

则确定下一字符划分点位于所述当前字符与所述当前字符的下一非分隔字符字符类型的字符之间;

若所述当前字符类型为算符类型;

将所述当前字符更新为下一字符,并重复所述判断所述当前字符的下一字符的字符类型步骤。

103、当每次划分得到词法单元时,对划分得到的当前词法单元进行语法分析,得到所述词法单元的运算顺序。

在一实施例中,对划分得到的当前词法单元进行语法分析,得到所述词法单元的运算顺序,具体可以通过如下步骤实现:

当每次划分得到词法单元时,确定划分得到的当前词法单元的单元类型;

根据当前词法单元的单元类型,从预设令牌集合中选择目标令牌表示当前词法单元;

基于所述目标令牌的类型、运算优先级、运算分组关系以及读取顺序,确定所述目标令牌在预设线性表中的存储位置;

根据所述目标令牌在预设线性表中的存储位置,得到所述目标令牌运算顺序。

其中,单元类型是用于表示词法单元的属性的参数,可以根据词法单元的包含的字符的字符类型将词法单元划分为变量、数字、算符、字符串等类型。

其中,令牌在词法分析中是一种标记,可以用来代表词法单元。预设令牌集合中包括多个预先定义了类型的令牌。

其中,令牌的类型可以分为算符类型和操作量类型,操作量类型可以包括数字、字符串、变量等。算符类型可以包括分组算符类型和其它算符类型,例如,分组算符类型包括(、),其它算符类型包括&&、||等。

在一些实施例中,预设令牌集合可以表现为预定义的对象池。对象池可以管理预设令牌的集合。服务器从池中借出一个未赋值的令牌,建立令牌与词法单元的对应关系,再把已经与词法单元对应的令牌放回池中。然后用它来进行语法分析和目标验证逻辑表达式求值,当求值完成时将令牌初始化,然后归还到池中。现有技术中,在语法分析和逻辑表达式求值的过程中,需要频繁地建立和释放词法单元对象,在应用本发明的本实施例,只需要在语法分析开始时,将词法单元赋值给令牌,然后将令牌放回池中,需要使用时再取出令牌,只需要再对令牌进行一次赋值,就可以进行多次使用,而且赋值的时间成本远远低于创建对象的成本。使用对象池可以减少时间成本,提高验证效率。

其中,线性表(linearlist)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列,线性表包括栈、队列、字符串等形式。

在一实施例中,可以将确定了运算顺序的令牌存储在队列中,其中,队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。将令牌按照生成顺序,从队尾存储进栈中,当所有词法单元对应的令牌都存储入队列中后,可以将令牌从队头依次取出,生成调整后的目标验证逻辑表达式。

在一些实施例中,所述当每次划分得到词法单元时,确定划分得到的当前词法单元的单元类型,具体可以通过以下步骤实现:

当每次划分得到词法单元时,在预设二维算符表中查找划分得到的当前词法单元对应的算符,其中,预设二维算符表存储有预设算符;

当在预设二维算符表中查询到所述当前词法单元对应的算符,则确定所述当前词法单元的单元类型为算符单元类型;

当在预设二维算符表中未查询到所述词法单元对应的算符,则根据所述当前词法单元中字符的字符类型,确定所述当前词法单元的单元类型。

在一实施例中,二维算符表中的预设算符是用ascii码数组的形式存储的,二维算符表可以使用标准ascii码来表示128种可能的字符。一般算符最多由两个字符组成,因此可以用128×128个ascii码数组来代表所有可能的算符,并且将非预设算符对应的ascii码数组定义为null,即空。

使用二维算符表进行算符查找更加快速,可以提高验证效率。

在一些实施例中,所述根据当前词法单元的单元类型,从预设令牌集合中选择目标令牌表示当前词法单元,具体可以通过以下步骤实现:

建立表示当前词法单元的字符划分点的当前指针;

从预设令牌集合中确定目标令牌,所述目标令牌的令牌类型与所述当前词法单元的单元类型相对应;

根据当前指针、当前词法单元的长度以使所述目标令牌表示当前词法单元。

在java语言中,参考图6b,令牌是单元类型的实例化,就是在代码中声明一个类型为某词法单元的单元类型的变量,然后用指针和词法单元的长度申请词法单元的存储空间并初始化该词法单元的属性,将被初始化的词法单元赋值给前面已声明的变量,该变量即为单元类型的实例化对象,就是令牌。其中,目标令牌为未被其它词法单元赋值的令牌。

在获取目标验证逻辑表达式时,内存就已经被目标验证逻辑表达式占用了,使用指针和词法单元的长度来申请存储空间,而不使用词法单元本身创建对象,这样可以减少内存占用,提高验证效率。

在一实施例中,基于所述目标令牌的类型、运算优先级、运算分组关系以及读取顺序,确定所述目标令牌在预设线性表中的存储位置,具体可以通过如下步骤实现:

若所述目标令牌的类型为算符类型,则根据所述目标令牌的运算优先级、运算分组关系,确定所述目标令牌在预设线性表中的存储位置;

若所述目标令牌的类型为操作量类型,根据所述目标令牌的读取顺序,确定所述目标令牌在预设线性表中的存储位置。

其中,算符类型的目标令牌包括分组关系运算符、逻辑运算符、算术运算符等多种。

其中,分组运算关系表示在运算时操作量之间的结合关系,例如,a+b+c的运算分组关系为a与b求和,a+b的值再与c求和,而a+(b+c)的运算分组关系为b与c求和,b+c的值再与a求和。

其中,算符的运算优先级用来表示算符对应的操作量的结合顺序,比如,×属于第5级别的算符,+属于第6级别的算符,=属于第16级别的算符。

其中,若所述目标令牌的类型为算符类型,则根据所述目标令牌的运算优先级、运算分组关系,确定所述目标令牌在预设线性表中的存储位置,具体可以包括如下步骤:

若所述目标令牌不为分组算符类型,比较所述目标令牌与所述目标令牌的上一算符类型的令牌的运算优先级,得到优先级比较结果;

根据所述优先级比较结果,确定所述目标令牌在预设线性表中的存储位置;

若所述目标令牌为分组算符类型,则获取与所述目标令牌相对应的分组算符类型令牌;

根据所述与所述目标令牌相对应的分组算符类型令牌,确定所述与所述目标令牌相对应的分组算符类型令牌与所述目标令牌之间的令牌,确定所述目标令牌在预设线性表中的存储位置。

其中,分组算符类型的词法单元可以改变其它算符的运算优先级,例如,分组算符可以是“(”和“)”等算符。

如果目标验证逻辑表达式中不存在分组算符类型的词法单元,那么不同操作量之间的运算分组关系就根据运算优先级,以及操作量在目标验证逻辑表达式中的位置确定。如果目标验证逻辑表达式中存在分组算符类型的词法单元,那么不同操作量之间的运算分组关系就需要优先根据分组算符类型的词法单元来确定。相应地,需要根据运算分组关系,确定目标令牌在预设线性表中的存储位置。

比如,a+b+c在预设线性表中依次为a、+、b、+、c,而a+(b+c)在预设线性表中的位置为依次为b、+、c、+、a。

其中,比较算符运算优先级的方式有多种,比如,可以在服务器中预先定义算符优先关系列表,在java语言中,算符优先关系列表还可以用字符类型的二维数组表示,这个二维数组是由两个ascii码数组组成的。

在一些实施例中,为了方便得到所有词法单元的运算顺序,可以利用栈和队列暂时存储令牌,具体地,首先获取栈和队列,并将其初始化。队列用于存储调整完成后令牌,栈用于存储调整过程中的令牌。

上述过程具体可以包括:若目标令牌是操作量类型,则按照令牌的读取顺序将令牌存储在队列中,若目标令牌是算符类型,且不是分组算符类型,那么根据算符优先关系列,比较目标令牌对应的词法单元与存储在栈顶的令牌对应的词法单元的运算优先级,如果目标令牌对应的词法单元的运算优先级大于储存在栈顶的令牌对应的词法单元的运算优先级,则将目标令牌存储入栈,并将目标令牌的存储位置作为栈顶。如果目标令牌对应的词法单元的运算优先级小于或者等于储存在栈顶的令牌对应的词法单元的运算优先级,则将存储在栈顶的令牌弹出,然后将目标令牌存储入栈,并将目标令牌的存储位置作为栈顶。若目标令牌为分组算符类型,还需要确定目标令牌对应的词法单元,如果目标令牌对应的词法单元为左括号,则将目标令牌存储入栈,若目标令牌对应的词法单元为右括号,则将栈中的令牌依次弹出,直至遇到左括号为止。并且将左括号和右括号对应的令牌删除或者初始化。若令牌读取完毕,栈中仍有算符类型的令牌,则将算符类型的令牌依次弹出。弹出的令牌按照弹出顺序存储进入队列中。上述步骤最终生成的调整后目标验证逻辑表达式是一种后缀表达式。

当然,也可以利用栈生成前缀表达式形式的调整后目标验证逻辑表达式。

其中,栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。

根据所有词法单元的运算顺序对所述目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式。

其中,在目标验证逻辑表达式中,算符类型的词法单元位于在两个操作量的中间,计算机无法直接确定这种词法单元的运算顺序,调整后目标验证逻辑表达式是一种没有分组算符的表达式,包括后缀表达式和前缀表达式,其中,在后缀表达式中,操作量类型的令牌在后,算符类型的令牌在前,计算机可以先读取需要进行运算的操作量类型的令牌,然后读取相应的算符类型的令牌,将前面的操作量做相应的计算,最终得到表达式的值。

在一些实施例中,所述根据所有词法单元的运算顺序对所述目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式,具体可以用如下步骤实现:

根据所有令牌在预设线性表中的存储位置,确定所述令牌对应的所有词法单元的运算顺序;

按照所述令牌对应的所有词法单元的运算顺序,将所述令牌进行组合,得到调整后目标验证逻辑表达式。

依次读取队列中的令牌,然后将队列中令牌的输出,作为调整后目标验证逻辑表达式。

在一实施例中,调整后目标验证逻辑表达式是一种后缀表达式。

105、基于所述调整后目标验证逻辑表达式对业务请求进行验证。

对调整后目标验证逻辑表达式进行运算求值,若运算结果为0,表示业务请求合理,若运算结果为1,表示业务请求不合理。

在一实施例中,若调整后目标验证逻辑表达式是一种后缀表达式,对所述后缀表达式求值,要从左至右读取后缀表达式,并依次运算。为了方便运算,在运算求值的过程中,可以利用栈暂时存储令牌。

在一实施例中,对调整后目标验证逻辑表达式进行运算求值具体可以通过如下步骤实现:按照调整后目标验证逻辑表达式中令牌的顺序,从左至右读取令牌,若令牌类型为操作量类型,则将令牌存储入栈,然后读取下一令牌。若令牌类型为算符类型,则将存储在栈顶的两个令牌(即当前算符类型的令牌之前的两个操作量类型的令牌)从栈中取出,根据令牌对应的词法单元进行计算,将计算所得的结果以词法单元的形式存储入栈中,直至读取完所有的令牌。最终栈中的词法单元即为运算结果。

在另一实施例中,调整后目标验证逻辑表达式是一种前缀表达式,计算时,需要从右至左读取令牌,并将算符类型的令牌的前两个令牌进行计算,其余步骤参见前面的实施例,不再赘述。

在另一实施例中,验证装置分别集成在离线服务器与在线服务器中进行不同的处理。

具体地,验证系统可以包括在线服务器、离线服务器、业务终端和管理终端。在联网状态下,离线服务器可以通过网络链接定时从管理终端中获取候选验证逻辑表达式,并将候选验证逻辑表达式存储在离线服务器的数据库中。在线服务器也可以定时通过网络链接从管理终端中获取并存储候选验证逻辑表达式。离线服务器可以通过远程过程调用(remoteprocedurecall),从业务终端中获取业务终端的业务请求及请求所需的信息。在联网状态下,离线服务器可以通过网络链接将业务请求及业务信息发送给在线服务器,在线服务器可以根据业务终端的业务请求,选择请求对应的初始验证逻辑表达式。在离线状态下,离线服务器可以根据业务终端的业务请求,选择请求对应的初始验证逻辑表达式。在离线状态和在线状态下,系统都可以根据业务终端的业务请求进行验证。

由上可知,本申请实施例可以获取业务请求对应的目标验证逻辑表达式,所述目标验证逻辑表达式包括多个字符;对所述目标验证逻辑表达式中字符进行词法单元划分;当每次划分得到词法单元时,对划分得到的当前词法单元进行语法分析,得到所述词法单元的运算顺序;根据所有词法单元的运算顺序对所述目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式;基于所述调整后目标验证逻辑表达式对业务请求进行验证。

由此,本申请实施例对目标验证逻辑表达式进行词法分析后,每得到一个词法单元,立即对得到的词法单元,进行类型确定和语法分析,并确定词法单元的运算顺序,无需等待词法划分全部完成,进行词法划分的同时可以进行语法分析,从而可以提高验证效率。

根据上述实施例所描述的方法,以下将作进一步详细说明。

在本实施例中,将以验证装置集成在服务器中,进行业务请求验证为例,对本发明实施例的方法进行详细说明。

参考图3,本发明实施例的验证方法的具体流程如下:

201、服务器获取业务请求对应的目标验证逻辑表达式。

服务器对所述目标验证逻辑表达式中的字符进行词法单元划分。

服务器可以根据目标验证逻辑表达式中字符的类型,将目标验证逻辑表达式中字符划分为词法单元。例如,参考图6a,目标验证逻辑表达式appid==“100000021”&&(cmd==19||cmd==17),经过词法划分,可以得到appid、==、100000021、&&、(、cmd等词法单元。

202、服务器对划分得到的当前词法单元进行语法分析,得到调整后目标验证逻辑表达式。

在本实施例中,为了可以减少对象创建,节省内存和时间,可以用令牌来表示词法单元,为了建立令牌与词法单元之间的表示关系,可以在划分得到词法单元时,立即通过查表确定词法单元的单元类型,参考图6a,appid为变量类型,&&为算符类型。预先定义一个令牌集合,并预先定义令牌集合内的令牌的类型,从令牌集合中选取未与词法单元建立表示关系的令牌,且令牌的类型与词法单元的单元类型相同的令牌,然后根据指向字符划分点的指针和词法单元的长度,确定令牌与词法单元的对应关系。

在本实施例中,可以利用栈来获得调整后的逻辑表达式,人工编辑的逻辑表达式一般是中缀表达式类型,计算机不容易计算中缀表达式类型的逻辑表达式,例如,目标验证逻辑表达式为appid==100000021&&(cmd==19||cmd==17),但是这种形式的表达式不容易被服务器解析和计算,因为服务器要先判断有无括号,再根据算符的优先级运算,在进行语法解析时,服务器可以利用栈进行括号的识别和算符优先级的判断,确定中缀表达式中每个算符的运算顺序,并生成后缀表达式。

上述操作具体可以通过如下步骤实现:服务器获取栈,将栈初始化,栈顶指针为空,遇到操作量类型的令牌appid,直接输出令牌,遇到算符类型的令牌==,入栈;遇到操作量类型的令牌100000021,输出令牌,遇到算符类型的令牌&&,比较栈顶的算符==与算符&&的运算优先级,算符&&的运算优先级小于算符==,输出算符&&,遇到分组算符“(”,将分组算符“(”入栈,遇到操作量cmd,输出操作量cmd,遇到算符类型的令牌==,比较算符类型的令牌==与栈顶令牌==的运算优先级,优先级相等,将令牌==入栈;最终遇到分组算符类型的令牌),将栈中分组算符“(”与“)”之间的令牌输出,最终得到调整后目标验证逻辑表达式appid100000021==19cmd==17cmd==||&&。

204、服务器基于所述调整后目标验证逻辑表达式对业务请求进行验证。

在本实施例中,服务器可以利用栈来对调整后目标验证逻辑表达式进行计算,具体步骤参见前面的实施例,不再赘述。

由上可知,本申请实施例可以获取业务请求对应的目标验证逻辑表达式,所述目标验证逻辑表达式包括多个字符;对所述目标验证逻辑表达式中字符进行词法单元划分;当每次划分得到词法单元时,对划分得到的当前词法单元进行语法分析,得到所述词法单元的运算顺序;根据所有词法单元的运算顺序对所述目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式;基于所述调整后目标验证逻辑表达式对业务请求进行验证。本申请实施例对目标验证逻辑表达式进行词法分析后,每得到一个词法单元,立即对得到的词法单元,进行类型确定和语法分析,并确定词法单元的运算顺序,无需等待词法划分全部完成,进行词法划分的同时可以进行语法分析,从而可以提高验证效率。

为了更好地实施以上方法,本申请实施例还提供一种验证装置,该验证装置具体可以集成在电子设备中,该电子设备可以为终端、服务器、个人电脑等设备。

比如,在本实施例中,将以验证装置集成在服务器中为例,对本发明实施例的方法进行详细说明。

例如,如图4a所示,该验证装置可以包括获取单元301、词法划分单元302、语法分析单元303、转换单元304以及运算单元305如下:

(一)获取单元301:

获取单元301,用于获取业务请求对应的目标验证逻辑表达式,目标验证逻辑表达式包括多个字符。

在一些实施例中,参考图4b,获取单元301可以包括接收子单元3011、选择子单元3012和更新子单元3013,如下:

接收子单元3011,用于接收终端发送的业务请求,该请求携带业务信息。

选择子单元3012,用于从用于验证的候选验证逻辑表达式中选择业务请求的初始验证逻辑表达式。

更新子单元3013,用于根据业务信息对初始验证逻辑表达式进行更新,得到目标验证逻辑表达式。

(二)词法划分单元302:

词法划分单元302,用于对目标验证逻辑表达式中字符进行词法单元划分。

在一些实施例中,词法划分单元302具体可以用于:

从目标验证逻辑表达式中读取当前字符,并确定当前字符的字符类型;

根据当前字符的字符类型,确定当前字符划分点;

基于当前字符划分点,对目标验证逻辑表达式中的字符进行词法单元划分。

(三)语法分析单元303:

语法分析单元303,用于当每次划分得到词法单元时,对划分得到的当前词法单元进行语法分析,得到词法单元的运算顺序。

在一些实施例中,参考图4c,语法分析单元303具体可以包括类型确定子单元3031、令牌选择子单元3032、位置确定子单元3033和运算顺序确定子单元3034。

类型确定子单元3031,用于当每次划分得到词法单元时,确定划分得到的当前词法单元的单元类型;

令牌选择子单元3032,用于根据当前词法单元的单元类型,从预设令牌集合中选择目标令牌表示当前词法单元;

位置确定子单元3033,用于基于目标令牌的类型、运算优先级、运算分组关系以及读取顺序,确定目标令牌在预设线性表中的存储位置;

运算顺序确定子单元3034,用于根据目标令牌在预设线性表中的存储位置,得到目标令牌运算顺序。

在一些实施例中,类型确定子单元3031具体可以用于:

当每次划分得到词法单元时,在预设二维算符表中查找划分得到的当前词法单元对应的算符,其中,预设二维算符表存储有预设算符;

当在预设二维算符表中查询到当前词法单元对应的算符,则确定当前词法单元的单元类型为算符单元类型;

当在预设二维算符表中未查询到词法单元对应的算符,则根据当前词法单元中字符的字符类型,确定当前词法单元的单元类型。

在一些实施例中,令牌选择子单元3032具体可以用于:

建立指向当前词法单元的字符划分点的当前指针;

从预设令牌集合中确定目标令牌,目标令牌的令牌类型与当前词法单元的单元类型相对应;

根据当前指针、当前词法单元的长度以使目标令牌表示当前词法单元。

在一些实施例中,位置确定子单元3033具体可以用于:

若目标令牌的类型为算符类型,则根据目标令牌的运算优先级、运算分组关系,确定目标令牌在预设线性表中的存储位置;

若目标令牌的类型为操作量类型,根据目标令牌的读取顺序,确定目标令牌在预设线性表中的存储位置。

(四)转换单元304:

转换单元304,用于根据所有词法单元的运算顺序对目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式。

在一些实施例中,转换单元304具体可以用于:

根据所有令牌在预设线性表中的存储位置,确定令牌对应的所有词法单元的运算顺序;

按照令牌对应的所有词法单元的运算顺序,将令牌进行组合,得到调整后目标验证逻辑表达式。

(五)运算单元305:

运算单元305,用于基于调整后目标验证逻辑表达式对业务请求进行验证。

对调整后目标验证逻辑表达式进行运算求值,若运算结果为0,表示业务请求合理,若运算结果为1,表示业务请求不合理。

具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。

由上可知,本申请实施例可以获取业务请求对应的目标验证逻辑表达式,所述目标验证逻辑表达式包括多个字符;对所述目标验证逻辑表达式中字符进行词法单元划分;当每次划分得到词法单元时,对划分得到的当前词法单元进行语法分析,得到所述词法单元的运算顺序;根据所有词法单元的运算顺序对所述目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式;基于所述调整后目标验证逻辑表达式对业务请求进行验证。

本申请实施例对目标验证逻辑表达式进行词法分析后,每得到一个词法单元,立即对得到的词法单元,进行类型确定和语法分析,并确定词法单元的运算顺序,无需等待词法划分全部完成,进行词法划分的同时可以进行语法分析,从而可以提高验证效率。

本申请实施例还提供一种服务器,该服务器可以是平板电脑、微型处理盒子、无人机、或者图像采集设备等等。如图5所示,其示出了本申请实施例所涉及的服务器的结构示意图,具体来讲:

该服务器可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403、输入模块404以及通信模块405等部件。本领域技术人员可以理解,图5中示出的服务器结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:

处理器401是该服务器的控制中心,利用各种接口和线路连接整个服务器的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行服务器的各种功能和处理数据,从而对服务器进行整体监控。在一些实施例中,处理器401可包括一个或多个处理核心;在一些实施例中,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。

存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据服务器的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。

服务器还包括给各个部件供电的电源403,在一些实施例中,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

该服务器还可包括输入模块404,该输入模块404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。

该服务器还可包括通信模块405,在一些实施例中,通信模块405可以包括无线子模块,服务器可以通过该通信模块405的无线子模块进行短距离无线传输,从而提供无线的宽带互联网访问。比如,该通信模块405可以用于帮助用户收发电子邮件、浏览网页和访问流式媒体等。

尽管未示出,服务器还可以包括显示单元等,在此不再赘述。具体在本实施例中,服务器中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:

获取业务请求对应的目标验证逻辑表达式,目标验证逻辑表达式包括多个字符;

对目标验证逻辑表达式中字符进行词法单元划分;

当每次划分得到词法单元时,对划分得到的当前词法单元进行语法分析,得到词法单元的运算顺序;

根据所有词法单元的运算顺序对目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式;

基于调整后目标验证逻辑表达式对业务请求进行验证。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

由上可知,本申请实施例可以获取业务请求对应的目标验证逻辑表达式,所述目标验证逻辑表达式包括多个字符;对所述目标验证逻辑表达式中字符进行词法单元划分;当每次划分得到词法单元时,对划分得到的当前词法单元进行语法分析,得到所述词法单元的运算顺序;根据所有词法单元的运算顺序对所述目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式;基于所述调整后目标验证逻辑表达式对业务请求进行验证。

由此,本申请实施例对目标验证逻辑表达式进行词法分析后,每得到一个词法单元,立即对得到的词法单元,进行类型确定和语法分析,并确定词法单元的运算顺序,无需等待词法划分全部完成,进行词法划分的同时可以进行语法分析,从而可以提高验证效率。

本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于计算机可读存储介质中,并由处理器进行加载和执行。

为此,本申请实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本申请实施例所提供的任一种验证方法中的步骤。例如,该指令可以执行如下步骤:

获取业务请求对应的目标验证逻辑表达式,目标验证逻辑表达式包括多个字符;

对目标验证逻辑表达式中字符进行词法单元划分;

当每次划分得到词法单元时,对划分得到的当前词法单元进行语法分析,得到词法单元的运算顺序;

根据所有词法单元的运算顺序对目标验证逻辑表达式进行调整,得到调整后目标验证逻辑表达式;

基于调整后目标验证逻辑表达式对业务请求进行验证。

其中,该存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取记忆体(ram,randomaccessmemory)、磁盘或光盘等。

由于该存储介质中所存储的指令,可以执行本申请实施例所提供的任一种验证方法中的步骤,因此,可以实现本申请实施例所提供的任一种验证方法所能实现的有益效果,详见前面的实施例,在此不再赘述。

以上对本申请实施例所提供的一种验证方法、装置、服务器以及存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1