用于公式的数据处理方法和装置
技术领域
本发明涉及数据处理领域,具体而言,涉及一种用于公式的数据处理方法和装置。
背景技术
目前,数据分析广泛的应用于各个领域。在数据分析中需要将某些指标混合运算,得出新的分析数据指标用于效果分析,称之为KPI(Key Performance Indicator,关键绩效指标)。
如在广告指标分析中,需要监控的指标包括广告单位时间内的点击量、曝光量等。若广告主请求获取此次投放的真实宣传效果,需要通过点击率来查看(点击率=点击总数/曝光总数);又如广告主需要核算成本(成本=CPC单价*点击数)。根据分析需要的指标组合计算出一个新的关键绩效指标,即KPI,这些指标的组合可能是任意的。
系统要满足一个KPI公式定义的功能,有求和运算符(SUM)、加减乘除和括号以及阿拉伯数字等,这就需要根据用户设置的KPI公式进行运算,为了保证分析结果的准确度,需要对KPI公式进行正确性的校验。
现有技术中校验公式的方法为:系统通过用户所输入公式的运算结果来判断公式的正确性,其劣势在于用户需要等待系统的运算的结果,若公式较为复杂则需要等待较长时间,所以该方法的缺陷在于用户需要等待,不能在输入公式时立刻得到结果;现有技术中还有一种方法通过公式运行的结果来判断公式的正确性。上述的校验方法必须要在运行期才能判断公式的正确性,用户不能实时判断所输入公式的正确性。
针对现有技术中用户不能实时判断所输入的计算公式的正确性的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术中不能实时判断用户所输入的计算公式的正确性的问题,目前尚未提出有效的解决方案,为此,本发明的主要目的在于提供一种用于公式的数据处理方法和装置,以解决上述问题。
为了实现上述目的,根据本发明的一个方面,提供了一种用于公式的数据处理方法,该方法包括:将接收到的用户输入的待校验公式转换为后缀表达式;构建后缀表达式的二叉树;判断后缀表达式的二叉树的树节点是否符合预设条件;若二叉树的树节点符合预设条件,则判断出待校验公式正确;若二叉树的树节点不符合预设条件,则判断出待校验公式不正确。
进一步地,将接收到的用户输入的待校验公式转换为后缀表达式包括:接收用户输入的待校验公式;获取待校验公式的各个操作符的优先级;按照各个操作符的优先级将待校验公式转换为对应的后缀表达式。
进一步地,获取待校验公式的各个操作符的优先级包括:判断各个操作符是否均存在于预设数据表;若操作符不均存在于预设数据表,则结束判断,然后提示用户重新输入待校验公式;若操作符均存在于预设数据表,则从预设数据表中读取操作符的优先级。
进一步地,判断后缀表达式的二叉树的树节点是否符合预设条件包括:判断二叉树的各个第一节点是否均为操作数,其中,第一节点为二叉树的叶子节点;若二叉树存在不为操作数的第一节点,则判断出二叉树的树节点不符合预设条件;若二叉树的第一节点均为操作数,则判断二叉树的第二节点是否均为操作符,其中,第二节点为二叉树上除叶子节点之外的节点;若二叉树存在不为操作符的第二节点,则判断出二叉树的树节点不符合预设条件;若二叉树的第二节点均为操作符,则判断二叉树的第二节点是否均具有两个子树;若二叉树存在不具有两个子树的第二节点,则判断出二叉树的树节点不符合预设条件;若二叉树的第二节点均具有两个子树,则判断出二叉树的树节点符合预设条件。
进一步地,判断二叉树的各个第一节点是否均为操作数包括:读取各个第一节点的数据;判断各个第一节点的数据的类型是否为变量或常量;若各个第一节点的数据的类型均为变量或常量,则判断出二叉树的各个第一节点均为操作数;若存在数据的类型不为变量或常量的第一节点,则判断出二叉树中存在不为操作数的第一节点。
进一步地,在接收用户输入的待校验公式之前,数据处理方法还包括:获取预设的操作符的优先级;保存操作符与操作符的优先级的对应关系为预设数据表。
为了实现上述目的,根据本发明的另一方面,提供了一种用于公式的数据处理装置,该装置包括:转换模块,用于将接收到的用户输入的待校验公式转换为后缀表达式;构建模块,用于构建后缀表达式的二叉树;判断模块,用于判断后缀表达式的二叉树的树节点是否符合预设条件;第一确定模块,用于若二叉树的树节点符合预设条件,则判断出待校验公式正确;第二确定模块,用于若二叉树的树节点不符合预设条件,则判断出待校验公式不正确。
进一步地,转换模块包括:接收模块,用于接收用户输入的待校验公式;获取子模块,用于获取待校验公式的各个操作符的优先级;转换子模块,用于按照各个操作符的优先级将待校验公式转换为对应的后缀表达式。
进一步地,获取子模块包括:操作符判断模块,用于判断各个操作符是否均存在于预设数据表;第一操作符确定模块,用于若操作符不均存在于预设数据表,则结束判断,然后提示用户重新输入待校验公式;第二操作符确定模块,用于若操作符均存在于预设数据表,则从预设数据表中读取操作符的优先级。
进一步地,判断模块包括:第一判断子模块,用于判断二叉树的各个第一节点是否均为操作数,其中,第一节点为二叉树的叶子节点;第一确定子模块,用于若二叉树存在不为操作数的第一节点,则判断出二叉树的树节点不符合预设条件;第二判断子模块,用于若二叉树的第一节点均为操作数,则判断二叉树的第二节点是否均为操作符,其中,第二节点为二叉树上除叶子节点之外的节点;第二确定子模块,用于若二叉树存在不为操作符的第二节点,则判断出二叉树的树节点不符合预设条件;第三判断子模块,用于若二叉树的第二节点均为操作符,则判断二叉树的第二节点是否均具有两个子树;第三确定子模块,用于若二叉树存在不具有两个子树的第二节点,则判断出二叉树的树节点不符合预设条件;第四确定子模块,用于若二叉树的第二节点均具有两个子树,则判断出二叉树的树节点符合预设条件。
进一步地,第一判断子模块包括:读取模块,用于读取各个第一节点的数据;类型判断模块,用于判断各个第一节点的数据的类型是否为变量或常量;第一类型确定模块,用于若各个第一节点的数据的类型均为变量或常量,则判断出二叉树的各个第一节点均为操作数;第二类型确定模块,用于若存在数据的类型不为变量或常量的第一节点,则判断出二叉树中存在不为操作数的第一节点。
进一步地,数据处理装置还包括:获取模块,用于获取预设的操作符的优先级;保存模块,用于保存操作符与操作符的优先级的对应关系为预设数据表。
采用本发明,通过转换模块将接收到的用户输入的待校验公式根据操作符的优先级转换为对应的后缀表达式,使用构建模块构建后缀表达式对应的二叉树,并通过判断模块根据二叉树的树节点是否符合预设条件来判断用户输入的待校验公式是否正确。通过上述实施例,可以将用户输入的待校验公式转换为二叉树,二叉树是一种效率很高的数据结构,系统能够快速判断待校验公式的二叉树是否满足预设条件,以此来判断公式的正确性,而不需要在输入公式之后,通过公式的运算结果来判断公式的正确性,同样也不需要通过服务器端软件编译器对公式的编译运行来判断公式的正确性;在该实施例中在接收到用户输入的待校验公式时即能直接进行语法校验,实时得到该公式正确性的反馈,而不需要等待运算结果或者软件编译运行的判定结果,使得用户可以即时的知道所输入公式的正确性。采用本发明,解决了现有技术中不能对用户输入公式实时给出公式正确性的问题,通过对用户输入公式直接进行语法校验来判断公式的正确性,提高了反馈的及时性,用户可以更快速的得到提示。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的用于公式的数据处理方法的流程图;
图2是根据本发明实施例的用于公式的数据处理方法的详细工作流程的示意图;
图3是根据本发明实施例的一种可选的待校验公式转换得到的二叉树的示意图;
图4是根据本发明实施例的另一种可选的待校验公式转换得到的对应的二叉树的第一示意图;
图5是根据图4所示实施例的待校验公式对应的二叉树的第二示意图;
图6是根据本发明实施例的第三种可选的待校验公式对应的二叉树的示意图;以及
图7是根据本发明实施例的用于公式的数据处理装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
图1是根据本发明实施例的用于公式的数据处理方法的流程图,如图1所示该方法包括如下步骤:
步骤S102,将接收到的用户输入的待校验公式转换为后缀表达式达式。
其中,后缀表达式又称为逆波兰式,是一种公式表达方式,具体地,后缀表达式不包含括号,且操作符放在对应操作对象的后面,在后缀表达式中包含操作顺序,在使用后缀表达式进行计算时,所有的子操作按照操作符出现的顺序从左向右进行。
步骤S104,构建后缀表达式的二叉树。
其中,二叉树是一种非线性、高效率的数据结构,每个节点最多包含两个子树,该节点又称为父节点,且其包含的两个子树分别是左子树和右子树。
步骤S106,判断后缀表达式的二叉树的树节点是否符合预设条件。
其中,若二叉树的树节点符合预设条件,则执行步骤S108;若二叉树的树节点不符合预设条件,则执行步骤S110。
步骤S108,判断出待校验公式正确。
步骤S110,判断出待校验公式不正确。
采用本发明实施例,将接收到的用户输入的待校验公式根据操作符的优先级转换为对应的后缀表达式,再构建后缀表达式对应的二叉树,根据二叉树的树节点是否符合预设条件来判断用户输入的待校验公式是否正确。通过上述实施例,可以将用户输入的待校验公式转换为二叉树,二叉树是一种效率很高的数据结构,系统能够快速判断待校验公式的二叉树是否满足预设条件,以此来判断公式的正确性,而不需要在输入公式之后,通过公式的运算结果来判断公式的正确性,同样也不需要通过服务器端软件编译器对公式的编译运行来判断公式的正确性;在该实施例中在接收到用户输入的待校验公式时即能直接进行语法校验,实时得到该公式正确性的反馈,而不需要等待运算结果或者软件编译运行的判定结果,使得用户可以即时的知道所输入公式的正确性。采用本发明,解决了现有技术中不能对用户输入公式实时给出公式正确性的问题,通过对用户输入公式直接进行语法校验来判断公式的正确性,提高了反馈的及时性,用户可以更快速的得到提示。
参照图2,图2是根据本发明实施例的用于公式的数据处理方法的详细工作流程的示意图,根据本发明的上述实施例,步骤S102,将接收到的用户输入的待校验公式转换为后缀表达式可以包括:
步骤S202,接收用户输入的待校验公式。
步骤S204,获取待校验公式的各个操作符的优先级。
步骤S206,按照各个操作符的优先级将待校验公式将待校验公式转换为对应的后缀表达式。
步骤S210,构建后缀表达式的二叉树。
该步骤的实现方法与图1中的步骤S104的实现方法一致,在此不再赘述。
具体地,用户在系统中输入待校验公式,系统接收到用户输入的待校验公式之后,从待校验公式中提取该公式的所有操作符,并从操作符数据表中(如表1)读取各个操作符的优先级,然后按照操作符的优先级将该待校验公式转换为后缀表达式,然后构建后缀表达式的二叉树,并根据后缀表达式的二叉树的树节点是否符合预设条件的判断结果来确定该公式是否正确。其中,表1为操作符数据表的一种示例,表1中示出了操作符与优先级的对应关系,表1中操作符项对应的优先级项数值越大的优先级表示优先级越高。
表1
操作符 |
优先级 |
+ |
1 |
* |
2 |
∑+、∑- |
1 |
- |
1 |
() |
3 |
在上述实施例中,步骤S204获取待校验公式的各个操作符的优先级可以包括:判断各个操作符是否均存在于预设数据表;若操作符不均存在于预设数据表,则结束判断,然后提示用户重新输入待校验公式;若操作符均存在于预设数据表,则从预设数据表中读取操作符的优先级。
具体地,用户在系统中输入待校验公式,然后系统接收到用户输入的待校验公式,从待校验公式中提取该公式的所有操作符,并按照提取的操作符的顺序从操作符数据表中(如表1)读取各个操作符及其优先级,若存在不能在操作符数据表中读取到的操作符,则判断出用户所输入的待校验公式不正确,该处理流程结束,然后提示用户公式不正确并提示用户重新输入公式;若从待校验公式中提取的所有操作符均存在于操作符数据表中,则系统读取所有操作符对应的优先级。
上述实施例中,在按照各个操作符的优先级将待校验公式转换为对应的后缀表达式之后,该用于公式的数据处理方法还可以包括:按照预设条件修正后缀表达式,得到修正后的后缀表达式。其中,预设条件包括:将后缀表达式中距离求和操作符“∑”最近的一个普通操作符与求和操作符“Σ”合并为一个操作符。其中,普通操作符包括:“+”、“-”、“*”、“/”,即操作符“Σ”可以分别与通操作符为“+”、“-”、“*”、“/”合并为新操作符“Σ+”、“Σ-”、“Σ*”、“Σ/”。
例如,用户输入的待校验公式(即合法表达式)为Σ(C+D),通过查询操作符数据表,所有操作符均存在于操作符数据表中(如表1),其中,操作符“()”的优先级最高,则可以首先计算(C+D),在转换(C+D)的后缀表达式的过程中,提取操作符“+”及其优先级、以及操作数C和D,将操作符“+”放在操作数C和D的后面即构成(C+D)的后缀表达式CD+。按照上述的预设条件将求和操作符“∑”与距离其最近的一个普通操作符合并为一个操作符(因为操作符“()”不是普通操作符,在本实施例中距离操作符“Σ”最近的普通操作符是“+”),得到操作符“Σ+”,从而得到Σ(C+D)的后缀表达式为:CD∑+。
其中,上述公式中的操作符“()”的优先级最高,但是该操作符仅用来表示操作顺序,并没有其他实质性作用,且在后缀表达式中操作数和操作符的顺序中已经包含了计算顺序,因此后缀表达式中没有操作符“()”。
又如,用户输入的待校验公式(即合法表达式)为:(A+B)*(C+D),从该公式中提取操作符:第一“()”、第一“+”、第二“()”、第二“+”、以及“*”,读取各个操作符均存在于操作符数据表中(如表1),然后读取各个操作符的优先级,根据操作符的优先级将操作符放在对应的两个操作数的后面,即将转(A+B)*(C+D)换为后缀表达式。通过查询操作符数据表得知操作符“()”优先级最高,则首先计算(A+B)*(C+D)中(A+B)和(C+D)的值。(A+B)只有操作符“+”,所以(A+B)的后缀表达式为AB+,同理(C+D)的后缀表达式为CD+;操作符“*”优先级次之,如果把“(A+B)”和“(C+D)”分别看作一个整体,则操作符“*”它对应的两个操作数分别为“(A+B)”和“(C+D)”,则(A+B)*(C+D)的后缀表达式为(A+B)(C+D)*;将“A+B”和“C+D”对应的后缀表达式代入(A+B)(C+D)*得到待校验公式(A+B)*(C+D)的完整后缀表达式:AB+CD+*。其中,该公式中操作符“+”的优先级最低,但是因为操作符“+”在操作符“()”内,而操作符“()”的优先级最高,则最先执行的操作是“A+B”和“C+D”的运算。
需要进一步说明的是,上述实施例中的步骤S104,构建后缀表达式的二叉树可以通过如下方法实现:系统从左至右的读取后缀表达式,如果读取到的数据是操作数,则将该操作数放入叶子节点,如果读取到的是操作符,则将该操作符放在对应于操作数的父节点。
其中,操作数可以是常量也可以是变量;操作符可以是二元操作符,也可以是多元操作符。进一步地,二元操作符是指对两个操作数进行运算的操作符,多元操作符则是指对多个操作数进行运算的操作符,操作符操作的对象为离操作符最近的操作数,且该操作数是在读取操作符之前被读取的操作数。父节点为存在子树的节点,且该父节点可以是根节点。
例如,逆波兰式AB+CD+*,系统从左至右依次读取操作数A、操作数B、操作符第一“+”、操作数C、操作数D、操作符第二“+”以及操作符“*”。其中,操作符第一“+”是二元操作符,在它之前被扫描到且离其最近的两个操作数是A和操作数B,操作符与操作数结合为AB+,对应的二叉树如图3所示;操作符第二“+”也是二元操作符,它所对应的操作数是C和操作数D,CD+对应的二叉树与图3类似,在此不再赘述;操作符“*”也是二元操作符,如果把“AB+”和“CD+”分别看成一个整体,则操作符“*”所对应的两个操作数是“AB+”和“CD+”,所以(AB+)(CD+)*(式中操作符“()”仅用于表达“AB+”和“CD+”是一个整体,无其他实际意义)所对应的二叉树为图4,逆波兰式AB+CD+*完整的二叉树如图5所示。
下面结合图2详细介绍本发明实施例,如图2所示,步骤S106,判断后缀表达式的二叉树的树节点是否符合预设条件可以通过如下步骤实现:
步骤S212,判断二叉树的各个第一节点是否均为操作数。
其中,第一节点为二叉树的叶子节点。如果二叉树存在不为操作数的第一节点,判断出二叉树的树节点不符合预设条件,则执行步骤202;如果二叉树的各个第一节点均为操作数,则执行步骤S214。
步骤S214,判断二叉树的第二节点是否均为操作符。
其中,第二节点为二叉树中除了第一节点之外的节点。若二叉树存在不为操作符的第二节点,判断出二叉树的树节点不符合预设条件,则执行步骤202;如果二叉树的第二节点均为操作符,则执行步骤S216。
步骤S216,判断二叉树的第二节点是否均具有两个子树。
如果二叉树存在不包含两个子树的第二节点,判断出二叉树的树节点不符合预设条件,则执行步骤S202;如果二叉树的第二节点均具有两个子树,则执行步骤S218。
步骤S218,公式合法。
具体地,系统读取待校验公式对应的二叉树的所有第一节点的值,然后判断所读取的叶子节点的值的类型,若读取的叶子节点值的类型不均为变量或者常量,则判断出该二叉树不合法,若读取的叶子节点值的类型均为变量或者常量,则读取二叉树所有第二节点的值并判断其类型;若读取的二叉树所有第二节点的值不均为操作符,则判断出此二叉树不合法,若读取的二叉树所有第二节点的值均为操作符,判断所有二叉树所有第二节点是否均有左右子树;若二叉树所有第二节点不均有左右子树,则判断出此二叉树不合法,若二叉树所有第二节点均有左右子树则判断出此二叉树合法。进一步的可以得出用户所输入待校验公式正确的结论。
根据本发明的一个可选的实施例,判断二叉树的各个第一节点是否为操作数可以通过如下方法实现:读取各个第一节点的数据;判断各个第一节点的数据类型是否为变量或常量;若各个第一节点的数据类型均为变量或常量,则判断出二叉树的各个第一节点均为操作数;若第一节点的数。
例如,用户输入公式(非法表达式)(A+B)*D-E+,其中A、B、D以及E为变量,“()”、第一“+”、“*”、“-”以及第二“+”均为二元操作符。
根据待转换公式的转换方法得到其后缀表达式为AB+D*E+,对应的二叉树如图6所示。
具体地,系统读取第一节点(即A、B、D以及E)的值并判断是否为操作数,已知A、B、D以及E为变量,判断出第一节点均为操作数;然后判断第二节点(即所有除叶子节点之外的节点)是否均为操作符,已知“()”、第一“+”、“*”、“-”以及第二“+”均为二元操作符,由此判断出第二节点均为操作符;操作符第一“+”对应的两个操作数分别为A和B,若将(A+B)看成一个整体,则操作符“*”对应的两个操作数分别为“(A+B)”和D,若将(A+B)*D看成一个整体,则操作符“-”对应的两个操作数分别为“(A+B)*D”和E;操作符第二“+”只有左子树没有右子树,由此判断出图6所示的二叉树不合法。
由于公式(A+B)*D-E+对应的二叉树不合法,可以得出用户所输入的出公式(A+B)*D-E+不正确的结论。
又如,用户输入的待校验公式(即合法表达式)为:(A+B)*(C+D),对应的二叉树如图5所示。
其中,A、B、C以及D为操作数,第一“+”、第二“+”以及“*”为操作符。系统首先读取A、B、C以及D的值并判断出A、B、C以及D均为操作数;然后系统读取第一“+”、第二“+”以及“*”的值并判断出第一“+”、第二“+”以及“*”均为操作符;进一步的系统会判断第一“+”、第二“+”以及“*”是否均包含左右子树,如图5所示,第一“+”、第二“+”以及“*”均包含左右子树,由此判断出该二叉树符合预设条件,即该二叉树对应的用户输入的待校验公式正确。
根据本发明的上述实施例,在接收用户输入的待校验公式之前,用于公式的数据处理方法还包括:获取预设的操作符的优先级;保存操作符与操作符的优先级的对应关系,得到预设数据表。
具体地,在用户输入待校验公式之前,需要汇总常用的操作符及其对应的优先级,然后将其放入预设数据表,如表1。然后,将操作符及其优先级构成的操作符数据表放入系统中,用于用户输入公式时读取操作符及其优先级。
其中,操作符可以是普通操作符“+”、“-”、“*”及“/”,也可以是用户根据需要自定义的操作符。而且,在使用该系统的过程中,可以根据用户需要在操作符数据表中插入或删除操作符及其优先级。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本发明实施例还提供了一种用于公式的数据处理装置。需要说明的是,本发明实施例的用于公式的数据处理装置可以用于执行本发明实施例所提供的用于公式的数据处理方法。
图7是根据本发明实施例的用于公式的数据处理装置的示意图。如图7所示,该装置可以包括:转换模块702、构建模块704、判断模块706、第一确定模块708以及第二确定模块710。
其中,转换模块702用于将接收到的用户输入的待校验公式转换为后缀表达式;构建模块704用于构建后缀表达式的二叉树;判断模块706用于判断后缀表达式的二叉树的树节点是否符合预设条件;第一确定模块708用于若二叉树的树节点符合预设条件,则判断出待校验公式正确;第二确定模块710用于若二叉树的树节点不符合预设条件,则判断出待校验公式不正确。
采用本发明实施例,通过转换模块将接收到的用户输入的待校验公式根据操作符的优先级转换为对应的后缀表达式,使用构建模块构建后缀表达式对应的二叉树,并通过判断模块根据二叉树的树节点是否符合预设条件来判断用户输入的待校验公式是否正确。通过上述实施例,可以将用户输入的待校验公式转换为二叉树,二叉树是一种效率很高的数据结构,系统能够快速判断待校验公式的二叉树是否满足预设条件,以此来判断公式的正确性,而不需要在输入公式之后,通过公式的运算结果来判断公式的正确性,同样也不需要通过服务器端软件编译器对公式的编译运行来判断公式的正确性;在该实施例中在接收到用户输入的待校验公式时即能直接进行语法校验,实时得到该公式正确性的反馈,而不需要等待运算结果或者软件编译运行的判定结果,使得用户可以即时的知道所输入公式的正确性。采用本发明,解决了现有技术中不能对用户输入公式实时给出公式正确性的问题,通过对用户输入公式直接进行语法校验来判断公式的正确性,提高了反馈的及时性,用户可以更快速的得到提示。
其中,后缀表达式又称为逆波兰式,是一种公式表达方式,具体地,后缀表达式不包含括号,且操作符放在对应操作对象的后面,在后缀表达式中包含操作顺序,在使用后缀表达式进行计算时,所有的子操作按照操作符出现的顺序从左向右进行;二叉树是一种非线性、高效率的数据结构,每个节点最多包含两个子树,该节点又称为父节点,且其包含的两个子树分别是左子树和右子树。
根据本发明的上述实施例,转换模块可以包括:接收模块,用于接收用户输入的待校验公式;获取子模块,用于获取待校验公式的各个操作符的优先级;转换子模块,用于按照各个操作符的优先级将待校验公式转换为对应的后缀表达式。
上述的获取子模块可以包括:操作符判断模块,用于判断各个操作符是否均存在于预设数据表;第一操作符确定模块,用于若操作符不均存在于预设数据表,则结束判断,然后提示用户重新输入待校验公式;第二操作符确定模块,用于若操作符均存在于预设数据表,则从预设数据表中读取操作符的优先级。
具体地,用户在系统中输入待校验公式,系统接收到用户输入的待校验公式之后,操作符判断模块从待校验公式中提取该公式的所有操作符,并按照提取的操作符的顺序从操作符数据表中(如表1)读取各个操作符,若存在不能在操作符数据表中读取到的操作符,第一操作符确定模块则判断出用户所输入的待校验公式不正确,获取子模块则停止工作,然后提示用户公式不正确并提示用户重新输入公式;若从待校验公式中提取的所有操作符均存在于操作符数据表中,第二操作符确定模块则系统读取所有操作符对应的优先级。
上述实施例中,该用于公式的数据处理装置还包括:修正模块,用于在按照各个操作符的优先级将待校验公式转换为对应的后缀表达式之后,按照预设条件修正后缀表达式,得到修正后的后缀表达式。其中,预设条件包括:将后缀表达式中距离求和操作符“∑”最近的一个普通操作符与求和操作符“Σ”合并为一个操作符。其中,普通操作符包括:“+”、“-”、“*”、“/”,即操作符“Σ”可以分别与通操作符为“+”、“-”、“*”、“/”合并为新操作符“Σ+”、“Σ-”、“Σ*”、“Σ/”。
需要进一步说明的是,上述的构建模块可以包括:读取子模块,用于系统从左至右的读取后缀表达式,如果读取到的数据是操作数,则将该操作数放入叶子节点,如果读取到的是操作符,则将该操作符放在对应于操作数的父节点。
其中,操作数可以是常量也可以是变量;操作符可以是二元操作符,也可以是多元操作符。进一步地,二元操作符是指对两个操作数进行运算的操作符,多元操作符则是指对多个操作数进行运算的操作符,操作符操作的对象为离操作符最近的操作数,且该操作数是在读取操作符之前被读取的操作数。父节点为存在子树的节点,且该父节点可以是根节点。
在本发明的上述实施例中,判断模块可以包括:第一判断子模块,用于判断二叉树的各个第一节点是否均为操作数,其中,第一节点为二叉树的叶子节点;第一确定子模块,用于若二叉树存在不为操作数的第一节点,则判断出二叉树的树节点不符合预设条件;第二判断子模块,用于若二叉树的第一节点均为操作数,则判断二叉树的第二节点是否均为操作符,其中,第二节点为二叉树上除叶子节点之外的节点;第二确定子模块,用于若二叉树存在不为操作符的第二节点,则判断出二叉树的树节点不符合预设条件;第三判断子模块,用于若二叉树的第二节点均为操作符,则判断二叉树的第二节点是否均具有两个子树;第三确定子模块,用于若二叉树存在不具有两个子树的第二节点,则判断出二叉树的树节点不符合预设条件;第四确定子模块,用于若二叉树的第二节点均具有两个子树,则判断出二叉树的树节点符合预设条件。
在上述实施例中,系统首先读取待校验公式对应的二叉树的所有第一节点的值,然后判断所读取的叶子节点的值的类型,若读取的叶子节点值的类型不均为变量或者常量,则判断出该二叉树不合法,若读取的叶子节点值的类型均为变量或者常量,则读取二叉树所有第二节点的值并判断其类型;若读取的二叉树所有第二节点的值不均为操作符,则判断出此二叉树不合法,若读取的二叉树所有第二节点的值均为操作符,判断所有二叉树所有第二节点是否均有左右子树;若二叉树所有第二节点不均有左右子树,则判断出此二叉树不合法,若二叉树所有第二节点均有左右子树则判断出此二叉树合法。进一步的可以得出用户所输入待校验公式正确的结论。
根据本发明的上述实施例,第一判断子模块可以包括:第五确定子模块,用于确定各个第一节点的数据类型;类型判断模块,用于判断各个第一节点的数据类型是否为变量或常量;第一类型确定模块,用于若各个第一节点的数据类型均为变量或常量,则判断出二叉树的各个第一节点均为操作数;第二类型确定模块,用于若各个第一节点的数据类型不均为变量或常量,则判断出二叉树中存在不为操作数的第一节点。
具体地,第五确定子模块读取各个第一节点的数据并确定各个第一节点的数据类型;然后类型判断模块则判断各个第一节点的数据类型是否为变量或常量;若各个第一节点的数据类型均为变量或常量,第一类型确定模块则判断出二叉树的各个第一节点均为操作数;若第一节点的数据类型不均为变量或常量,第二类型确定模块则判断出二叉树中存在不为操作数的第一节点。
根据本发明的上述实施例,第一判断子模块可以包括:读取模块,用于读取各个第一节点的数据;类型判断模块,用于判断各个第一节点的数据的类型是否为变量或常量;第一类型确定模块,用于若各个第一节点的数据的类型均为变量或常量,则判断出二叉树的各个第一节点均为操作数;第二类型确定模块,用于若存在数据的类型不为变量或常量的第一节点,则判断出二叉树中存在不为操作数的第一节点。
具体地,读取模块读取所有第一节点的数据;然后类型判断模块判断各个第一节点的数据的类型是否为变量或常量;若各个第一节点的数据的类型均为变量或常量,则第一类型确定则判断出二叉树的各个第一节点均为操作数;若存在数据的类型不为变量或常量的第一节点,则第一类型确定模块判断出二叉树的各个第一节点均为操作数,则第二类型确定模块判断出二叉树中存在不为操作数的第一节点。
在本发明的上述实施例中,用于公式的数据处理装置还可以包括:获取模块,用于在接收用户输入的待校验公式之前,获取预设的操作符的优先级;保存模块,用于保存操作符与操作符的优先级的对应关系,得到预设数据表。
具体地,在用户输入待校验公式之前,需要将常用的操作符及其对应的优先级放入预设数据表,如表1。获取模块,将操作符及其优先级构建为操作符数据表;然后保存模块将该操作符数据表保存在系统中。
其中,操作符可以是普通操作符“+”、“-”、“*”及“/”,也可以是用户根据需要自定义操作符。而且,在使用该系统的过程中,可以根据用户需要在操作符数据表中插入或删除操作符及其优先级。
本实施例中所提供的各个模块与方法实施例对应步骤所提供的使用方法相同、应用场景也可以相同。当然,需要注意的是,上述模块涉及的方案可以不限于上述实施例中的内容和场景,且上述模块可以运行在计算机终端或移动终端,可以通过软件或硬件实现。
从以上的描述中,可以看出,本发明实现了如下技术效果:
采用本发明实施例,首先将接收到的用户输入的待校验公式根据操作符的优先级转换为对应的后缀表达式,再构建后缀表达式对应的二叉树,根据二叉树的树节点是否符合预设条件来判断用户输入的待校验公式是否正确。通过上述实施例,可以将用户输入的待校验公式转换为二叉树,二叉树是一种效率很高的数据结构,系统能够快速判断待校验公式的二叉树是否满足预设条件,以此来判断公式的正确性,而不需要在输入公式之后,通过公式的运算结果来判断公式的正确性,同样也不需要通过服务器端软件编译器对公式的编译运行来判断公式的正确性;在该实施例中在接收到用户输入的待校验公式时即能直接进行语法校验,实时得到该公式正确性的反馈,而不需要等待运算结果或者软件编译运行的判定结果,使得用户可以即时的知道所输入公式的正确性。采用本发明,解决了现有技术中不能对用户输入公式实时给出公式正确性的问题,通过对用户输入公式直接进行语法校验来判断公式的正确性,提高了反馈的及时性,用户可以更快速的得到提示。
上述方法可以实时的判断出用户所输入的公式的正确性,并给予用户提示,这样用户就可以即时修正或者重新输入公式。
本发明中采用编译原理的思想,但是不需要编译器的支持,只需要通过简单的逻辑运算即能判断用户所输入的公式的正确性。具体地,由于系统无法直接对公式进行逻辑判断,所以在系统对公式的逻辑判断中引入的一种数据结构,即二叉树结构,二叉树是一种高效的数据结构,系统能够通过对二叉树逻辑处理来判断公式的正确性。发明的优点是能够即时的用户输入的公式进行语法校验,无需运行公式,也无需编译器的支持,且不需要等待,在用户输入公式时即能得知所输入公式的正确性。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。