CN111460815B - 规则处理方法、装置、介质及电子设备 - Google Patents
规则处理方法、装置、介质及电子设备 Download PDFInfo
- Publication number
- CN111460815B CN111460815B CN202010180995.XA CN202010180995A CN111460815B CN 111460815 B CN111460815 B CN 111460815B CN 202010180995 A CN202010180995 A CN 202010180995A CN 111460815 B CN111460815 B CN 111460815B
- Authority
- CN
- China
- Prior art keywords
- stack
- result
- elements
- temporary
- temporary stack
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Machine Translation (AREA)
Abstract
本公开涉及安全防护领域,揭示了一种基于逆波兰表达式的规则处理方法、装置、介质及电子设备。该方法包括:定义并初始化结果栈、第一临时栈和第二临时栈;对规则文本进行分词,得到前缀表达式;按照从左至右的顺序遍历前缀表达式,根据每次遍历的分词结果元素的类型执行相应的对分词结果元素的第一出入栈操作,得到后缀表达式,其中,第一出入栈操作与结果栈或第一临时栈对应;按照从左至右的顺序遍历后缀表达式,根据每次遍历得到的元素的类型执行相应的对元素或基于至少两个元素运算得到的结果的第二出入栈操作,得到最终运算结果,其中,所述第二出入栈操作与所述第二临时栈对应。此方法下,实现了对规则的高效计算,降低了安全风险。
Description
技术领域
本公开涉及安全防护技术领域,特别涉及一种基于逆波兰表达式的规则处理方法、装置、介质及电子设备。
背景技术
随着计算机技术的发展,越来越多的项目利用规则进行运算和事务处理。然而,传统规则复杂的表达形式并不适合计算机的处理,导致了规则的计算效率低下,不能满足人们对高效规则计算的需求,特别是在安全领域,由于规则计算效率越高,在一定程度上就越能增强防护的安全性并能避免损失,因此目前亟需一种实现对规则进行高效运算的方法。
发明内容
在安全防护技术领域,为了解决上述技术问题,本公开的目的在于提供一种基于逆波兰表达式的规则处理方法、装置、介质及电子设备。
根据本公开的一方面,提供了一种基于逆波兰表达式的规则处理方法,所述方法包括:
定义并初始化结果栈、第一临时栈和第二临时栈;
当接收到规则文本,对所述规则文本进行分词,得到前缀表达式,所述前缀表达式包括多个分词结果元素;
按照从左至右的顺序遍历所述前缀表达式,根据每一次遍历得到的分词结果元素的类型执行相应的对分词结果元素的第一出入栈操作,以得到后缀表达式,其中,所述第一出入栈操作与所述结果栈或所述第一临时栈对应,所述后缀表达式包括多个元素;
按照从左至右的顺序遍历所述后缀表达式,根据每一次遍历得到的元素的类型执行相应的对元素或基于至少两个元素运算得到的结果的第二出入栈操作,以得到对所述规则文本的最终运算结果,其中,所述第二出入栈操作与所述第二临时栈对应。
根据本公开的另一方面,提供了一种基于逆波兰表达式的规则处理装置,所述装置包括:
定义模块,被配置为定义并初始化结果栈、第一临时栈和第二临时栈;
分词模块,被配置为当接收到规则文本,对所述规则文本进行分词,得到前缀表达式,所述前缀表达式包括多个分词结果元素;
第一遍历模块,被配置为按照从左至右的顺序遍历所述前缀表达式,根据每一次遍历得到的分词结果元素的类型执行相应的对分词结果元素的第一出入栈操作,以得到后缀表达式,其中,所述第一出入栈操作与所述结果栈或所述第一临时栈对应,所述后缀表达式包括多个元素;
第二遍历模块,被配置为按照从左至右的顺序遍历所述后缀表达式,根据每一次遍历得到的元素的类型执行相应的对元素或基于至少两个元素运算得到的结果的第二出入栈操作,以得到对所述规则文本的最终运算结果,其中,所述第二出入栈操作与所述第二临时栈对应。
根据本公开的另一方面,提供了一种计算机可读程序介质,其存储有计算机程序指令,当所述计算机程序指令被计算机执行时,使计算机执行如前所述的方法。
根据本公开的另一方面,提供了一种电子设备,所述电子设备包括:
处理器;
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,实现如前所述的方法。
本公开的实施例提供的技术方案可以包括以下有益效果:
本公开所提供的基于逆波兰表达式的规则处理方法包括如下步骤:定义并初始化结果栈、第一临时栈和第二临时栈;当接收到规则文本,对所述规则文本进行分词,得到前缀表达式,所述前缀表达式包括多个分词结果元素;按照从左至右的顺序遍历所述前缀表达式,根据每一次遍历得到的分词结果元素的类型执行相应的对分词结果元素的第一出入栈操作,以得到后缀表达式,其中,所述第一出入栈操作与所述结果栈或所述第一临时栈对应,所述后缀表达式包括多个元素;按照从左至右的顺序遍历所述后缀表达式,根据每一次遍历得到的元素的类型执行相应的对元素或基于至少两个元素运算得到的结果的第二出入栈操作,以得到对所述规则文本的最终运算结果,其中,所述第二出入栈操作与所述第二临时栈对应。
此方法下,通过对逆波兰表达式做出改进,通过引入双栈的设计,将中间结果放入临时栈以辅助生成最终的结果栈,使改进后的逆波兰表达式可以用于复杂的规则计算,从而实现了对规则的高效计算,降低了安全风险。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的一种基于逆波兰表达式的规则处理方法的应用场景示意图;
图2是根据一示例性实施例示出的一种基于逆波兰表达式的规则处理方法的流程图;
图3是根据一示例性实施例示出的应用了基于逆波兰表达式的规则处理方法的规则引擎的处理过程示意图;
图4是根据一示例性实施例示出的一种基于逆波兰表达式的规则处理装置的框图;
图5是根据一示例性实施例示出的一种实现上述基于逆波兰表达式的规则处理方法的电子设备示例框图;
图6是根据一示例性实施例示出的一种实现上述基于逆波兰表达式的规则处理方法的计算机可读存储介质。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。
本公开首先提供了一种基于逆波兰表达式的规则处理方法。这里的规则可以是任何可以通过计算机指令的方式运行的可以依赖或者遵循的规定,它可以用来对对象的行为起到一定的约束作用。规则通常由符号、数字等组成,一个规则可以是一个判断语句,也可以是一个计算表达式。逆波兰表达式又叫做后缀表达式,通过逆波兰表达式来表示一个表达式,可以使每一运算符都置于其运算对象或者运算量之后。
本公开的实施终端可以是任何具有运算和处理功能的设备,该设备可以与外部设备相连,用于接收或者发送数据,具体可以是便携移动设备,例如智能手机、平板电脑、笔记本电脑、PDA(Personal Digital Assistant)等,也可以是固定式设备,例如,计算机设备、现场终端、台式电脑、服务器、工作站等,还可以是多个设备的集合,比如云计算的物理基础设施或者服务器集群。
可选地,本公开的实施终端可以为服务器或者云计算的物理基础设施。
图1是根据一示例性实施例示出的一种基于逆波兰表达式的规则处理方法的应用场景示意图。如图1所示,包括服务器110和多个用户终端120,多个用户终端120分别通过通信链路与服务器110相连,可以接收服务器110发来的数据并可以向服务器110发送数据。在本实施例中,服务器110为本公开的实施终端,多个用户终端120均可以通过通信链路对服务器110进行访问,服务器110上运行有规则引擎,当运行该规则引擎时,可以执行本公开实施例提供的基于逆波兰表达式的规则处理方法。多个用户终端120对服务器110进行访问时,需要在服务器110设置一定的规则来对用户终端120的访问行为进行约束,而通过在服务器110上执行本公开实施例提供的基于逆波兰表达式的规则处理方法,可以实现对用于约束用户终端120的访问行为的规则的高效计算,从而可以提高计算效率,提高安全性。
值得一提的是,图1仅为本公开的一个实施例。虽然在本实施例中的实施终端为服务器,但在其他实施例中,实施终端可以为如前所述的各种终端或设备;虽然在本实施例中规则是用于对其他终端的访问行为进行判断,但在其他实施例或者具体应用中,规则还可以用于对本端的处理流程进行判断,即规则的运行可以不依赖于外部的交互行为。本公开对此不作任何限定,本公开的保护范围也不应因此而受到任何限制。
图2是根据一示例性实施例示出的一种基于逆波兰表达式的规则处理方法的流程图。本实施例的基于逆波兰表达式的规则处理方法可以由服务器执行,如图2所示,包括以下步骤:
步骤210,定义并初始化结果栈、第一临时栈和第二临时栈。
结果栈、第一临时栈和第二临时栈均为栈。
栈又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。由此可见,堆栈是一种数据项按序排列的数据结构,只能在栈顶对数据项进行插入和删除。堆栈中的元素按照“先进后出”的原则存取。
在一个实施例中,所述定义并初始化结果栈、第一临时栈和第二临时栈,包括:
分别为结果栈、第一临时栈和第二临时栈申请内存空间。
在一个实施例中,在分别为结果栈、第一临时栈和第二临时栈申请内存空间之前,所述方法包括:
分别获取要为结果栈、第一临时栈和第二临时栈申请的内存空间的大小;
所述分别为结果栈、第一临时栈和第二临时栈申请内存空间,包括:
按照各栈要申请的内存空间的大小,分别为结果栈、第一临时栈和第二临时栈申请内存空间。
步骤220,当接收到规则文本,对所述规则文本进行分词,得到前缀表达式。
所述前缀表达式包括多个分词结果元素。
规则文本是用于描述一条或多条规则的文本,可以是布尔型规则,亦可以为数值型规则、字符型规则、分支型规则等。
规则文本的用途可以是多种多样的。比如,规则文本具体可以是风控规则文本,用于金融等领域的风险控制和防范。
布尔型规则处理的值都是离散的、种类化的,它显示了这些变量之间的关系,比如可以包含量的等于、不等于、包含、不包含等关系。而数值型规则一般对数值型字段进行处理,可以包括例如加、减、乘、除等运算过程。
针对不同类型的规则文本可以采用不同的分词算法进行分词。
前缀表达式是一种没有括号的算术表达式,其将运算符写在前面,操作数写在后面,其中每一运算符或操作数即为一个分词结果元素。
规则文本可以由本公开的实施终端在本地直接读取得到,也可以从其他终端接收得到,即可以通过传输介质从外部终端获得。
步骤230,按照从左至右的顺序遍历所述前缀表达式,根据每一次遍历得到的分词结果元素的类型执行相应的对分词结果元素的第一出入栈操作,以得到后缀表达式。
其中,所述第一出入栈操作与所述结果栈或所述第一临时栈对应,所述后缀表达式包括多个元素。
在一个实施例中,所述规则文本为布尔型规则,所述按照从左至右的顺序遍历所述前缀表达式,根据每一次遍历得到的分词结果元素的类型执行相应的对分词结果元素的第一出入栈操作,以得到后缀表达式,包括:
执行第一遍历步骤,所述第一遍历步骤包括:按照从左至右的顺序获取第一个分词结果元素,作为当前分词结果元素;
若当前分词结果元素为左小括号,则将所述当前分词结果元素放入所述第一临时栈并转至所述第一遍历步骤;
若当前分词结果元素为左大括号,则将所述当前分词结果元素分别放入所述结果栈和所述第一临时栈并转至所述第一遍历步骤;
若当前分词结果元素为数值类型、参数类型、字符类型中的一种,则将所述当前分词结果元素放入所述结果栈并转至所述第一遍历步骤;
若当前分词结果元素为右大括号,则将所述第一临时栈中的元素依次弹出,放入所述结果栈,直至将所述第一临时栈中的左大括号弹出并放入所述结果栈,然后转至所述第一遍历步骤;
若当前分词结果元素为空格,则将所述第一临时栈中的元素依次弹出,放入所述结果栈,直至将所述第一临时栈中的左大括号弹出并放入所述结果栈,然后转至所述第一遍历步骤;
若当前分词结果元素为右小括号,则将所述第一临时栈中的元素依次弹出,放入所述结果栈,直至将所述第一临时栈中的左小括号弹出并放入所述结果栈,然后转至所述第一遍历步骤;
若当前分词结果元素的类型为运算符,确定所述运算符的优先级;
若所述优先级小于0,则将所述运算符放入所述第一临时栈并转至所述第一遍历步骤;
若所述优先级大于或等于0,则将所述运算符放入所述结果栈并将所述第一临时栈的元素依次弹出,放入所述结果栈,直到上次从所述第一临时栈弹出的元素为右大括号或者所述运算符的优先级大于下次要从所述第一临时栈弹出的元素的优先级,然后转至所述第一遍历步骤;
否则,将所述当前分词结果元素放入所述第一临时栈,然后转至所述第一遍历步骤;
当所述前缀表达式的所有分词结果元素均经过了一次遍历,将所述第一临时栈中的元素依次弹出,放入所述结果栈,并将所述结果栈中的元素依次弹出,得到后缀表达式。
在一个表达式中可能包含多个由不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。运算符的优先级的设置使表达式能够被正确运算。
比如,运算符可以包括=、≠、>、<、||、&&、!+、-、*、/、求和运算符、求平均值运算符等,其中,||、&&、!的优先级可以等于0,求和运算符、求平均值运算符的优先级可以小于0,其他运算符的优先级可以大于0。
在一个实施例中,所述规则文本为数值型规则,所述按照从左至右的顺序遍历所述前缀表达式,根据每一次遍历得到的分词结果元素的类型执行相应的对分词结果元素的第一出入栈操作,以得到后缀表达式,包括:
执行第二遍历步骤,所述第二遍历步骤包括:按照从左至右的顺序获取第一个分词结果元素,作为当前分词结果元素;
若当前分词结果元素为左小括号,则将所述当前分词结果元素放入所述第一临时栈并转至所述第二遍历步骤;
若当前分词结果元素为左大括号,则将所述当前分词结果元素分别放入所述结果栈和所述第一临时栈并转至所述第二遍历步骤;
若当前分词结果元素为数值类型或者参数类型,则将所述当前分词结果元素放入所述结果栈并转至所述第二遍历步骤;
若当前分词结果元素为右大括号,则将所述第一临时栈中的元素依次弹出,放入所述结果栈,直至将所述第一临时栈中的左大括号弹出并放入所述结果栈,然后转至所述第二遍历步骤;
若当前分词结果元素为空格,则将所述第一临时栈中的元素依次弹出,放入所述结果栈,直至将所述第一临时栈中的左大括号弹出并放入所述结果栈,然后转至所述第二遍历步骤;
若当前分词结果元素为右小括号,则将所述第一临时栈中的元素依次弹出,放入所述结果栈,直至将所述第一临时栈中的左小括号弹出并放入所述结果栈,然后转至所述第二遍历步骤;
若当前分词结果元素的类型为运算符,确定所述运算符的优先级;
若所述优先级小于0,则将所述运算符放入所述第一临时栈并转至所述第二遍历步骤;
若所述优先级大于或等于0,则将所述运算符放入所述结果栈并将所述第一临时栈的元素依次弹出,放入所述结果栈,直到上次从所述第一临时栈弹出的元素为右大括号或者所述运算符的优先级大于下次要从所述第一临时栈弹出的元素的优先级,然后转至所述第二遍历步骤;
否则,将所述当前分词结果元素放入所述第一临时栈,然后转至所述第二遍历步骤;
当所述前缀表达式的所有分词结果元素均经过了一次遍历,将所述第一临时栈中的元素依次弹出,放入所述结果栈,并将所述结果栈中的元素依次弹出,得到后缀表达式。
步骤240,按照从左至右的顺序遍历所述后缀表达式,根据每一次遍历得到的元素的类型执行相应的对元素或基于至少两个元素运算得到的结果的第二出入栈操作,以得到对所述规则文本的最终运算结果。
其中,所述第二出入栈操作与所述第二临时栈对应。
在一个实施例中,所述规则文本为布尔型规则,所述按照从左至右的顺序遍历所述后缀表达式,根据每一次遍历得到的元素的类型执行相应的对元素或基于至少两个元素运算得到的结果的第二出入栈操作,以得到对所述规则文本的最终运算结果,包括:
执行第三遍历步骤,所述第三遍历步骤包括:按照从左至右的顺序获取所述后缀表达式的第一个元素,作为当前元素;
若当前元素为字符串或左大括号,则将所述当前元素放入所述第二临时栈并转至所述第三遍历步骤;
若当前元素为数值类型,则将所述当前元素放入所述第二临时栈并转至所述第三遍历步骤;
若当前元素为运算符,确定所述运算符的优先级;
若所述优先级小于0,则将所述第二临时栈中的元素依次弹出,作为第一元素,直至下次要弹出的元素为左大括号;
利用所述运算符和所述第一元素计算出第一结果,并将所述第一结果放入所述第二临时栈,然后转至所述第三遍历步骤;
若所述优先级大于或等于0,则从所述第二临时栈中弹出两个元素,作为第二元素;
利用所述运算符和所述第二元素计算出第二结果,并将所述第二结果放入所述第二临时栈,然后转至所述第三遍历步骤;
当所述后缀表达式的所有元素均经过了一次遍历,将所述第二临时栈中的第一个元素弹出,作为对所述规则文本的最终运算结果。
在一个实施例中,所述规则文本为数值型规则,所述按照从左至右的顺序遍历所述后缀表达式,根据每一次遍历得到的元素的类型执行相应的对元素或基于至少两个元素运算得到的结果的第二出入栈操作,以得到对所述规则文本的最终运算结果,包括:
执行第四遍历步骤,所述第四遍历步骤包括:按照从左至右的顺序获取所述后缀表达式的第一个元素,作为当前元素;
若当前元素为字符串或左大括号,则将所述当前元素放入所述第二临时栈并转至所述第四遍历步骤;
若当前元素为数值类型,则将所述当前元素放入所述第二临时栈并转至所述第四遍历步骤;
若当前元素为运算符,确定所述运算符的优先级;
若所述优先级小于0,则将所述第二临时栈中的元素依次弹出,作为第三元素,直至下次要弹出的元素为左大括号;
利用所述运算符和所述第三元素计算出第三结果,并将所述第三结果放入所述第二临时栈,然后转至所述第四遍历步骤;
若所述优先级大于0,则从所述第二临时栈中弹出两个元素,作为第四元素;
利用所述运算符和所述第四元素计算出第四结果,并将所述第四结果放入所述第二临时栈,然后转至所述第四遍历步骤;
当所述后缀表达式的所有元素均经过了一次遍历,将所述第二临时栈中的第一个元素弹出,作为对所述规则文本的最终运算结果。
综上所述,根据图2实施例提供的基于逆波兰表达式的规则处理方法,通过对逆波兰表达式做出改进,通过引入双栈的设计,将中间结果放入临时栈以辅助生成最终的结果栈,使改进后的逆波兰表达式可以用于复杂的规则计算,从而实现了对规则的高效计算,降低了安全风险。
本公开实施例提供的基于逆波兰表达式的规则处理方法可以以规则引擎的方式运行。图3是根据一示例性实施例示出的应用了基于逆波兰表达式的规则处理方法的规则引擎的处理过程示意图。
如图3所示,该处理过程具体可以为:首先,由规则引擎获取一段规则文本,该规则文本可以是布尔、字符、数值、分支等类型的表达式;接下来,对该规则文本进行分词,可以针对不同类型的表达式使用不同的分词算法;然后,要将分词的结果(前缀表达式)转换为后缀表达式,此过程的实现依赖于双栈的设计,即依赖于结果栈和第一临时栈;接着,要基于后缀表达式得到最终运算结果,此过程包括弹出元素、运算符进行计算,并将中间计算结果入栈等操作,依赖于第二临时栈;最后,取出第二临时栈的栈顶元素,作为对规则文本的最终运算结果输出,从而完成对规则文本的运算。
本公开还提供了一种基于逆波兰表达式的规则处理装置,以下是本公开的装置实施例。
图4是根据一示例性实施例示出的一种基于逆波兰表达式的规则处理装置的框图。如图4所示,装置400包括:
定义模块410,被配置为定义并初始化结果栈、第一临时栈和第二临时栈;
分词模块420,被配置为当接收到规则文本,对所述规则文本进行分词,得到前缀表达式,所述前缀表达式包括多个分词结果元素;
第一遍历模块430,被配置为按照从左至右的顺序遍历所述前缀表达式,根据每一次遍历得到的分词结果元素的类型执行相应的对分词结果元素的第一出入栈操作,以得到后缀表达式,其中,所述第一出入栈操作与所述结果栈或所述第一临时栈对应,所述后缀表达式包括多个元素;
第二遍历模块440,被配置为按照从左至右的顺序遍历所述后缀表达式,根据每一次遍历得到的元素的类型执行相应的对元素或基于至少两个元素运算得到的结果的第二出入栈操作,以得到对所述规则文本的最终运算结果,其中,所述第二出入栈操作与所述第二临时栈对应。
根据本公开的第三方面,还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
下面参照图5来描述根据本发明的这种实施方式的电子设备500。图5显示的电子设备500仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图5所示,电子设备500以通用计算设备的形式表现。电子设备500的组件可以包括但不限于:上述至少一个处理单元510、上述至少一个存储单元520、连接不同系统组件(包括存储单元520和处理单元510)的总线530。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元510执行,使得所述处理单元510执行本说明书上述“实施例方法”部分中描述的根据本发明各种示例性实施方式的步骤。
存储单元520可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)521和/或高速缓存存储单元522,还可以进一步包括只读存储单元(ROM)523。
存储单元520还可以包括具有一组(至少一个)程序模块525的程序/实用工具524,这样的程序模块525包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线530可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备500也可以与一个或多个外部设备700(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备500交互的设备通信,和/或与使得该电子设备500能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口550进行。并且,电子设备500还可以通过网络适配器560与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器560通过总线530与电子设备500的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备500使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。
根据本公开的第四方面,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。
参考图6所示,描述了根据本发明的实施方式的用于实现上述方法的程序产品600,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围执行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
Claims (9)
1.一种基于逆波兰表达式的规则处理方法,其特征在于,所述方法包括:
定义并初始化结果栈、第一临时栈和第二临时栈;
当接收到规则文本,对所述规则文本进行分词,得到前缀表达式,所述前缀表达式包括多个分词结果元素;
按照从左至右的顺序遍历所述前缀表达式,根据每一次遍历得到的分词结果元素的类型执行相应的对分词结果元素的第一出入栈操作,以得到后缀表达式,其中,所述第一出入栈操作与所述结果栈或所述第一临时栈对应,所述后缀表达式包括多个元素;
按照从左至右的顺序遍历所述后缀表达式,根据每一次遍历得到的元素的类型执行相应的对元素或基于至少两个元素运算得到的结果的第二出入栈操作,以得到对所述规则文本的最终运算结果,其中,所述第二出入栈操作与所述第二临时栈对应。
2.根据权利要求1所述的方法,其特征在于,所述定义并初始化结果栈、第一临时栈和第二临时栈包括:
分别为结果栈、第一临时栈和第二临时栈申请内存空间。
3.根据权利要求1所述的方法,其特征在于,所述规则文本为布尔型规则,所述按照从左至右的顺序遍历所述前缀表达式,根据每一次遍历得到的分词结果元素的类型执行相应的对分词结果元素的第一出入栈操作,以得到后缀表达式,包括:
执行第一遍历步骤,所述第一遍历步骤包括:按照从左至右的顺序获取第一个分词结果元素,作为当前分词结果元素;
若当前分词结果元素为左小括号,则将所述当前分词结果元素放入所述第一临时栈并转至所述第一遍历步骤;
若当前分词结果元素为左大括号,则将所述当前分词结果元素分别放入所述结果栈和所述第一临时栈并转至所述第一遍历步骤;
若当前分词结果元素为数值类型、参数类型、字符类型中的一种,则将所述当前分词结果元素放入所述结果栈并转至所述第一遍历步骤;
若当前分词结果元素为右大括号,则将所述第一临时栈中的元素依次弹出,放入所述结果栈,直至将所述第一临时栈中的左大括号弹出并放入所述结果栈,然后转至所述第一遍历步骤;
若当前分词结果元素为空格,则将所述第一临时栈中的元素依次弹出,放入所述结果栈,直至将所述第一临时栈中的左大括号弹出并放入所述结果栈,然后转至所述第一遍历步骤;
若当前分词结果元素为右小括号,则将所述第一临时栈中的元素依次弹出,放入所述结果栈,直至将所述第一临时栈中的左小括号弹出并放入所述结果栈,然后转至所述第一遍历步骤;
若当前分词结果元素的类型为运算符,确定所述运算符的优先级;
若所述优先级小于0,则将所述运算符放入所述第一临时栈并转至所述第一遍历步骤;
若所述优先级大于或等于0,则将所述运算符放入所述结果栈并将所述第一临时栈的元素依次弹出,放入所述结果栈,直到上次从所述第一临时栈弹出的元素为右大括号或者所述运算符的优先级大于下次要从所述第一临时栈弹出的元素的优先级,然后转至所述第一遍历步骤;
否则,将所述当前分词结果元素放入所述第一临时栈,然后转至所述第一遍历步骤;
当所述前缀表达式的所有分词结果元素均经过了一次遍历,将所述第一临时栈中的元素依次弹出,放入所述结果栈,并将所述结果栈中的元素依次弹出,得到后缀表达式。
4.根据权利要求1所述的方法,其特征在于,所述规则文本为数值型规则,所述按照从左至右的顺序遍历所述前缀表达式,根据每一次遍历得到的分词结果元素的类型执行相应的对分词结果元素的第一出入栈操作,以得到后缀表达式,包括:
执行第二遍历步骤,所述第二遍历步骤包括:按照从左至右的顺序获取第一个分词结果元素,作为当前分词结果元素;
若当前分词结果元素为左小括号,则将所述当前分词结果元素放入所述第一临时栈并转至所述第二遍历步骤;
若当前分词结果元素为左大括号,则将所述当前分词结果元素分别放入所述结果栈和所述第一临时栈并转至所述第二遍历步骤;
若当前分词结果元素为数值类型或者参数类型,则将所述当前分词结果元素放入所述结果栈并转至所述第二遍历步骤;
若当前分词结果元素为右大括号,则将所述第一临时栈中的元素依次弹出,放入所述结果栈,直至将所述第一临时栈中的左大括号弹出并放入所述结果栈,然后转至所述第二遍历步骤;
若当前分词结果元素为空格,则将所述第一临时栈中的元素依次弹出,放入所述结果栈,直至将所述第一临时栈中的左大括号弹出并放入所述结果栈,然后转至所述第二遍历步骤;
若当前分词结果元素为右小括号,则将所述第一临时栈中的元素依次弹出,放入所述结果栈,直至将所述第一临时栈中的左小括号弹出并放入所述结果栈,然后转至所述第二遍历步骤;
若当前分词结果元素的类型为运算符,确定所述运算符的优先级;
若所述优先级小于0,则将所述运算符放入所述第一临时栈并转至所述第二遍历步骤;
若所述优先级大于或等于0,则将所述运算符放入所述结果栈并将所述第一临时栈的元素依次弹出,放入所述结果栈,直到上次从所述第一临时栈弹出的元素为右大括号或者所述运算符的优先级大于下次要从所述第一临时栈弹出的元素的优先级,然后转至所述第二遍历步骤;
否则,将所述当前分词结果元素放入所述第一临时栈,然后转至所述第二遍历步骤;
当所述前缀表达式的所有分词结果元素均经过了一次遍历,将所述第一临时栈中的元素依次弹出,放入所述结果栈,并将所述结果栈中的元素依次弹出,得到后缀表达式。
5.根据权利要求1或3所述的方法,其特征在于,所述规则文本为布尔型规则,所述按照从左至右的顺序遍历所述后缀表达式,根据每一次遍历得到的元素的类型执行相应的对元素或基于至少两个元素运算得到的结果的第二出入栈操作,以得到对所述规则文本的最终运算结果,包括:
执行第三遍历步骤,所述第三遍历步骤包括:按照从左至右的顺序获取所述后缀表达式的第一个元素,作为当前元素;
若当前元素为字符串或左大括号,则将所述当前元素放入所述第二临时栈并转至所述第三遍历步骤;
若当前元素为数值类型,则将所述当前元素放入所述第二临时栈并转至所述第三遍历步骤;
若当前元素为运算符,确定所述运算符的优先级;
若所述优先级小于0,则将所述第二临时栈中的元素依次弹出,作为第一元素,直至下次要弹出的元素为左大括号;
利用所述运算符和所述第一元素计算出第一结果,并将所述第一结果放入所述第二临时栈,然后转至所述第三遍历步骤;
若所述优先级大于或等于0,则从所述第二临时栈中弹出两个元素,作为第二元素;
利用所述运算符和所述第二元素计算出第二结果,并将所述第二结果放入所述第二临时栈,然后转至所述第三遍历步骤;
当所述后缀表达式的所有元素均经过了一次遍历,将所述第二临时栈中的第一个元素弹出,作为对所述规则文本的最终运算结果。
6.根据权利要求1或4所述的方法,其特征在于,所述规则文本为数值型规则,所述按照从左至右的顺序遍历所述后缀表达式,根据每一次遍历得到的元素的类型执行相应的对元素或基于至少两个元素运算得到的结果的第二出入栈操作,以得到对所述规则文本的最终运算结果,包括:
执行第四遍历步骤,所述第四遍历步骤包括:按照从左至右的顺序获取所述后缀表达式的第一个元素,作为当前元素;
若当前元素为字符串或左大括号,则将所述当前元素放入所述第二临时栈并转至所述第四遍历步骤;
若当前元素为数值类型,则将所述当前元素放入所述第二临时栈并转至所述第四遍历步骤;
若当前元素为运算符,确定所述运算符的优先级;
若所述优先级小于0,则将所述第二临时栈中的元素依次弹出,作为第三元素,直至下次要弹出的元素为左大括号;
利用所述运算符和所述第三元素计算出第三结果,并将所述第三结果放入所述第二临时栈,然后转至所述第四遍历步骤;
若所述优先级大于0,则从所述第二临时栈中弹出两个元素,作为第四元素;
利用所述运算符和所述第四元素计算出第四结果,并将所述第四结果放入所述第二临时栈,然后转至所述第四遍历步骤;
当所述后缀表达式的所有元素均经过了一次遍历,将所述第二临时栈中的第一个元素弹出,作为对所述规则文本的最终运算结果。
7.一种基于逆波兰表达式的规则处理装置,其特征在于,所述装置包括:
定义模块,被配置为定义并初始化结果栈、第一临时栈和第二临时栈;
分词模块,被配置为当接收到规则文本,对所述规则文本进行分词,得到前缀表达式,所述前缀表达式包括多个分词结果元素;
第一遍历模块,被配置为按照从左至右的顺序遍历所述前缀表达式,根据每一次遍历得到的分词结果元素的类型执行相应的对分词结果元素的第一出入栈操作,以得到后缀表达式,其中,所述第一出入栈操作与所述结果栈或所述第一临时栈对应,所述后缀表达式包括多个元素;
第二遍历模块,被配置为按照从左至右的顺序遍历所述后缀表达式,根据每一次遍历得到的元素的类型执行相应的对元素或基于至少两个元素运算得到的结果的第二出入栈操作,以得到对所述规则文本的最终运算结果,其中,所述第二出入栈操作与所述第二临时栈对应。
8.一种计算机可读程序介质,其特征在于,其存储有计算机程序指令,当所述计算机程序指令被计算机执行时,使计算机执行根据权利要求1至6中任一项所述的方法。
9.一种电子设备,其特征在于,所述电子设备包括:
处理器;
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,实现如权利要求1至6任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010180995.XA CN111460815B (zh) | 2020-03-16 | 2020-03-16 | 规则处理方法、装置、介质及电子设备 |
PCT/CN2020/124732 WO2021184765A1 (zh) | 2020-03-16 | 2020-10-29 | 规则处理方法、装置、介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010180995.XA CN111460815B (zh) | 2020-03-16 | 2020-03-16 | 规则处理方法、装置、介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111460815A CN111460815A (zh) | 2020-07-28 |
CN111460815B true CN111460815B (zh) | 2022-04-01 |
Family
ID=71682850
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010180995.XA Active CN111460815B (zh) | 2020-03-16 | 2020-03-16 | 规则处理方法、装置、介质及电子设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN111460815B (zh) |
WO (1) | WO2021184765A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111460815B (zh) * | 2020-03-16 | 2022-04-01 | 平安科技(深圳)有限公司 | 规则处理方法、装置、介质及电子设备 |
CN113760367B (zh) * | 2021-09-10 | 2024-05-14 | 深圳平安医疗健康科技服务有限公司 | 一种数据处理方法、装置、电子设备以及存储介质 |
CN115268936B (zh) * | 2022-09-27 | 2022-12-27 | 之江实验室 | 一种用于计算图编译的优化方法及装置 |
CN115796166B (zh) * | 2023-02-06 | 2023-05-09 | 华侨大学 | 一种智慧物流控制系统的正则表达式测试方法和系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692585A (zh) * | 2009-10-16 | 2010-04-07 | 国电南京自动化股份有限公司 | 变电站自动化系统的防误闭锁系统 |
CN105677528A (zh) * | 2016-01-06 | 2016-06-15 | 长园共创电力安全技术股份有限公司 | 通过逆波兰表达式对五防逻辑表达式进行校验的方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2896601B1 (fr) * | 2006-01-24 | 2008-08-15 | Atmel Nantes Sa | Dispositif de traitement en notation polonaise inversee, et circuit integre electronique comprenant un tel dispositif de traitement. |
US8782599B2 (en) * | 2008-06-26 | 2014-07-15 | Invensys Systems, Inc. | Multi-mode editor for configuring process control blocks including both logical functions and arithmetic computations |
GB2502565A (en) * | 2012-05-31 | 2013-12-04 | Ibm | Providing event-processing rules in an event-processing environment |
CN110489965B (zh) * | 2018-07-14 | 2022-01-28 | 北京数安鑫云信息技术有限公司 | 一种深度威胁识别实时引擎的实现方法及系统 |
CN109766524B (zh) * | 2018-12-28 | 2022-11-25 | 重庆邮电大学 | 一种并购重组类公告信息抽取方法及系统 |
CN111460815B (zh) * | 2020-03-16 | 2022-04-01 | 平安科技(深圳)有限公司 | 规则处理方法、装置、介质及电子设备 |
-
2020
- 2020-03-16 CN CN202010180995.XA patent/CN111460815B/zh active Active
- 2020-10-29 WO PCT/CN2020/124732 patent/WO2021184765A1/zh active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692585A (zh) * | 2009-10-16 | 2010-04-07 | 国电南京自动化股份有限公司 | 变电站自动化系统的防误闭锁系统 |
CN105677528A (zh) * | 2016-01-06 | 2016-06-15 | 长园共创电力安全技术股份有限公司 | 通过逆波兰表达式对五防逻辑表达式进行校验的方法 |
Non-Patent Citations (5)
Title |
---|
Beniamino Di Martino et al..Recognition of dynamic Data structures to support porting of applications to the Cloud.《2015 IEEE International Conference on Computer and Information Technology * |
Dependable, Autonomic and Secure Computing * |
Pervasive Intelligence and Computing》.2015,第2365-2372页. * |
Ubiquitous Computing and Communications * |
一种前缀表达式直接转换为后缀表达式的算法;沈华;《电脑编程技巧与维护》;20130131(第2期);第12-14页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111460815A (zh) | 2020-07-28 |
WO2021184765A1 (zh) | 2021-09-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111460815B (zh) | 规则处理方法、装置、介质及电子设备 | |
CN111242164A (zh) | 一种决策结果的确定方法、装置及设备 | |
CN111078228A (zh) | 网页到小程序的转换方法、装置、服务器及存储介质 | |
CN111078230A (zh) | 一种代码生成方法和装置 | |
CN114443076A (zh) | 镜像构建方法、装置、设备及存储介质 | |
CN107729347B (zh) | 同义标签的获取方法、装置、设备及计算机可读存储介质 | |
WO2018217369A1 (en) | Data packing techniques for hard-wired multiplier circuits | |
US20230141932A1 (en) | Method and apparatus for question answering based on table, and electronic device | |
CN111966473A (zh) | 一种线性回归任务的运行方法及装置、电子设备 | |
CN111767498A (zh) | 一种实现文件信息共享的方法和装置 | |
CN111143461A (zh) | 映射关系处理系统、方法和电子设备 | |
CN116263690A (zh) | 虚拟机从外部系统读取数据及相关写出数据的方法和装置 | |
US9921814B2 (en) | Control flow graph analysis | |
CN110795424B (zh) | 特征工程变量数据请求处理方法、装置及电子设备 | |
CN109656728A (zh) | 页面数据操作方法、装置、设备及介质 | |
CN113778401A (zh) | 一种页面生成的方法和装置 | |
CN112286619B (zh) | 用于数据驱动界面呈现的方法、电子设备和存储介质 | |
CN115563183B (zh) | 查询方法、装置及程序产品 | |
CN113031962B (zh) | 编译方法、编译装置、电子设备、存储介质和程序产品 | |
CN110192180B (zh) | 处理到间接指定位置的条件分支的方法和计算机系统 | |
CN115034198B (zh) | 语言模型中嵌入模块计算优化的方法 | |
US20210286680A1 (en) | Method, electronic device and computer program product for storage management | |
CN112925573B (zh) | 网页加载的方法、装置、设备和计算机可读介质 | |
CN112463214B (zh) | 数据处理方法及装置、计算机可读存储介质以及电子设备 | |
Milutinovic et al. | Polynomial and rational functions |
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 |