公式引擎开发方法、装置、电子设备和存储介质与流程

文档序号:25168565发布日期:2021-05-25 14:36阅读:104来源:国知局
公式引擎开发方法、装置、电子设备和存储介质与流程

本申请涉及计算机技术领域,具体而言,涉及一种公式引擎开发方法、装置、电子设备和存储介质。



背景技术:

现有针对企业erp(enterpriseresourceplanning,企业资源计划)的数据计算需求,有如下两种实现方式:

1、在erp里预设好每种计算需求的代码,根据需求去执行相应的代码,如果有新的计算需求或计算规则发生变化时,必须要修改程序代码,适应性差,耗时长,对企业的变化需求响应不及时,影响企业工作效率。

2、采用公式引擎,现有公式引擎只能支持通过传入一定的参数进行加减乘除及数学函数的表达式计算,输出一个数值的计算结果,不能进行条件判断运行不同的分支,根据条件计算不同的结果,不能灵活的定义变量,在公式引擎计算过程中根据需要获取变量值作为参数,无法满足企业的erp的复杂计算需求。



技术实现要素:

本申请实施例的目的在于提供一种公式引擎开发方法、装置、电子设备和非暂态电子设备可读存储介质,用以实现定义多个不同类型计算元素,可以灵活输入参数、定义变量作为辅助元素参与计算,根据变量的定义多层条件分支判断运行不同的计算语句,输出计算元素值的复杂公式引擎。

第一方面,本发明实施例提供一种公式引擎开发方法,包括:扫描公式定义语句,按照预设提取规则提取公式定义语句中的公式要素;其中,公式要素包括变量、公式元素和公式表达式;根据公式要素构造计算令牌,并将计算令牌压入堆栈;循环提取堆栈中的计算令牌,匹配公式表达式;根据公式表达式更新变量和公式元素,完成公式计算。

在可选的实施方式中,扫描公式定义语句,按照预设提取规则提取公式定义语句中的公式要素,包括:根据公式定义语句,获取公式要素;将公式要素按照预设类别进行拆分;根据预设提取规则,确定拆分后的公式要素的提取优先级;根据提取优先级,提取公式要素。

在可选的实施方式中,公式要素包括辅助元素,辅助元素用于定义公式的输入参数;循环提取堆栈中的计算令牌,匹配公式表达式,包括:根据相邻的计算令牌,判断计算令牌中是否存在公式表达式;若计算令牌中存在公式表达式,则提取公式表达式;根据公式表达式,匹配公式表达式配套的辅助参数。

在可选的实施方式中,公式表达式包括条件表达式;循环提取堆栈中的计算令牌,匹配公式表达式,还包括:判断公式表达式是否为条件表达式;若公式表达式不是条件表达式,则根据公式表达式的类型计算表达式值,赋予变量与计算元素;若公式表达式是条件表达式,则根据条件表达式提取下一步条件分支表达式。

第二方面,本发明实施例提供一种公式引擎开发装置,包括:第一提取模块,用于扫描公式定义语句,按照预设提取规则提取公式定义语句中的公式要素;其中,公式要素包括变量、公式元素和公式表达式;第一构造模块,用于根据公式要素构造计算令牌,并将计算令牌压入堆栈;第一匹配模块,用于循环提取堆栈中的计算令牌,匹配公式表达式;第一计算模块,用于根据公式表达式更新变量和公式元素,完成公式计算。

在可选的实施方式中,第一提取模块还用于:根据公式定义语句,获取公式要素;将公式要素按照预设类别进行拆分;根据预设提取规则,确定拆分后的公式要素的提取优先级;根据提取优先级,提取公式要素。

在可选的实施方式中,公式要素包括辅助元素,辅助元素用于定义公式的输入参数;第一匹配模块还用于:根据相邻的计算令牌,判断计算令牌中是否存在公式表达式;若计算令牌中存在公式表达式,则提取公式表达式;根据公式表达式,匹配公式表达式配套的辅助参数。

在可选的实施方式中,公式表达式包括条件表达式;第一计算模块还用于:判断公式表达式是否为条件表达式;若公式表达式不是条件表达式,则根据公式表达式的类型计算表达式值,赋予变量与计算元素;若公式表达式是条件表达式,则根据条件表达式提取下一步条件分支表达式。

第三方面,本发明实施例提供一种电子设备,包括:存储器,用以存储计算机程序;处理器,用以执行如前述实施方式中任一项的方法。

第四方面,本发明实施例提供一种非暂态电子设备可读存储介质,包括:程序,当其藉由电子设备运行时,使得电子设备执行前述实施方式中任一项的方法。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的一种电子设备的结构示意图;

图2为本申请实施例提供的一种公式引擎开发方法的流程图;

图3为本申请实施例提供的一种公式引擎开发装置的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

如图1所示,本实施例提供一种电子设备,包括:至少一个处理器11和存储器12,图1中以一个处理器为例。处理器11和存储器12通过总线10连接,存储器12存储有可被处理器11执行的指令,指令被处理器11执行。

于一实施例中,电子设备可以是手机、笔记本电脑等设备。以实现一种定义多个不同类型计算元素,可以灵活输入参数、定义变量作为辅助元素参与计算,根据变量的定义多层条件分支判断运行不同的计算语句,输出计算元素值的复杂公式引擎。支持多计算元素,可以在一个公式里同时计算出一组计算结果,如在计算物业费金额时可以同时计算出它的优惠金额,应缴费日期、单价等,满足企业的各种数据计算场景。

公式语句中计算元素、变量名、条件语句、逻辑操作均采用可汉字,可读性好,易于维护,能够满足物业费、阶梯水电费、停车费、资产折旧费、考勤、休假、工资计算等各种不断变化的复杂的企业erp数据计算需求。

如图2所示,其为本申请实施例提供的一种公式引擎开发方法的流程图,该方法可由图1所示的电子设备来执行,以实现一种定义多个不同类型计算元素,可以灵活输入参数、定义变量作为辅助元素参与计算,根据变量的定义多层条件分支判断运行不同的计算语句,输出计算元素值的复杂公式引擎。该方法包括如下步骤:

步骤201:扫描公式定义语句,按照预设提取规则提取公式定义语句中的公式要素。

在本步骤中,预设提取规则用于规定需要提取哪些公式要素,预设提取规则可以通过正则表达式定义,正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,可以通过正则表达式匹配公式要素列表,提取公式定义语句中的公式要素。公式要素包括变量、公式元素和公式表达式,除常规的+、-、*、/、=、>、>=、<、<=、<>、(、)及且或等逻辑操作及数学函数、日期函数、字符函数等基础计算功能外,定义数值、字符、日期变量,进行中间计算结果处理,支持sql取数函数,可以在公式计算过程中获取sql语句的值赋予变量。

于一实施例中,公式引擎的要素可以包括:

1、计算元素,定义公式的计算结果目标,支持定义多个计算元素,支持定义不同类型的计算元素,公式引擎可以同时输出计算元素的值。

2、辅助元素,定义公式的输入参数,将与业务相关的数据作为参数参与公式计算,为计算提供数据基础。可以在公式初始化时设置辅助元素的值,也可以在公式执行过程中动态获取相应的值。

3、变量,可以定义数值、字符、日期等类型的变量,用于保存中间计算结果,然后作为参数应用于公式表达式及条件分支表达式中参与计算。

4、计算表达式,进行+、-、*、/、=、>、>=、<、<=、<>、(、)等基础运算。

5、计算函数,包括有字符函数、数学函数、日期函数、转换函数及sql取数函数,其中sql取数函数可以将一段sql语句作为参数,sql语句的条件可以根据辅助元素构造,公式在运算过程中,动态根据sql语句获取数据参与计算。

6、逻辑运算符,包括“且”、“或”用于多个表达式的之间逻辑判断,得到一个逻辑值。

7、条件分支表达式,包括“如果…则…如果完”、“如果…则…否则…如果完”,可以根据不同条件运行相应的公式语句,可以进行条件分支表达式的嵌套。

步骤202:根据公式要素构造计算令牌,并将计算令牌压入堆栈。

在本步骤中,按照优先级将运算符与计算元素、辅助元素、变量等要素构造令牌,并压入堆栈,构造好的计算令牌中包括公式要素的类型、位置及要素值。堆栈是一个特定的存储区或寄存器,它的一端是固定的,另一端是浮动的。所有的数据存入或取出,只能在浮动的一端(称栈顶)进行,严格按照“先进后出”的原则存取,位于其中间的元素,必须在其栈上部(后进栈者)诸元素逐个移出后才能取出。

于一实施例中,根据公式定义语句,获取公式要素,将公式要素按照预设类别进行拆分,然后根据预设提取规则,确定拆分后的公式要素的提取优先级,根据提取优先级,提取公式要素。

步骤203:循环提取堆栈中的计算令牌,匹配公式表达式。

在本步骤中,循环提取堆栈中的令牌进行提取计算表达式、条件分支表达式、逻辑运算表达式等匹配,在表达式匹配过程中,对辅助元素或sql函数进行动态取值参与计算,根据表达式类型计算表达式值赋予变量与计算元素,或进行下一步条件分支表达式的提取。

于一实施例中,公式要素包括辅助元素,辅助元素用于定义公式的输入参数。此时,循环提取堆栈中的计算令牌,根据相邻的计算令牌,判断计算令牌中是否存在公式表达式,并根据计算令牌匹配公式表达式,若计算令牌中存在公式表达式,则提取公式表达式,并且根据公式表达式,匹配公式表达式配套的辅助参数。

于一实施例中,公式表达式还包括条件表达式,还要判断公式表达式是否为条件表达式,若公式表达式不是条件表达式,则根据公式表达式的类型计算表达式值,赋予变量与计算元素。若公式表达式是条件表达式,则根据条件表达式提取下一步条件分支表达式,直至所有的令牌循环提取完毕。

步骤204:根据公式表达式更新变量和公式元素,完成公式计算。

在本步骤中,堆栈提取完成后,完成公式引擎的计算,输出计算元素的值。

如图3所示,其为本申请实施例提供的一种公式引擎开发装置300的结构示意图,该方法可由图1所示的电子设备来执行,以实现一种定义多个不同类型计算元素,可以灵活输入参数、定义变量作为辅助元素参与计算,根据变量的定义多层条件分支判断运行不同的计算语句,输出计算元素值的复杂公式引擎。该装置包括:第一提取模块301,第一构造模块302,第一匹配模块303,第一计算模块304。具体原理关系如下:

第一提取模块301,用于扫描公式定义语句,按照预设提取规则提取公式定义语句中的公式要素。其中,公式要素包括变量、公式元素和公式表达式。

在可选的实施方式中,第一提取模块301还用于:根据公式定义语句,获取公式要素;将公式要素按照预设类别进行拆分;根据预设提取规则,确定拆分后的公式要素的提取优先级;根据提取优先级,提取公式要素。详细请参阅上述实施例中对步骤201的描述。

第一构造模块302,用于根据公式要素构造计算令牌,并将计算令牌压入堆栈。详细请参阅上述实施例中对步骤202的描述。

第一匹配模块303,用于循环提取堆栈中的计算令牌,匹配公式表达式。

在可选的实施方式中,公式要素包括辅助元素,辅助元素用于定义公式的输入参数;第一匹配模块303还用于:根据相邻的计算令牌,判断计算令牌中是否存在公式表达式;若计算令牌中存在公式表达式,则提取公式表达式;根据公式表达式,匹配公式表达式配套的辅助参数。

在可选的实施方式中,公式表达式包括条件表达式;第一计算模块304还用于:判断公式表达式是否为条件表达式;若公式表达式不是条件表达式,则根据公式表达式的类型计算表达式值,赋予变量与计算元素;若公式表达式是条件表达式,则根据条件表达式提取下一步条件分支表达式。详细请参阅上述实施例中对步骤203的描述。

第一计算模块304,用于根据公式表达式更新变量和公式元素,完成公式计算。详细请参阅上述实施例中对步骤204的描述。

在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

需要说明的是,功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。

以上仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

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