CN111538942B - 表达式处理方法、电子装置及存储介质 - Google Patents

表达式处理方法、电子装置及存储介质 Download PDF

Info

Publication number
CN111538942B
CN111538942B CN202010317154.9A CN202010317154A CN111538942B CN 111538942 B CN111538942 B CN 111538942B CN 202010317154 A CN202010317154 A CN 202010317154A CN 111538942 B CN111538942 B CN 111538942B
Authority
CN
China
Prior art keywords
expression
calculation
predefined
variables
variable
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
Application number
CN202010317154.9A
Other languages
English (en)
Other versions
CN111538942A (zh
Inventor
宋和贵
阳灿
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Merchants Finance Technology Co Ltd
Original Assignee
China Merchants Finance Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by China Merchants Finance Technology Co Ltd filed Critical China Merchants Finance Technology Co Ltd
Priority to CN202010317154.9A priority Critical patent/CN111538942B/zh
Publication of CN111538942A publication Critical patent/CN111538942A/zh
Application granted granted Critical
Publication of CN111538942B publication Critical patent/CN111538942B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/11Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明涉及数据处理技术,提供了一种表达式处理方法、电子装置及存储介质。该方法获取待计算数据的标识从配置文件中获取对应的计算表达式,对计算表达式的预定义变量进行顺序标记,并将标记后的预定义变量转换成中间变量生成中间变量表达式,基于该预定义变量的标识从数据库查找各个预定义变量的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值,根据顺序标记将预定义变量的结果值赋值给中间变量表达式的中间变量,并将赋值后的中间变量表达式编译成表达式字节码,根据预定义变量的结果值及表达式字节码,调用计算引擎执行计算得到目标结果。本发明可以避免针对不同的计算写不同代码实现,扩展性强。

Description

表达式处理方法、电子装置及存储介质
技术领域
本发明涉及数据处理领域,尤其涉及一种表达式处理方法、电子装置及存储介质。
背景技术
目前,为了满足企业项目中不断变化的功能需求和业务需求,业务数据的计算表达式也越来越复杂,其要求计算的场景越来越多,如果直接对某个场景的计算表达式写具体的代码实现,则本次的计算实现并不能支持其他场景的方案。为了避免多种个性化计算不可扩展,难以维护等问题,急需一种高扩展、灵活且通用的表达式处理方法来解决上述问题。
发明内容
鉴于以上内容,本发明提供一种表达式处理方法、电子装置及存储介质,其目的在于解决现有技术中计算表达式不可扩展,难以维护的技术问题。
为实现上述目的,本发明提供一种表达式处理方法,该方法包括:
接收步骤:接收用户发出的数据计算请求,获取所述请求中待计算数据的标识,根据所述标识从预设的配置文件中获取待计算数据对应的计算表达式,对所述计算表达式的预定义变量进行顺序标记,基于所述计算表达式的初始数值将标记后的预定义变量转换成中间变量生成中间变量表达式,并将所述预定义变量添加至预设表达式列表;
计算步骤:基于所述预设表达式列表解析所述计算表达式的预定义变量,基于该预定义变量的标识从预设数据库分别查找各个预定义变量的计算方式,基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值;
编译步骤:根据所述顺序标记将预定义变量的结果值赋值给所述中间变量表达式的中间变量,并将赋值后的中间变量表达式编译成表达式字节码;及
反馈步骤:根据所述预定义变量的结果值及所述表达式字节码,调用计算引擎执行计算得到目标结果,将所述目标结果反馈至用户。
优选的,所述基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值包括:
解析所述计算表达式的预定义变量,得到具有执行顺序的多个操作对象。
优选的,所述解析所述计算表达式的预定义变量,得到具有执行顺序的各操作对象包括:
调用表达式解析器对所述表达式的预定义变量进行解析,确定所述表达式的预定义变量的字符串类型;
根据所述字符串类型,调用与所述字符串类型对应的字符串解析器对所述表达式字符串进行解析,得到所述具有执行顺序的多个操作对象,基于所述执行顺序依次执行多个操作对象,得到各所述预定义变量的结果值。
优选的,所述基于所述执行顺序依次执行多个操作对象包括:
判断所述操作对象是否为操作符,当所述操作对象不为操作符时,将所述操作对象对应的操作值存储至预设的栈中;
当所述操作对象为操作符时,从预设函数对象库中调用所述操作符对应的函数对象对从所述预设的栈中获取的操作值进行运算,将运算后的操作值存储至所述预设的栈中。
优选的,所述编译步骤包括:
将所述中间变量表达式编译成表达式字节码后,将所述中间变量表达式存储至预设内存池。
为实现上述目的,本发明还提供一种电子装置,该电子装置包括:存储器及处理器,所述存储器上存储表达式处理程序,所述表达式处理程序被所述处理器执行,实现如下步骤:
接收步骤:接收用户发出的数据计算请求,获取所述请求中待计算数据的标识,根据所述标识从预设的配置文件中获取待计算数据对应的计算表达式,对所述计算表达式的预定义变量进行顺序标记,基于所述计算表达式的初始数值将标记后的预定义变量转换成中间变量生成中间变量表达式,并将所述预定义变量添加至预设表达式列表;
计算步骤:基于所述预设表达式列表解析所述计算表达式的预定义变量,基于该预定义变量的标识从预设数据库分别查找各个预定义变量的计算方式,基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值;
编译步骤:根据所述顺序标记将预定义变量的结果值赋值给所述中间变量表达式的中间变量,并将赋值后的中间变量表达式编译成表达式字节码;及
反馈步骤:根据所述预定义变量的结果值及所述表达式字节码,调用计算引擎执行计算得到目标结果,将所述目标结果反馈至用户。
优选的,所述基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值包括:
解析所述计算表达式的预定义变量,得到具有执行顺序的多个操作对象。
优选的,所述解析所述计算表达式的预定义变量,得到具有执行顺序的各操作对象包括:
调用表达式解析器对所述表达式的预定义变量进行解析,确定所述表达式的预定义变量的字符串类型;
根据所述字符串类型,调用与所述字符串类型对应的字符串解析器对所述表达式字符串进行解析,得到所述具有执行顺序的多个操作对象,基于所述执行顺序依次执行多个操作对象,得到各所述预定义变量的结果值。
优选的,所述基于所述执行顺序依次执行多个操作对象包括:
判断所述操作对象是否为操作符,当所述操作对象不为操作符时,将所述操作对象对应的操作值存储至预设的栈中;
当所述操作对象为操作符时,从预设函数对象库中调用所述操作符对应的函数对象对从所述预设的栈中获取的操作值进行运算,将运算后的操作值存储至所述预设的栈中。
为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中包括表达式处理程序,所述表达式处理程序被处理器执行时,实现如上所述表达式处理方法中的任意步骤。
本发明提出的表达式处理方法、电子装置及存储介质,通过将计算表达式配置化,统一由计算引擎处理,可以避免针对多样化个性化计算写不同代码实现,导致难以维护的问题,且支持预定义表达式及计算实现,扩展性强。
附图说明
图1为本发明电子装置较佳实施例的示意图;
图2为图1中表达式处理程序较佳实施例的模块示意图;
图3为本发明表达式处理方法较佳实施例的流程图;
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1所示,为本发明电子装置1较佳实施例的示意图。
该电子装置1包括但不限于:存储器11、处理器12、显示器13及网络接口14。所述电子装置1通过网络接口14连接网络,获取原始数据。其中,所述网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobilecommunication,GSM)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi、通话网络等无线或有线网络。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述电子装置1的内部存储单元,例如该电子装置1的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述电子装置1的外部存储设备,例如该电子装置1配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器11还可以既包括所述电子装置1的内部存储单元也包括其外部存储设备。本实施例中,存储器11通常用于存储安装于所述电子装置1的操作系统和各类应用软件,例如表达式处理程序10的程序代码等。此外,存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述电子装置1的总体操作,例如执行数据交互或者通信相关的控制和处理等。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行表达式处理程序10的程序代码等。
显示器13可以称为显示屏或显示单元。在一些实施例中显示器13可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-EmittingDiode,OLED)触摸器等。显示器13用于显示在电子装置1中处理的信息以及用于显示可视化的工作界面,例如显示数据统计的结果。
网络接口14可选地可以包括标准的有线接口、无线接口(如WI-FI接口),该网络接口14通常用于在所述电子装置1与其它电子设备之间建立通信连接。
图1仅示出了具有组件11-14以及表达式处理程序10的电子装置1,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
可选地,所述电子装置1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-Emitting Diode,OLED)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子装置1中处理的信息以及用于显示可视化的用户界面。
该电子装置1还可以包括射频(Radio Frequency,RF)电路、传感器和音频电路等等,在此不再赘述。
在上述实施例中,处理器12执行存储器11中存储的表达式处理程序10时可以实现如下步骤:
接收步骤:接收用户发出的数据计算请求,获取所述请求中待计算数据的标识,根据所述标识从预设的配置文件中获取待计算数据对应的计算表达式,对所述计算表达式的预定义变量进行顺序标记,基于所述计算表达式的初始数值将标记后的预定义变量转换成中间变量生成中间变量表达式,并将所述预定义变量添加至预设表达式列表;
计算步骤:基于所述预设表达式列表解析所述计算表达式的预定义变量,基于该预定义变量的标识从预设数据库分别查找各个预定义变量的计算方式,基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值;
编译步骤:根据所述顺序标记将预定义变量的结果值赋值给所述中间变量表达式的中间变量,并将赋值后的中间变量表达式编译成表达式字节码;及
反馈步骤:根据所述预定义变量的结果值及所述表达式字节码,调用计算引擎执行计算得到目标结果,将所述目标结果反馈至用户。
所述存储设备可以为电子装置1的存储器11,也可以为与电子装置1通讯连接的其它存储设备。
关于上述步骤的详细介绍,请参照下述图2关于表达式处理程序10实施例的程序模块图以及图3关于表达式处理方法实施例的流程图的说明。
在其他实施例中,所述表达式处理程序10可以被分割为多个模块,该多个模块被存储于存储器11中,并由处理器12执行,以完成本发明。本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段。
参照图2所示,为图1中表达式处理程序10一实施例的程序模块图。在本实施例中,所述表达式处理程序10可以被分割为:接收模块110、计算模块120、编译模块130及反馈模块140。
接收模块110,用于接收用户发出的数据计算请求,获取所述请求中待计算数据的标识,根据所述标识从预设的配置文件中获取待计算数据对应的计算表达式,对所述计算表达式的预定义变量进行顺序标记,基于所述计算表达式的初始数值将标记后的预定义变量转换成中间变量生成中间变量表达式,并将所述预定义变量添加至预设表达式列表。
在本实施例中,在接收到用户发出的数据计算请求后,获取请求中待计算数据的标识,从预设存储路径读取表达式配置文件,分割解析出配置文件每个表达式,获取待计算数据对应的计算表达式,还可以识别计算表达式,识别出该表达式计算的字段和表达式计算方法(例如:表达式SUM=A+B+C,识别出SUM为需要计算字段,对应的公式为A+B+C),根据计算表达式及计算表达式的初始数值,对该表达式的预定义的变量进行标记,计算表达式如下:
if(#1020_insurancePassYears_n#<5){return 0.0;}
else if(#1020_insurancePassYears_n#==5){
return#1020_mainPremPaid_n#*0.2;
}
其中,“##”之间的变量为预定义的变量,对计算表达式可以进行顺序标记,根据初始数值将标记后的预定义变量转换为中间变量。根据标记的预定义变量的顺序,标记下标,替换为中间变量param(n),其中(n)为下标值,此时“##”间的字符串统一为param(n),以上表达式转化为中间变量表达式如下:
if(#param1#<5){return 0.0;}
else if(#param2#==5){
return#param3#*0.2;
}
得到预设表达式列表分别为:1020_insurancePassYears_n,1020_insurancePassYears_n,1020_mainPremPaid_n
请求中可以包括待计算的数据,还可以包括待计算数据的相关的存储路径及标识。也就是说,待计算的相关数据可以是用户在提交请求时一并录入的,也可以是在用户提交计算数据的请求之后,从请求中指定的地址中获取的。获取待计算数据的方法还可以提供用户交互界面供用户录入。
计算模块120,用于基于所述预设表达式列表解析所述计算表达式的预定义变量,基于该预定义变量的标识从预设数据库分别查找各个预定义变量的计算方式,基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值。
在本实施例中,根据预设表达式列表解析计算表达式的预定义变量,再根据基于该预定义变量的标识从预设数据库分别查找各个预定义变量的计算方式,基于查找到的计算方式对该预定义变量执行计算,可以得到各个预定义变量的结果值。
根据中间变量表达式列表和初始数值,及在预设数据库预先存储的预定义变量对应的计算方式,计算表达式列表中的预定义变量:1020_insurancePassYears_n,
1020_insurancePassYears_n,
1020_mainPremPaid_n,可以得到对应结果数值分别是x,y,z。
在一个实施例中,基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值包括:解析所述计算表达式的预定义变量,得到具有执行顺序的多个操作对象。
调用表达式解析器对表达式的预定义变量进行解析,确定表达式的预定义变量的字符串类型。
进一步的,解析所述计算表达式的预定义变量,得到具有执行顺序的各操作对象包括:
调用表达式解析器对所述表达式的预定义变量进行解析,确定所述表达式的预定义变量的字符串类型;
根据所述字符串类型,调用与所述字符串类型对应的字符串解析器对所述表达式字符串进行解析,得到所述具有执行顺序的多个操作对象,基于所述执行顺序依次执行多个操作对象,得到各所述预定义变量的结果值。
解析器中包括表达式解析器和类型解析器,表达式解析器用于解析并识别字符串类型,进而交给相应的类型解析器进行解析。可以结合字符串的类型,将类型解析器划分为数值常量解析器、字符串常量解析器、变量解析器、操作符解析器和函数解析器,分别用于解析数值常量类型的字符串、字符串常量类型的字符串、变量类型的字符串、操作符类型的字符串、函数类型的字符串。解析表达式字符串时,计算引擎调用表达式解析器对表达式字符串解析,确定表达式字符串的字符串类型,再根据字符串类型,调用与字符串类型对应的类型解析器对表达式字符串进行解析,解析出多个操作元素,将多个操作元素按照解析顺序组成操作元素列表。再通过转换器将操作元素列表转化得到具有执行顺序的各操作元素,按照执行顺序依次对各操作元素进行如下操作,直至各操作元素执行完成,其中,基于所述执行顺序依次执行多个操作对象包括:
判断所述操作对象是否为操作符,当所述操作对象不为操作符时,将所述操作对象对应的操作值存储至预设的栈中;
当所述操作对象为操作符时,从预设函数对象库中调用所述操作符对应的函数对象对从所述预设的栈中获取的操作值进行运算,将运算后的操作值存储至所述预设的栈中。
编译模块130,用于根据所述顺序标记将预定义变量的结果值赋值给所述中间变量表达式的中间变量,并将赋值后的中间变量表达式编译成表达式字节码。
在本实施例中,根据顺序标记将预定义变量的结果值赋值给中间变量表达式的中间变量,并将赋值后的中间变量表达式编译成表达式字节码。此时“##”之间的表达式都转换为具体中间结果数值。根据预定义变量的标记顺序,可将所有计算得到的预定义变量的结果值赋值给param(n),上述表达式结果“##”之间的表达式计算结果为x,y,z,则中间变量param1=x,param2=y,param3=z(1,2,3为预定义变量对应的下标顺序)。
结合中间表达式:
if(#param1#<5){return 0.0;}
else if(#param2#==5){
return#param3#*0.2;
}
继续识别##间变量,将初始化数值param1=x;param2=y;param3=z传入表达式。
则得到:
if(x<5){return 0.0;}
else if(y==5){
return z*0.2;
}
其中x,y,z为前面已计算得到的结果数值。
在一个实施例中,还可以将所述中间变量表达式编译成表达式字节码后,将所述中间变量表达式存储至预设内存池。保证该表达式可重复使用,避免多次初始化消耗内存。
反馈模块140,用于根据所述预定义变量的结果值及所述表达式字节码,调用计算引擎执行计算得到目标结果,将所述目标结果反馈至用户。
在本实施例中,根据预定义变量的结果值及表达式字节码,调用计算引擎执行计算得到目标结果,还可以将目标结果装载进内存,作为下一表达式的初始数值。
此外,本发明还提供一种表达式处理方法。参照图3所示,为本发明表达式处理方法的实施例的方法流程示意图。电子装置1的处理器12执行存储器11中存储的表达式处理程序10时实现表达式处理方法的如下步骤:
步骤S10:接收用户发出的数据计算请求,获取所述请求中待计算数据的标识,根据所述标识从预设的配置文件中获取待计算数据对应的计算表达式,对所述计算表达式的预定义变量进行顺序标记,基于所述计算表达式的初始数值将标记后的预定义变量转换成中间变量生成中间变量表达式,并将所述预定义变量添加至预设表达式列表。
在本实施例中,在接收到用户发出的数据计算请求后,获取请求中待计算数据的标识,从预设存储路径读取表达式配置文件,分割解析出配置文件每个表达式,获取待计算数据对应的计算表达式,还可以识别计算表达式,识别出该表达式计算的字段和表达式计算方法(例如:表达式SUM=A+B+C,识别出SUM为需要计算字段,对应的公式为A+B+C),根据计算表达式及计算表达式的初始数值,对该表达式的预定义的变量进行标记,计算表达式如下:
if(#1020_insurancePassYears_n#<5){return 0.0;}
else if(#1020_insurancePassYears_n#==5){
return#1020_mainPremPaid_n#*0.2;
}
其中,“##”之间的变量为预定义的变量,对计算表达式可以进行顺序标记,根据初始数值将标记后的预定义变量转换为中间变量。根据标记的预定义变量的顺序,标记下标,替换为中间变量param(n),其中(n)为下标值,此时“##”间的字符串统一为param(n),以上表达式转化为中间变量表达式如下:
if(#param1#<5){return 0.0;}
else if(#param2#==5){
return#param3#*0.2;
}
得到预设表达式列表分别为:1020_insurancePassYears_n,1020_insurancePassYears_n,1020_mainPremPaid_n
请求中可以包括待计算的数据,还可以包括待计算数据的相关的存储路径及标识。也就是说,待计算的相关数据可以是用户在提交请求时一并录入的,也可以是在用户提交计算数据的请求之后,从请求中指定的地址中获取的。获取待计算数据的方法还可以提供用户交互界面供用户录入。
步骤S20:基于所述预设表达式列表解析所述计算表达式的预定义变量,基于该预定义变量的标识从预设数据库分别查找各个预定义变量的计算方式,基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值。
在本实施例中,根据预设表达式列表解析计算表达式的预定义变量,再根据基于该预定义变量的标识从预设数据库分别查找各个预定义变量的计算方式,基于查找到的计算方式对该预定义变量执行计算,可以得到各个预定义变量的结果值。
根据中间变量表达式列表和初始数值,及在预设数据库预先存储的预定义变量对应的计算方式,计算表达式列表中的预定义变量:1020_insurancePassYears_n,
1020_insurancePassYears_n,
1020_mainPremPaid_n,可以得到对应结果数值分别是x,y,z。
在一个实施例中,基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值包括:解析所述计算表达式的预定义变量,得到具有执行顺序的多个操作对象。
调用表达式解析器对表达式的预定义变量进行解析,确定表达式的预定义变量的字符串类型。
进一步的,解析所述计算表达式的预定义变量,得到具有执行顺序的各操作对象包括:
调用表达式解析器对所述表达式的预定义变量进行解析,确定所述表达式的预定义变量的字符串类型;
根据所述字符串类型,调用与所述字符串类型对应的字符串解析器对所述表达式字符串进行解析,得到所述具有执行顺序的多个操作对象,基于所述执行顺序依次执行多个操作对象,得到各所述预定义变量的结果值。
解析器中包括表达式解析器和类型解析器,表达式解析器用于解析并识别字符串类型,进而交给相应的类型解析器进行解析。可以结合字符串的类型,将类型解析器划分为数值常量解析器、字符串常量解析器、变量解析器、操作符解析器和函数解析器,分别用于解析数值常量类型的字符串、字符串常量类型的字符串、变量类型的字符串、操作符类型的字符串、函数类型的字符串。解析表达式字符串时,计算引擎调用表达式解析器对表达式字符串解析,确定表达式字符串的字符串类型,再根据字符串类型,调用与字符串类型对应的类型解析器对表达式字符串进行解析,解析出多个操作元素,将多个操作元素按照解析顺序组成操作元素列表。再通过转换器将操作元素列表转化得到具有执行顺序的各操作元素,按照执行顺序依次对各操作元素进行如下操作,直至各操作元素执行完成,其中,基于所述执行顺序依次执行多个操作对象包括:
判断所述操作对象是否为操作符,当所述操作对象不为操作符时,将所述操作对象对应的操作值存储至预设的栈中;
当所述操作对象为操作符时,从预设函数对象库中调用所述操作符对应的函数对象对从所述预设的栈中获取的操作值进行运算,将运算后的操作值存储至所述预设的栈中。
步骤S30:根据所述顺序标记将预定义变量的结果值赋值给所述中间变量表达式的中间变量,并将赋值后的中间变量表达式编译成表达式字节码。
在本实施例中,根据顺序标记将预定义变量的结果值赋值给中间变量表达式的中间变量,并将赋值后的中间变量表达式编译成表达式字节码。此时“##”之间的表达式都转换为具体中间结果数值。根据预定义变量的标记顺序,可将所有计算得到的预定义变量的结果值赋值给param(n),上述表达式结果“##”之间的表达式计算结果为x,y,z,则中间变量param1=x,param2=y,param3=z(1,2,3为预定义变量对应的下标顺序)。
结合中间表达式:
if(#param1#<5){return 0.0;}
else if(#param2#==5){
return#param3#*0.2;
}
继续识别##间变量,将初始化数值param1=x;param2=y;param3=z传入表达式。
则得到:
if(x<5){return 0.0;}
else if(y==5){
return z*0.2;
}
其中x,y,z为前面已计算得到的结果数值。
在一个实施例中,还可以将所述中间变量表达式编译成表达式字节码后,将所述中间变量表达式存储至预设内存池。保证该表达式可重复使用,避免多次初始化消耗内存。
步骤S40:根据所述预定义变量的结果值及所述表达式字节码,调用计算引擎执行计算得到目标结果,将所述目标结果反馈至用户。
在本实施例中,根据预定义变量的结果值及表达式字节码,调用计算引擎执行计算得到目标结果,还可以将目标结果装载进内存,作为下一表达式的初始数值。
此外,本发明实施例还提出一种计算机可读存储介质,该计算机可读存储介质可以是硬盘、多媒体卡、SD卡、闪存卡、SMC、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器等等中的任意一种或者几种的任意组合。所述计算机可读存储介质中包括表达式处理程序10,所述表达式处理程序10被处理器执行时实现如下操作:
接收步骤:接收用户发出的数据计算请求,获取所述请求中待计算数据的标识,根据所述标识从预设的配置文件中获取待计算数据对应的计算表达式,对所述计算表达式的预定义变量进行顺序标记,基于所述计算表达式的初始数值将标记后的预定义变量转换成中间变量生成中间变量表达式,并将所述预定义变量添加至预设表达式列表;
计算步骤:基于所述预设表达式列表解析所述计算表达式的预定义变量,基于该预定义变量的标识从预设数据库分别查找各个预定义变量的计算方式,基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值;
编译步骤:根据所述顺序标记将预定义变量的结果值赋值给所述中间变量表达式的中间变量,并将赋值后的中间变量表达式编译成表达式字节码;及
反馈步骤:根据所述预定义变量的结果值及所述表达式字节码,调用计算引擎执行计算得到目标结果,将所述目标结果反馈至用户。
本发明之计算机可读存储介质的具体实施方式与上述表达式处理方法的具体实施方式大致相同,在此不再赘述。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,电子装置,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种表达式处理方法,应用于电子装置,其特征在于,所述方法包括:
接收步骤:接收用户发出的数据计算请求,获取所述请求中待计算数据的标识,根据所述标识从预设的配置文件中获取待计算数据对应的计算表达式,对所述计算表达式的预定义变量进行顺序标记,基于所述计算表达式的初始数值将标记后的预定义变量转换成中间变量生成中间变量表达式,并将所述预定义变量添加至预设表达式列表;
计算步骤:基于所述预设表达式列表解析所述计算表达式的预定义变量,基于该预定义变量的标识从预设数据库分别查找各个预定义变量的计算方式,基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值;
编译步骤:根据所述顺序标记将预定义变量的结果值赋值给所述中间变量表达式的中间变量,并将赋值后的中间变量表达式编译成表达式字节码;及
反馈步骤:根据所述预定义变量的结果值及所述表达式字节码,调用计算引擎执行计算得到目标结果,将所述目标结果反馈至用户。
2.如权利要求1所述的表达式处理方法,其特征在于,所述基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值包括:
解析所述计算表达式的预定义变量,得到具有执行顺序的多个操作对象。
3.如权利要求2所述的表达式处理方法,其特征在于,所述解析所述计算表达式的预定义变量,得到具有执行顺序的各操作对象包括:
调用表达式解析器对所述表达式的预定义变量进行解析,确定所述表达式的预定义变量的字符串类型;
根据所述字符串类型,调用与所述字符串类型对应的字符串解析器对所述表达式字符串进行解析,得到所述具有执行顺序的多个操作对象,基于所述执行顺序依次执行多个操作对象,得到各所述预定义变量的结果值。
4.如权利要求3所述的表达式处理方法,其特征在于,所述基于所述执行顺序依次执行多个操作对象包括:
判断所述操作对象是否为操作符,当所述操作对象不为操作符时,将所述操作对象对应的操作值存储至预设的栈中;
当所述操作对象为操作符时,从预设函数对象库中调用所述操作符对应的函数对象对从所述预设的栈中获取的操作值进行运算,将运算后的操作值存储至所述预设的栈中。
5.如权利要求1至4任一项所述的表达式处理方法,其特征在于,所述编译步骤包括:
将所述中间变量表达式编译成表达式字节码后,将所述中间变量表达式存储至预设内存池。
6.一种电子装置,该电子装置包括存储器及处理器,其特征在于,所述存储器上存储表达式处理程序,所述表达式处理程序被所述处理器执行,实现如下步骤:
接收步骤:接收用户发出的数据计算请求,获取所述请求中待计算数据的标识,根据所述标识从预设的配置文件中获取待计算数据对应的计算表达式,对所述计算表达式的预定义变量进行顺序标记,基于所述计算表达式的初始数值将标记后的预定义变量转换成中间变量生成中间变量表达式,并将所述预定义变量添加至预设表达式列表;
计算步骤:基于所述预设表达式列表解析所述计算表达式的预定义变量,基于该预定义变量的标识从预设数据库分别查找各个预定义变量的计算方式,基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值;
编译步骤:根据所述顺序标记将预定义变量的结果值赋值给所述中间变量表达式的中间变量,并将赋值后的中间变量表达式编译成表达式字节码;及
反馈步骤:根据所述预定义变量的结果值及所述表达式字节码,调用计算引擎执行计算得到目标结果,将所述目标结果反馈至用户。
7.如权利要求6所述的电子装置,其特征在于,所述基于查找到的计算方式对该预定义变量执行计算,得到各个预定义变量的结果值包括:
解析所述计算表达式的预定义变量,得到具有执行顺序的多个操作对象。
8.如权利要求7所述的电子装置,其特征在于,所述解析所述计算表达式的预定义变量,得到具有执行顺序的各操作对象包括:
调用表达式解析器对所述表达式的预定义变量进行解析,确定所述表达式的预定义变量的字符串类型;
根据所述字符串类型,调用与所述字符串类型对应的字符串解析器对所述表达式字符串进行解析,得到所述具有执行顺序的多个操作对象,基于所述执行顺序依次执行多个操作对象,得到各所述预定义变量的结果值。
9.如权利要求8所述的电子装置,其特征在于,所述基于所述执行顺序依次执行多个操作对象包括:
判断所述操作对象是否为操作符,当所述操作对象不为操作符时,将所述操作对象对应的操作值存储至预设的栈中;
当所述操作对象为操作符时,从预设函数对象库中调用所述操作符对应的函数对象对从所述预设的栈中获取的操作值进行运算,将运算后的操作值存储至所述预设的栈中。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括表达式处理程序,所述表达式处理程序被处理器执行时,实现如权利要求1至5中任一项所述表达式处理方法的步骤。
CN202010317154.9A 2020-04-21 2020-04-21 表达式处理方法、电子装置及存储介质 Active CN111538942B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010317154.9A CN111538942B (zh) 2020-04-21 2020-04-21 表达式处理方法、电子装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010317154.9A CN111538942B (zh) 2020-04-21 2020-04-21 表达式处理方法、电子装置及存储介质

Publications (2)

Publication Number Publication Date
CN111538942A CN111538942A (zh) 2020-08-14
CN111538942B true CN111538942B (zh) 2023-04-07

Family

ID=71979316

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010317154.9A Active CN111538942B (zh) 2020-04-21 2020-04-21 表达式处理方法、电子装置及存储介质

Country Status (1)

Country Link
CN (1) CN111538942B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112463146A (zh) * 2020-12-11 2021-03-09 中国人寿保险股份有限公司 一种健康险财务准备金输出方法、装置和电子设备
CN112861492A (zh) * 2021-01-27 2021-05-28 亿企赢网络科技有限公司 一种报表表内表间联动计算的方法、装置及电子设备
CN112835926A (zh) * 2021-02-09 2021-05-25 深圳市极致科技股份有限公司 公式引擎开发方法、装置、电子设备和存储介质
CN113688134B (zh) * 2021-08-24 2024-02-09 招商银行股份有限公司 基于多维数据的可视化变量管理方法、系统及设备
CN115169290A (zh) * 2022-07-19 2022-10-11 上海中汇亿达金融信息技术有限公司 用于标识表达式计算路径的方法
CN115438653A (zh) * 2022-09-17 2022-12-06 南京捷崎信息科技有限公司 一种遥测数据分析表达式重复计算方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108460253A (zh) * 2018-02-12 2018-08-28 北京梆梆安全科技有限公司 基于顺序、符号执行和单点逻辑的源代码加固方法及装置
WO2019157812A1 (zh) * 2018-02-13 2019-08-22 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110321118A (zh) * 2019-07-05 2019-10-11 深圳市智慧郎数码科技有限公司 函数代码的生成方法及相关设备

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101196927A (zh) * 2007-12-29 2008-06-11 中国建设银行股份有限公司 一种数据映射方法及一种数据映射装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108460253A (zh) * 2018-02-12 2018-08-28 北京梆梆安全科技有限公司 基于顺序、符号执行和单点逻辑的源代码加固方法及装置
WO2019157812A1 (zh) * 2018-02-13 2019-08-22 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110321118A (zh) * 2019-07-05 2019-10-11 深圳市智慧郎数码科技有限公司 函数代码的生成方法及相关设备

Also Published As

Publication number Publication date
CN111538942A (zh) 2020-08-14

Similar Documents

Publication Publication Date Title
CN111538942B (zh) 表达式处理方法、电子装置及存储介质
CN111026797A (zh) 业务数据处理方法、服务器及存储介质
CN109901834B (zh) 文档页面生成方法、装置、计算机设备和存储介质
CN106951228B (zh) 版本迭代中差异的处理方法和装置
CN110287702B (zh) 一种二进制漏洞克隆检测方法及装置
CN111459495B (zh) 单元测试代码文件生成方法、电子装置及存储介质
CN109471857B (zh) 基于sql语句的数据修改方法、装置及存储介质
CN108459964B (zh) 测试用例选择方法、装置、设备以及计算机可读存储介质
CN102750152B (zh) 一种基于描述语言生成多种编程语言的应用的方法及装置
CN108845839B (zh) 应用页面加载方法、装置及计算机可读存储介质
CN107656729B (zh) 列表视图的更新装置、方法及计算机可读存储介质
US20130347118A1 (en) License verification method and apparatus, and computer readable storage medium storing program therefor
CN108762767B (zh) 应用发布方法、装置及计算机可读存储介质
CN108874464B (zh) 中间件自动扫描装配方法、装置及存储介质
CN112749081A (zh) 用户界面测试方法及相关装置
CN111694613A (zh) 应用程序模块间的解耦方法、电子装置及存储介质
KR20140050323A (ko) 라이선스 검증 방법 및 그 장치
CN116245074A (zh) 芯片验证方法、设备及存储介质
CN116975010A (zh) 一种电子材料库共享方法及系统
CN110688315A (zh) 接口代码检测报告生成方法、电子装置及存储介质
CN111860641A (zh) 电网图像识别方法、电子装置及存储介质
CN112083925A (zh) 基于h5页面开发的数据获取方法、装置、设备及存储介质
CN110716914A (zh) 数据库配置方法、系统、计算机可读存储介质及终端设备
CN111782239A (zh) 软件打包和源码版本信息获取方法、装置及存储介质
CN116302054A (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