CN109947419B - 一种实现逻辑判断的方法及装置 - Google Patents
一种实现逻辑判断的方法及装置 Download PDFInfo
- Publication number
- CN109947419B CN109947419B CN201910250772.3A CN201910250772A CN109947419B CN 109947419 B CN109947419 B CN 109947419B CN 201910250772 A CN201910250772 A CN 201910250772A CN 109947419 B CN109947419 B CN 109947419B
- Authority
- CN
- China
- Prior art keywords
- target
- variable
- judgment
- assignment
- statement
- 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
Landscapes
- Stored Programmes (AREA)
- Machine Translation (AREA)
Abstract
本发明实施例公开了一种实现逻辑判断的方法及装置,该方法包括:获取目标判断语句中各个变量对应的赋值;判断目标判断语句的各个变量是否均存在对应的赋值;当目标判断语句中存在至少一个没有对应赋值的变量时,将预设参数赋予每个没有对应赋值的变量;当目标判断语句中各个变量均存在对应的赋值时,基于目标判断语句的判断逻辑,利用各个变量对应的赋值得到目标判断语句的输出。在目标判断语句中参与判断的变量未完整获取时,仍可以保证逻辑判断的进行,保证了整个系统流程的流畅,降低了逻辑判断的要求,使得开发过程更加灵活。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种实现逻辑判断的方法及装置。
背景技术
在系统的开发过程中,经常会遇到大量的逻辑判断过程。无论是在产品本身的规则还是流程的分支中,均依赖逻辑判断决定产品的规则判断和流程走向。
目前,在进行逻辑判断时,系统会首先整合所有参与判断的变量,再根据相应的逻辑对参与判断的变量进行运算实现相应的逻辑判断功能。一旦参与判断的变量获取的不完整,就会导致整个逻辑判断无法进行,阻断整个系统流程。
发明内容
有鉴于此,本申请实施例提供了一种实现逻辑判断的方法及装置,能够解决现有技术中参与判断的变量无法完整获取,导致逻辑判断无法实现,阻断系统流程的问题。
第一方面,本申请实施例提供了一种实现逻辑判断的方法,包括:
获取目标判断语句中各个变量对应的赋值;
判断所述目标判断语句的各个变量是否均存在对应的赋值;
当所述目标判断语句中存在至少一个没有对应赋值的变量时,将预设参数赋予每个没有对应赋值的变量;
当所述目标判断语句中各个变量均存在对应的赋值时,基于所述目标判断语句的判断逻辑,利用所述各个变量对应的赋值得到所述目标判断语句的输出。
可选的,所述预设参数为空值或者预设标识。
可选的,所述利用所述各个变量对应的赋值得到所述目标判断语句的输出,包括:
当所述预设参数为预设标识时,判断所述各个变量对应的赋值是否为所述预设标识;
当存在至少一个所述变量对应的赋值为所述预设标识时,输出错误标识作为所述目标判断语句的逻辑判断结果。
可选的,在所述获取目标判断语句中各个变量对应的赋值的步骤之前,所述方法还包括:
获取所述目标判断语句的字符串表达式;
对所述字符串表达式中各个元素进行识别;所述元素包括:常量、变量、操作符和函数;
基于识别出的元素,构建所述目标判断语句的语法树;
则,所述基于所述目标判断语句的判断逻辑,利用所述各个变量对应的赋值得到所述目标判断语句的输出,包括:
将所述各个变量对应的赋值代入所述语法树,利用所述语法树以递归的方式计算得到所述目标判断语句的输出。
可选的,所述基于识别出的元素,构建所述目标判断语句的语法树,包括:
从识别出的操作符中确定每个操作符的计算优先级;
以最低计算优先级的操作符作为所述语法树的根节点;
将所述最低计算优先级的操作符作为目标父节点,并将所述最低计算优先级的操作符所涉及的各个操作目分别作为一个操作对象;
对每个所述操作对象,判断所述操作对象是否包括操作符;
当所述操作对象包括操作符时,将所述操作对象中最低计算优先级的操作符确定为目标操作符,以所述目标操作符作为所述目标父节点所对应的子节点,将所述目标父节点更新为所述目标操作符,并将所述操作对象依次更新为所述目标操作符所涉及的各个操作目,返回执行所述判断操作对象是否包括操作符的步骤;
当所述操作对象不包括操作符时,将所述操作对象作为所述目标父节点对应的叶子节点。
可选的,所述语法树在客户端执行。
可选的,所述语法树在第一服务器端执行,并由第一服务器端封装,以将封装后的语法树移植至第二服务器。
第二方面,本申请实施例提供了一种实现逻辑判断的装置,包括:获取单元、判断单元、赋予单元和计算单元;
所述获取单元,用于获取目标判断语句中各个变量对应的赋值;
所述判断单元,用于判断所述目标判断语句的各个变量是否均存在对应的赋值;
所述赋予单元,用于当所述判断单元判断所述目标判断语句中存在一个没有对应赋值的变量时,将预设参数赋予每个没有对应赋值的变量;
所述计算单元,用于当所述判断单元判断所述目标判断语句中各个变量均存在对应的赋值时,基于所述目标判断语句的判断逻辑,利用所述各个变量对应的赋值得到所述目标判断语句的输出。
第三方面,本申请实施例提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如上述第一方面所提供的实现逻辑判断的方法中的任一种。
第四方面,本申请实施例提供了一种电子设备,包括存储器和处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序时执行如上述第一方面所提供的实现逻辑判断的方法中的任一种。
与现有技术相比,本申请至少具有以下优点:
在本申请实施例中,首先获取目标判断语句中各个变量对应的赋值,然后,判断该目标判断语句中各个变量是否均存在对应的赋值,当目标判断语句中存在至少一个没有对应赋值的变量时,将预设参数赋予每个没有对应赋值的变量;当目标判断语句中各个变量均存在对应的赋值时,基于目标判断语句中的判断逻辑,利用各个变量对应的赋值得到目标判断语句的输出。本申请实施例在目标判断语句中参与判断的变量未完整获取时,仍可以保证逻辑判断的进行,保证了整个系统流程的流畅,降低了逻辑判断的要求,使得开发过程更加灵活。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例提供的一种实现逻辑判断的方法的流程示意图;
图2为本申请实施例提供的另一种实现逻辑判断的方法的流程示意图;
图3为本申请具体实施例提供的一种语法树的结构示意图;
图4为本申请具体实施例提供的语法树的一种计算流程示意图;
图5为本申请具体实施例提供的语法树的另一种计算流程示意图;
图6为本申请实施例提供的一种实现逻辑判断的装置的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
现有的逻辑判断实现过程中,必须保证参与判断的各个变量均完整获取,才能输出相应的判断结果,保证后续流程的可进行性。例如,当对a+b是否大于100进行逻辑判断时,需要完整获取a和b对应的值(即赋值)才能给出相应的判断结果,一旦未获取到a和/或b对应的赋值时,则该逻辑判断无法进行,后续以该逻辑判断为基础的其他操作也就无法进行。
为此,本申请实施例提供了一种实现逻辑判断的方法及装置,通过为判断语句中未获取到对应赋值的变量,赋予预设参数来完成判断,使得该逻辑判断可以给出相应的输出,保证了后续流程的可进行。
基于上述思想,为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请的具体实施方式做详细的说明。
参见图1,该图为本申请实施例提供的一种实现逻辑判断的方法的流程示意图。
本申请实施例提供的实现逻辑判断的方法,包括:
S101:获取目标判断语句中各个变量对应的赋值。
在本申请实施例中,目标判断语句是当前期望得到判断结果的判断语句,可以是一段代码,也可以是一个字符串,本申请在此对目标判断语句的形式不进行限定。目标判断语句中各个变量对应的赋值可以是外部直接输入,也可以是由根据其他逻辑判断结果得到。
在一个例子中,目标判断语句可以是:
if(insured.age_>60){
return false;
}
或者,目标判断语句可以是:
prdA.prem+prdB.prem<=10000 (1)
目标判断语句中包括各个用于表示判断逻辑的元素,该元素包括但不限于:常量、变量、操作符和函数等。继续以式(1)为例,其中“prdA.prem”和“prdB.prem”为变量,“+”和“<=”为操作符,“10000”为常量。
在实际应用中,目标判断语句可以以字符串表达式的形式存储在相应的数据库中以便调用,可以节约系统代码开发的时间。
这里还需要说明的是,当目标判断语句以字符串表达式的形式时,需要对其进行结构化表示,以便计算机可以通过算法对该字符串表达式的逻辑进行理解。
S102:判断目标判断语句的各个变量是否均存在对应的赋值。
由于在实际的使用场景中,通常出现目标判断语句中变量的赋值获得不完整的情况,例如式(1)中变量“prdB.prem”的赋值未获得。则为了保证目标判断语句的可执行,保证系统执行的流畅,当目标判断语句中存在至少一个没有对应赋值的变量时,执行步骤S103;当目标判断语句中各个变量均存在对应的赋值时,执行步骤S104。
S103:将预设参数赋予每个没有对应赋值的变量。
在本申请实施例中,预设参数用于使得目标判断语句输出一个可识别或可区分的输出,以便再对各个变量的赋值获得不完整的情况下,仍可以保证系统的可执行性,并可以标识出该变量的赋值获得不完整错误的出现。作为一个示例,预设参数可以为空值(如0)或者预设标识(如false),本领域技术人员可以根据实际情况对预设参数进行设定,这里不再一一列举。
S104:基于目标判断语句的判断逻辑,利用各个变量对应的赋值得到目标判断语句的输出。
可以理解的是,由于将预设参数赋予了目标判断语句中每个没有对应赋值的变量,目标判断语句各个参与判断的元素完整,可以得到相对应的输出,以保证后续步骤的可进行。
在本申请实施例一些可能的实现方式中,步骤S104具体可以包括:
当预设参数为预设标识时,判断各个变量对应的赋值是否为预设标识;当存在至少一个变量对应的赋值为预设标识时,输出错误标识作为目标判断语句的逻辑判断结果,以便表示存在对目标判断语句中变量对应的赋值获得不完整的错误。
可以理解的是,在实际应用中,错误标识和预设标识可以相同也可以不相同,本领域技术人员可以根据实际情况对错误标识和预设标识进行设定,这里不进行限定。
需要说明的是,当执行步骤S201-S203后,步骤S104具体可以包括:
将各个变量对应的赋值代入语法树,利用语法树以递归的方式计算得到目标判断语句的输出。
可以理解的是,在实际应用中,可以将变量对应的赋值代入语法树中对应的节点(即叶子节点)中后,从语法树最底层的叶子节点开始,通过递归的方式向上寻找操作符,根据操作符对对应的叶子节点进行逻辑计算。每个操作符对应的节点计算完成后,将结果赋值到该操作符对应的节点位置,以进行下一次迭代计算,继续向上寻找操作符,直到最上层的父节点为止。
还需要说明的是,目标判断语句的语法树构建以及后续的逻辑计算处理过程可以均在客户端(如浏览器客户端)执行,以避免当构建和处理过程在服务器端执行时,若逻辑复杂,则会导致客户端和服务器之间出现频繁的网络交互,而过于频繁的网络交互会极大的降低系统的运行效率与稳定性。
在一些可能的设计中,可以将对目标判断语句的语法树构建以及相应的录逻辑运算组装为一个组件在第一服务器端运行,在第一服务器中进行该组件封装后,可以将该组件移植至第二服务器,在实现目标逻辑语句在多个服务器端的共用的基础上,保证逻辑引擎计算结果的一致性。
以jdk 1.8中的nashron引擎为例,可通过nashron提供给开发者的API将该组件进行封装,透明暴露组件本身的入口方法,以极低的成本实现一个在另一个服务器端运行的该组件。此方式的好处是无需再引入其他服务端逻辑引擎计算技术,且前后两端一致化的计算算法可保证计算结果的一致性。
在本申请实施例中,首先获取目标判断语句中各个变量对应的赋值,然后,判断该目标判断语句中各个变量是否均存在对应的赋值,当目标判断语句中存在至少一个没有对应赋值的变量时,将预设参数赋予每个没有对应赋值的变量;当目标判断语句中各个变量均存在对应的赋值时,基于目标判断语句中的判断逻辑,利用各个变量对应的赋值得到目标判断语句的输出。本申请实施例在目标判断语句中参与判断的变量未完整获取时,仍可以保证逻辑判断的进行,保证了整个系统流程的流畅,降低了逻辑判断的要求,使得开发过程更加灵活。
如图2所示,在本申请实施例一些可能的实现方式中,在步骤S101之前,本申请实施例提供的实现逻辑判断的方法还可以包括:
S201:获取目标判断语句的字符串表达式。
S202:对该字符串表达式中各个元素进行识别。
在本申请实施例中,字符串表达式包括的元素,包括:常量、变量、操作符和函数等。目标判断语句的字符串表达式中,可以包括上述常量、变量、操作符和函数中的任意一个或多个。例如,字符串表达式a+b<c中,仅包括变量“a”、“b”和“c”以及操作符“+”和“<”。在一些可能的设计中,还可以根据实际需要预先设定多个相应的计算函数以实现不同的判断逻辑。
作为一个示例,字符串表达式中可以包括如下表1所示的操作符:
表1操作符及其说明
操作符 | 说明 |
! | 非 |
- | 负 |
* | 称 |
/ | 除 |
% | 取模 |
+ | 加 |
- | 减 |
, | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
== | 等于 |
!= | 不等于 |
?: | 条件表达式 |
字符串表达式中可以包括如下表2所示的自定义函数:
表2函数及其说明
函数 | 说明 |
in(arr,ele) | 检查ele是否在数组arr中存在,返回boolean |
length(str) | 检查字符串str长度,返回int |
isNaN(val) | 实现JavaScript的isNaN方法 |
number(val) | 实现JavaScript的Number方法 |
parseInt(str,radix) | 实现JavaScript的parseInt方法 |
parseFloat(str) | 实现JavaScript的parseFloat方法 |
split(str,splitChar,returnIndex) | 实现字符串分隔方法,指定返回分隔后的字符 |
min(number1,number2) | 实现数值比较,返回最小者 |
max(number1,number2) | 实现数值比较,返回最大者 |
getYear() | 获取当前年份,返回number |
getMonth() | 获取当前月份,返回number |
getDay() | 获取当前日期,返回number |
getHours() | 获取当前小时,返回number |
getMinutes() | 获取当前分钟,返回number |
getSeconds() | 获取当前秒,返回number |
可以理解的时,字符串识别技术是本领域的公知常识,不再赘述。在实际应用中,识别出的元素可以装载至一个数据栈空间(可以是数组结构)以便后续操作。
S203:基于识别出的元素,构建目标判断语句的语法树。
语法树,是源代码的抽象语法结构的表现形式,树上的每个节点都表示源代码中的一种结构。在本申请实施例中,目标判断语句的语法树即以树结构表示目标判断语句的语法结构,树上的每个节点均是目标判断语句中的元素。图3示出上式(1)所给出的目标判断语句的语法树。
在本申请实施例一些可能的实现方式中,步骤S203具体可以包括:
S2031:从识别出的操作符中确定每个操作符的计算优先级。
在本申请实施例中,操作符的计算优先级具体指的是该操作符在数学运算中的计算优先级匹配,当存在括号时,括号内部操作符的计算优先级高于括号外部操作符的计算优先级。
作为一个示例,继续以上式(1)为例,该目标判断语句包括操作符“+”和“<=”,其中,“+”的计算优先级可以为6,“<=”的计算优先级可以为4。
S2032:以最低计算优先级的操作符作为语法树的根节点。
因为,“<=”的计算优先级低于“+”的计算优先级,所以“<=”为语法树的根节点。确定出根节点后,将根节点对应的操作符涉及的各个操作目进行多叉树结构构建语法树,进行如下循环操作执行步骤S2033-S2035。
在本申请实施例中,为了方便后续说明和理解,将最低计算优先级的操作符作为目标父节点,并将最低计算优先级的操作符所涉及的各个操作目分别作为一个操作对象,然后对其中各个操作对象执行步骤S2033。
继续以上式(1)为例,将最低计算优先级的操作符“<=”作为目标父节点。<=”对应的操作目包括“prdA.prem+prdB.prem”和“10000”。则将“prdA.prem+prdB.prem”和“10000”分别为一种操作对象,可以对每个操作对象分别进行执行步骤S2033。
S2033:对每个操作对象,分别判断操作对象是否包括操作符。当操作对象包括操作符时,执行步骤S2034;当操作对象不包括操作符时,执行步骤S2035。
在上述例子中,判断操作对象“prdA.prem+prdB.prem”包括操作符“+”,则对操作对象“prdA.prem+prdB.prem”执行步骤S2034;判断操作对象“10000”不包括操作符,则对操作对象“1000”执行步骤S2035。
S2034:将操作对象中最低计算优先级的操作符确定为目标操作符,以该目标操作符作为目标父节点所对应的子节点,将目标父节点更新为该目标操作符,并依次将操作对象更新为该目标操作符所涉及的各个操作目,返回执行步骤S2033。
继续上述例子,对操作对象“prdA.prem+prdB.prem”,判断该操作对象中的最低计算优先级的操作符为“+”,将“+”确定为目标操作符,以“+”作为目标父节点“<=”的一个子节点,之后,将目标父节点更新为目标操作符“+”。另外,“prdA.prem”和“prdB.prem”为目标操作符“+”所涉及的操作目,将操作对象更新为操作目“prdA.prem”后返回执行步骤S2033,再将操作对象更新为操作目“prdB.prem”后再次返回执行步骤S2033,直到子节点对应的操作符所涉及的操作目中均不包括操作符执行步骤S2035。在本例子中,由于“prdA.prem”和“prdB.prem”不包括操作符,执行步骤S2033后执行步骤S2035。
S2035:将操作对象作为目标父节点对应的叶子节点。
继续上述例子,将“10000”作为“<=”的一个叶子节点;将“prdA.prem”和“prdB.prem”分别作为“+”的两个叶子节点,即可得到如图3所示的语法树。
在实际应用中,可以利用计算机语言(如JavaScript)编写代码生成该语法树。然后,将对变量的赋值通过API入口的方法代入构建好的语法树,根据语法树的结构即可得到相应的输出。
下面结合具体场景对本申请实施例提供的实现逻辑判断的方法进行说明。
本申请实施例提供的实现逻辑判断的方法,可以作为逻辑判断组件运行在浏览器客户端或服务器中。本质上,逻辑判断组件是由JavaScript语言编写的一段代码(JSParse.js文件)。JavaScript语言是目前所有浏览器唯一可以直接运行的语言,所以该组件天然可以直接在浏览器端(客户端)运行。当逻辑判断组件运行在服务器中时,可以对该组件进行封装,透明暴露组件本身的入口方法,以极低的成本实现一个可在另一个服务器运行的该组件,无需再引入其他服务端逻辑引擎计算技术,且前后两端一致化的计算算法可保证计算结果的一致性。
在具体实施时,逻辑判断组件可以包括函数JSParse.build(expression)和,CalcNode.calc(nullMode,calcVars),以API入口的方式对参数进行录入。
其中,JSParse.build(expression),用于根据字符串表达式生成可用于计算的语法树,将需要计算的表达式(即expression)构建为CalcNode对象,此对象是一个多叉树数据结构的对象。CalcNode.calc(nullMode,calcVars)可以将需要计算的变量(即nullMode和calcVars)带入此数据结构中,通过递归算法进行迭代计算以完成整个表达式的计算过程,最终输出结果。
以上式(1)为例,在系统第一次启动后,将要判断的规则加载至客户端。此时,客户端会将所有需要判断的规则表达式通过JSParse.build方法入口带入该逻辑判断组件,组件将该表达式构建如图3所示的数据结构,构建方法可以参见上面的相关说明。JSParse.build方法将返回上图中的结构对象,即CalcNode对象。随后通过CalcNode.calc方法入口,将需要计算的参数带入此对象结构,CalcNode.calc方法会自动通过变量名称匹配实际值,并将实际值带入数据结构做赋值操作。
假设,如图4所示,prdA.prem为5000、prdB.prem为6000,通过CalcNode.calc方法传入实际值,方法内部开始进行多叉树递归计算,计算方向如图4中箭头所示。假设,prdB.prem此时无法给出,可以通过CalcNode.calc方法指定“空模式”,即CalcNode.calc((false,vars),此时可以指示计算引擎当遇到没有值的变量时返回预期结果,如图5所示。
基于上述实施例提供的实现逻辑判断的方法,本申请实施例还提供了一种实现逻辑判断的装置。
参见图6,该图为本申请实施例提供的一种实现逻辑判断的装置的结构示意图。
本申请实施例提供的实现逻辑判断的装置,包括:获取单元100、判断单元200、赋予单元300和计算单元400;
获取单元100,用于获取目标判断语句中各个变量对应的赋值;
判断单元200,用于判断目标判断语句的各个变量是否均存在对应的赋值;
赋予单元300,用于当判断单元200判断目标判断语句中存在至少一个没有对应赋值的变量时,将预设参数赋予每个没有对应赋值的变量;
计算单元400,用于当判断单元200判断目标判断语句中各个变量均存在对应的赋值时,基于目标判断语句的判断逻辑,利用各个变量对应的赋值得到目标判断语句的输出。
作为一个示例,预设参数可以为空值或者预设标识。
在本申请实施例一些可能的实现方式中,计算单元400,具体可以包括:第一判断子单元和计算子单元;
第一判断子单元,用于当预设参数为预设标识时,判断各个变量对应的赋值是否为预设标识;
计算子单元,用于当第一判断子单元判断存在至少一个变量对应的赋值为预设标识时,输出错误标识作为目标判断语句的逻辑判断结果。
在本申请实施例一些可能的实现方式中,该装置还可以包括:识别单元和构建单元;
获取单元100,还用于获取目标判断语句的字符串表达式;
识别单元,用于对字符串表达式中各个元素进行识别;元素包括:常量、变量、操作符和函数;
构建单元,用于基于识别单元识别出的元素,构建目标判断语句的语法树;
则,计算单元400,具体用于:
将各个变量对应的赋值代入语法树,利用语法树以递归的方式计算得到目标判断语句的输出。
在一个例子中,该语法树可以在客户端执行。在另一个例子中,语法树由第一服务器端封装,以将封装后的语法树移植至第二服务器。
在本申请实施例一些可能的实现方式中,构建单元,具体包括:优先级识别子单元、第一确定子单元、第二判断子单元、第二确定子单元和第三确定子单元;
优先级识别子单元,用于从识别出的操作符中确定每个操作符的计算优先级;
第一确定子单元,用于以最低计算优先级的操作符作为语法树的根节点,将最低计算优先级的操作符作为目标父节点,并将最低计算优先级的操作符所涉及的各个操作目分别作为一个操作对象;
第二判断子单元,用于对每个操作对象,判断操作对象是否包括操作符;
第二确定子单元,用于当第二判断子单元判断操作对象包括操作符时,将操作对象中最低计算优先级的操作符为目标操作符,以目标操作符作为目标父节点所对应的子节点,将目标父节点更新为所述目标操作符,并将操作对象一次更新为目标操作符所涉及的各个操作目,然后触发第二判断子单元;
第三确定子单元,用于当第二判断子单元判断操作对象不包括操作符时,将操作对象作为目标父节点对应的叶子节点。
在本申请实施例中,首先获取目标判断语句中各个变量对应的赋值,然后,判断该目标判断语句中各个变量是否均存在对应的赋值,当目标判断语句中存在至少一个没有对应赋值的变量时,将预设参数赋予每个没有对应赋值的变量;当目标判断语句中各个变量均存在对应的赋值时,基于目标判断语句中的判断逻辑,利用各个变量对应的赋值得到目标判断语句的输出。本申请实施例在目标判断语句中参与判断的变量未完整获取时,仍可以保证逻辑判断的进行,保证了整个系统流程的流畅,降低了逻辑判断的要求,使得开发过程更加灵活。
基于上述实施例提供的实现逻辑判断的方法和装置,本申请实施例还提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如上述实施例提供的实现逻辑判断的方法中的任意一种。
基于上述实施例提供的实现逻辑判断的方法和装置,本申请实施例还提供了一种电子设备,包括存储器和处理器;
其中,该存储器,用于存储计算机程序;该处理器,用于运行该计算机程序时执行如上述实施例提供的实现逻辑判断的方法中的任意一种。
需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统或装置而言,由于其与实施例公开的方法相对应,所以描述比较简单,相关之处参见方法部分说明即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述,仅是本申请的较佳实施例而已,并非对本申请作任何形式上的限制。虽然本申请已以较佳实施例揭露如上,然而并非用以限定本申请。任何熟悉本领域的技术人员,在不脱离本申请技术方案范围情况下,都可利用上述揭示的方法和技术内容对本申请技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本申请技术方案的内容,依据本申请的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本申请技术方案保护的范围内。
Claims (8)
1.一种实现逻辑判断的方法,其特征在于,所述方法包括:
获取目标判断语句的字符串表达式;
对所述字符串表达式中各个元素进行识别;所述元素包括:常量、变量、操作符和函数;
从识别出的操作符中确定每个操作符的计算优先级;
以最低计算优先级的操作符作为所述目标判断语句的语法树的根节点;
将所述最低计算优先级的操作符作为目标父节点,并将所述最低计算优先级的操作符所涉及的各个操作目分别作为一个操作对象;
对每个所述操作对象,判断所述操作对象是否包括操作符;
当所述操作对象包括操作符时,将所述操作对象中最低计算优先级的操作符确定为目标操作符,以所述目标操作符作为所述目标父节点所对应的子节点,将所述目标父节点更新为所述目标操作符,并将所述操作对象依次更新为所述目标操作符所涉及的各个操作目,返回执行所述判断操作对象是否包括操作符的步骤;
当所述操作对象不包括操作符时,将所述操作对象作为所述目标父节点对应的叶子节点;
获取所述目标判断语句中各个变量对应的赋值;
判断所述目标判断语句的各个变量是否均存在对应的赋值;
当所述目标判断语句中存在至少一个没有对应赋值的变量时,将预设参数赋予每个没有对应赋值的变量;
当所述目标判断语句中各个变量均存在对应的赋值时,将所述各个变量对应的赋值代入所述语法树,利用所述语法树以递归的方式计算得到所述目标判断语句的输出。
2.根据权利要求1所述的方法,其特征在于,所述预设参数为空值或者预设标识。
3.根据权利要求2所述的方法,其特征在于,所述利用所述各个变量对应的赋值得到所述目标判断语句的输出,包括:
当所述预设参数为预设标识时,判断所述各个变量对应的赋值是否为所述预设标识;
当存在至少一个所述变量对应的赋值为所述预设标识时,输出错误标识作为所述目标判断语句的逻辑判断结果。
4.根据权利要求1所述的方法,其特征在于,所述语法树在客户端执行。
5.根据权利要求1所述的方法,其特征在于,所述语法树在第一服务器端执行,并由第一服务器端封装,以将封装后的语法树移植至第二服务器。
6.一种实现逻辑判断的装置,其特征在于,所述装置包括:表达式获取单元、元素识别单元、语法树构建单元、操作符判断单元、获取单元、判断单元、赋予单元和计算单元;
所述表达式获取单元,用于获取目标判断语句的字符串表达式;
所述元素识别单元,用于对所述字符串表达式中各个元素进行识别;所述元素包括:常量、变量、操作符和函数;
所述语法树构建单元,用于从识别出的操作符中确定每个操作符的计算优先级;以最低计算优先级的操作符作为所述目标判断语句的语法树的根节点;将所述最低计算优先级的操作符作为目标父节点,并将所述最低计算优先级的操作符所涉及的各个操作目分别作为一个操作对象;
所述操作符判断单元,用于对每个所述操作对象,判断所述操作对象是否包括操作符;当所述操作对象包括操作符时,将所述操作对象中最低计算优先级的操作符确定为目标操作符,以所述目标操作符作为所述目标父节点所对应的子节点,将所述目标父节点更新为所述目标操作符,并将所述操作对象依次更新为所述目标操作符所涉及的各个操作目,返回执行所述判断操作对象是否包括操作符的步骤;当所述操作对象不包括操作符时,将所述操作对象作为所述目标父节点对应的叶子节点;
所述获取单元,用于获取所述目标判断语句中各个变量对应的赋值;
所述判断单元,用于判断所述目标判断语句的各个变量是否均存在对应的赋值;
所述赋予单元,用于当所述判断单元判断所述目标判断语句中存在一个没有对应赋值的变量时,将预设参数赋予每个没有对应赋值的变量;
所述计算单元,用于当所述判断单元判断所述目标判断语句中各个变量均存在对应的赋值时,将所述各个变量对应的赋值代入所述语法树,利用所述语法树以递归的方式计算得到所述目标判断语句的输出。
7.一种计算机可读存储介质,其特征在于,其上存储有程序,该程序被处理器执行时实现如权利要求1至5中任一项所述的实现逻辑判断的方法。
8.一种电子设备,其特征在于,包括存储器和处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序时执行如权利要求1至5任一项所述的实现逻辑判断的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910250772.3A CN109947419B (zh) | 2019-03-29 | 2019-03-29 | 一种实现逻辑判断的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910250772.3A CN109947419B (zh) | 2019-03-29 | 2019-03-29 | 一种实现逻辑判断的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109947419A CN109947419A (zh) | 2019-06-28 |
CN109947419B true CN109947419B (zh) | 2022-04-26 |
Family
ID=67012319
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910250772.3A Active CN109947419B (zh) | 2019-03-29 | 2019-03-29 | 一种实现逻辑判断的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109947419B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6175948B1 (en) * | 1998-02-05 | 2001-01-16 | Motorola, Inc. | Method and apparatus for a waveform compiler |
US8789018B2 (en) * | 2011-05-31 | 2014-07-22 | Microsoft Corporation | Statically derived symbolic references for dynamic languages |
CN107153610A (zh) * | 2017-04-28 | 2017-09-12 | 腾讯科技(深圳)有限公司 | 一种程序语句错误检测方法和装置 |
CN108182071A (zh) * | 2017-12-26 | 2018-06-19 | 江苏润和软件股份有限公司 | 一种面向软件升级的配置错误检测方法 |
CN108628635A (zh) * | 2018-05-07 | 2018-10-09 | 广州视源电子科技股份有限公司 | 获取参数名和局部变量名的方法、装置、设备及存储介质 |
CN109062785A (zh) * | 2018-07-06 | 2018-12-21 | 北京大学 | 接口参数约束代码定位方法与系统 |
-
2019
- 2019-03-29 CN CN201910250772.3A patent/CN109947419B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6175948B1 (en) * | 1998-02-05 | 2001-01-16 | Motorola, Inc. | Method and apparatus for a waveform compiler |
US8789018B2 (en) * | 2011-05-31 | 2014-07-22 | Microsoft Corporation | Statically derived symbolic references for dynamic languages |
CN107153610A (zh) * | 2017-04-28 | 2017-09-12 | 腾讯科技(深圳)有限公司 | 一种程序语句错误检测方法和装置 |
CN108182071A (zh) * | 2017-12-26 | 2018-06-19 | 江苏润和软件股份有限公司 | 一种面向软件升级的配置错误检测方法 |
CN108628635A (zh) * | 2018-05-07 | 2018-10-09 | 广州视源电子科技股份有限公司 | 获取参数名和局部变量名的方法、装置、设备及存储介质 |
CN109062785A (zh) * | 2018-07-06 | 2018-12-21 | 北京大学 | 接口参数约束代码定位方法与系统 |
Non-Patent Citations (3)
Title |
---|
Improved Plagiarism Detection Algorithm Based on Abstract Syntax Tree;Guo Tao;《2013 Fourth International Conference on Emerging Intelligent Data and Web Technologies》;20131017;全文 * |
js中函数传参判断;毛台;《https://www.cnblogs.com/iiiiher/p/7161023.html》;20170713;第1-3页 * |
编译原理学习(三)--语法分析树;这个我知道;《https://blog.csdn.net/wy727764020/article/details/80411811》;20180522;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109947419A (zh) | 2019-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10685175B2 (en) | Data analysis and prediction of a dataset through algorithm extrapolation from a spreadsheet formula | |
US10540436B2 (en) | Evaluating rules applied to data | |
CN107704265B (zh) | 一种面向业务流可配置的规则生成方法 | |
CN107644323B (zh) | 一种面向业务流的智能审核系统 | |
Cánovas Izquierdo et al. | Extracting models from source code in software modernization | |
CN108345457B (zh) | 一种对程序源代码自动生成功能描述性注释的方法 | |
CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
Kiesl et al. | Extended resolution simulates DRAT | |
JP2019153270A (ja) | クロスプロジェクト学習のための関連ソフトウェアプロジェクトの自動識別 | |
CN110096263A (zh) | Web前端代码自动生成方法及装置 | |
CN111966817B (zh) | 基于深度学习及代码上下文结构和文本信息的api推荐方法 | |
CN109285024B (zh) | 在线特征确定方法、装置、电子设备及存储介质 | |
US8671386B2 (en) | Program generating apparatus and block diagram generating apparatus | |
Yonai et al. | Mercem: Method name recommendation based on call graph embedding | |
CN110597847A (zh) | Sql语句自动生成方法、装置、设备及可读存储介质 | |
US20240061653A1 (en) | Collaborative industrial integrated development and execution environment | |
CN109947419B (zh) | 一种实现逻辑判断的方法及装置 | |
CN115935943A (zh) | 一种支持自然语言结构计算的分析框架 | |
CN109597638B (zh) | 基于实时计算引擎解决数据处理、设备联动的方法及装置 | |
CN109491892B (zh) | 一种项目环境的配置方法和装置 | |
CN113051262A (zh) | 一种数据质检方法、装置、设备及存储介质 | |
Guskov et al. | The Knowledge Base for Automating the Architecting of Software Systems | |
RU2685018C1 (ru) | Способ распараллеливания программ в вычислительной системе | |
CN114416095A (zh) | 一种程序代码生成方法及系统 | |
CN115617347A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |