数据结算方法、装置、设备及存储介质与流程

文档序号:31084494发布日期:2022-08-09 22:50阅读:90来源:国知局
数据结算方法、装置、设备及存储介质与流程

1.本技术实施例涉及计算机技术领域,尤其涉及一种数据结算方法、装置、设备及存储介质。


背景技术:

2.随着业务发展和多样性需求,与业务相关的数据结算的需求日渐突出。以物流场景为例,需要对不同物流头程、清关、尾程的各种结算规则进行统一的物流成本计算,因此如何进行高效的计算成为了当前的主要课题。
3.相关技术中,通过使用编写的脚本语言执行数据结算相较于传统的人工处理的方式,可以显著的节省人工成本,但是针对现有的大多数脚本而言,其在平台上执行效率过低,例如groovy脚本执行速度是java原生语言的十分之一不到,面对复杂的数据结算场景,通用脚本语言无法满足实时成本结算的业务需求,同时其安全性上也存在一定不足。


技术实现要素:

4.本技术实施例提供了一种数据结算方法、装置、设备及存储介质,显著提升了数据计算效率,可扩展性强,安全性更高。
5.第一方面,本技术实施例提供了一种数据结算方法,该方法包括:
6.在检测到数据结算事件时,获取待计算数据,对所述待计算数据进行词法分析生成词法分析结果;
7.对所述词法分析结果采用基于计算语法的语法分析得到可执行语法树;
8.根据所述可执行语法树进行所述待计算数据的计算得到数据结算结果。
9.第二方面,本技术实施例还提供了一种数据结算装置,包括:
10.数据获取模块,配置为在检测到数据结算事件时,获取待计算数据;
11.词法分析模块,配置为对所述待计算数据进行词法分析生成词法分析结果;
12.语法分析模块,配置为对所述词法分析结果采用基于计算语法的语法分析得到可执行语法树;
13.计算模块,配置为根据所述可执行语法树进行所述待计算数据的计算得到数据结算结果。
14.第三方面,本技术实施例还提供了一种数据结算设备,该设备包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序;所述处理器执行所述计算机程序时,实现如本技术实施例所述的数据结算方法。
15.第四方面,本技术实施例还提供了一种存储计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行本技术实施例所述的数据结算方法。
16.第五方面,本技术实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中,设备的至少一个处理器从计算机可读存储介质读取并执行计算机程序,使得设备执行本技术实施例所述的数据结算方
法。
17.本技术实施例中,在检测到数据结算事件时,获取待计算数据,对待计算数据进行词法分析生成词法分析结果,对词法分析结果采用基于计算语法的语法分析得到可执行语法树,根据可执行语法树进行待计算数据的计算得到数据结算结果,该种数据结算的计算方式,能够实现对复杂结算规则的灵活配置,可以实现大规模的实时结算,扩展性高,安全性良好。
附图说明
18.图1为本技术实施例提供的一种数据结算方法的流程图;
19.图2为本技术实施例提供的另一种数据结算方法的流程图;
20.图3为本技术实施例提供的一种可执行语法树示意图;
21.图4为本技术实施例提供的另一种数据结算方法的流程图;
22.图5为本技术实施例提供的另一种数据结算方法的流程图;
23.图6为本技术实施例提供的另一种数据结算方法的流程图
24.图7为本技术实施例提供的一种数据结算装置的结构框图;
25.图8为本技术实施例提供的一种数据结算设备的结构示意图。
具体实施方式
26.下面结合附图和实施例对本技术实施例作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本技术实施例,而非对本技术实施例的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本技术实施例相关的部分而非全部结构。
27.本技术的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
28.下面结合附图对本技术实施例作进一步阐述。
29.图1为本技术实施例提供的一种数据结算方法的流程图,可用于多个不同场景下的数据结算,该方法可以由涉及数据结算的计算设备如服务器、智能终端、笔记本电脑、平板电脑等来执行,具体包括如下步骤:
30.步骤s101、在检测到数据结算事件时,获取待计算数据,对所述待计算数据进行词法分析生成词法分析结果。
31.其中,该数据结算事件为触发数据结算的具体事件。示例性的,可以是针对显示屏幕中显示的数据结算按钮的点击事件,也可以是由其它关联的程序运行时触发的事件。
32.其中,待计算数据为需要对其进行运算得到对应的数据结算结果的数据。示例性的,该待计算数据可以是由字符串组成的文本数据。可选的,该字符串可以是由构成一个或多个表达式的字符组成的字符串。在一个实施例中,该字符划分为数字字符、普通字符和运算符。
33.其中,词法分析指对字符串进行分词解析,将字符串文本解析规约成单词。在一个实施例中,该待计算数据包括脚本文本数据。图2为本技术实施例提供的一种具体的进行词法分析的流程图,给出了一种具体的对待计算数据进行词法分析的过程,如图2所示,包括:
34.步骤s1011、对所述脚本文本数据中的字符进行识别。
35.在一个实施例中,进行词法分析时,采用对待计算数据中的字符进行识别以进行分词的方式。可选的,具体的字符的识别过程,可以是将待识别的字符分别和设置的多种不同的字符列表进行依次比对,如果比对成功则确定识别到该比对成功的字符。例如当前提取的字符为“+”,通过字符比对得出和列表中设置的运算符“+”一致,则确定识别到运算符“+”,具体的比对过程可以是进行字符的对应的机器编码的比对。
36.步骤s1012、基于对所述脚本文本数据中的字符的识别结果以及设置的词法规约规则,进行分词得到词法分析结果,所述词法规约规则包括不同的字符类型和不同的词法前置规约状态下对应的词法规约模式。
37.在一个实施例中,采取以运算符优先的分词方式,识别出运算符和非运算符后,基于设置的词法规约规则,进行分词得到词法分析结果。其中,该分词结果可以是由多个分词得到的单词串联组成的单词数组。
38.在一个实施例中,针对不同的字符类型和不同的词法前置规约状态设置对应的词法规约模式。其中,字符类型包括运算符和非运算符,在非运算符中可进一步分类为数字和普通字符,词法前置规约状态包括开始状态、操作符规约状态和变量规约状态。具体的,词法规约规则的状态机如下表所示:
[0039][0040]
示例性的,通过词法分析规约得到的不同的单词类型和示例性的举例如下:
[0041]
[0042][0043]
步骤s102、对所述词法分析结果采用基于计算语法的语法分析得到可执行语法树。
[0044]
在一个实施例中,得到词法分析结果后进一步的对其进行语法分析,具体的采用基于计算语法的语法分析方式进行分析。本方案中,以词法分析结果为单词数组,即包括分好词的多个单词为例,语法分析指对单词进行语义分析,通过运算符优先级分析方式将单词序列规约成抽象语法树。示例性的,假设表达式为e=(a+b)*c+d,根据运算符优先级先算乘除后算加减,如果有括号则先算括号,即经过语法分析得到的可执行语法树如图3所示,图3为本技术实施例提供的一种可执行语法树示意图。
[0045]
在一个实施例中,具体的生成可执行语法树的过程可以是:基于设置的语法规约规则,对所述单词数组中的每个单词进行规约得到可执行语法树。其中,语法规约规则根据运算优先级排序确定,语法规约规则包括不同的单词类型和不同的语法前置规约状态下对应的语法规约模式。可选的,单词类型包括单字符操作符、多字符操作符、左括号、右括号、函数声明、参数列表以及变量,语法前置规约状态包括开始状态、单目操作符规约状态、双目操作符规约状态、括号规约状态、函数规约状态和列表规约状态,语法规约模式包括单目操作符规约模式、双目操作符规约模式、括号规约模式、函数规约模式和列表规约模式。示例性的,部分语法规约规则的分析状态机如下表所示:
[0046]
[0047]
具体的,上述语法规约模式中,双目运算符规约为针对双目运算符进行的规约,示例性的如针对求和符号的规约;单目运算符规约为针对单目运算符进行的规约,示例性的如针对按位取反符号的规约;括号规约方式中,针对括号内的子句内容进行递归性的再次规约;函数规约方式为针对函数名加括号表达式的内容的规约,如max(a,b);参数列表规约针对有逗号符号的表达式的规约,如(a,b,c)。
[0048]
步骤s103、根据所述可执行语法树进行所述待计算数据的计算得到数据结算结果。
[0049]
其中,可执行语法树为一种计算机可执行的数据结构,即通过对待计算数据进行词法分析和语法分析进行规约得到的结果。可执行语法树中的每个节点代表变量或操作符,父节点对应的变量由子节点的变量和操作符进行运算得到,该可执行语法树的最终的根节点规约为变量。示例性的,上述的变量可包括表达式和参数,参数包括常量参数和变量参数,表达式包括一元表达式、二元表达式、函数表达式和括号表达式等,其中每个表达式可进一步划分为多个子节点;操作符包括单目操作符、双目操作符、函数操作符和占位符等。
[0050]
在一个实施例中,得到可执行语法树后通过对该可执行语法树的各个节点进行遍历运算以得到最终的数据结算结果。可选的,包括将待计算数据中对应变量的参数值输入至可执行语法树中,输出数据结算结果。
[0051]
示例性的,以物流场景为例,每个计算项目和对应的表达式如下表所示(为便于理解,增加相关说明一列):
[0052]
[0053]
由上述方案可知,在检测到数据结算事件时,获取待计算数据,对待计算数据进行词法分析生成词法分析结果,对词法分析结果采用基于计算语法的语法分析得到可执行语法树,根据可执行语法树进行待计算数据的计算得到数据结算结果,该种数据结算的计算方式,实现对复杂结算规则的灵活配置,可以实现大规模的实时结算,扩展性高;通过设置的词法和语法分析规则将待计算数据转化为可执行语法树,在规约过程中利用运算符优先级进行分词,采用计算语法的语法分析,不掺杂其它语法分析和分词方式,使得可执行语法树的生成过程更加安全可靠。
[0054]
在具体的测试过程中,以对脚本xt00025n+xt00026n*xt00027n为例进行测试,采用传统的脚本groovy进行十万次的计算耗时2744毫秒,采用本方案的计算方法,执行十万次的计算耗时为12毫秒,其中生成可执行语法树时的编译十万次的耗时为89毫秒,词法分析十万次的耗时为35毫秒,语法分析十万次的耗时为4毫秒,显著由于现有技术。
[0055]
图4为本技术实施例提供的另一种数据结算方法的流程图,给出了一种具体的进行分词得到词法分析结果的过程,如图4所示,包括:
[0056]
步骤s201、在检测到数据结算事件时,获取脚本文本数据,对所述脚本文本数据以堆栈结构形式,进行逐个字符识别,根据识别得到的字符类型以及确定出的词法前置规约状态确定当前字符的词法规约模式,并进行相应的规约处理得到词法分析结果。
[0057]
在一个实施例中,进行词法分析以实现规约处理的过程中,将脚本文本数据存入堆栈数据结构中,进行规约处理时,进行字符的依次出栈操作,对出栈的字符进行识别以及规约处理,直到所有字符出栈完毕为止,判定词法分析结束,返回词法分析结果。
[0058]
可选的,针对出栈的字符,进行字符类型的识别,如果为普通字符或数字则相应的入操作符栈,直到识别出运算符类型的字符后,执行操作符栈的规约,如执行操作符栈的变量规约,将操作符栈中的非运算符规约为一个变量,同时进一步的针对该运算符执行运算符规约,规约为单目运算符、双目运算符等。
[0059]
具体的,以计算内容为xt00025n+xt00026n*xt00027n为例,从开始的第一个x依次进行字符识别,识别到xt00025n中的“n”之前为普通字符和数字字符,“xt00025n”入操作符栈,在识别到“+”时,检测到运算符“+”,此时字符类型由非运算符变更为运算符,即出现了字符类型的状态变化,执行操作符栈的变量规约,得到变量单词“xt00025n”,针对“+”则规约为操作符,在识别到第二个“x”时,字符类型由运算符变更为普通字符,此时执行操作符规约得到操作符单词“+”,此时针对第二个“x”执行入操作符栈,依次类推,进行词法分析得到后续的单词xt00026n、*以及xt00027n。
[0060]
步骤s202、对所述词法分析结果采用基于计算语法的语法分析得到可执行语法树。
[0061]
步骤s203、根据所述可执行语法树进行所述待计算数据的计算得到数据结算结果。
[0062]
由上述可知,采用运算符优先的词法分析方式,通过运算符的识别对待计算数据进行分词,适应了数据结算尤其是物流数据结算的场景,可根据不同的待计算数据进行可扩展的灵活的分词,提高了整体的数据结算效率。
[0063]
图5为本技术实施例提供的另一种数据结算方法的流程图,给出了一种具体的进行分词得到语法分析结果的过程,如图5所示,包括:
[0064]
步骤s301、在检测到数据结算事件时,获取待计算数据,对所述待计算数据进行词法分析生成单词数组。
[0065]
步骤s302、对所述单词数组以堆栈结构形式,进行逐个单词的类型识别,根据识别得到的单词类型以及确定出的单词前置规约状态确定当前单词的语法规约模式,并进行相应的规约处理得到可执行语法树。
[0066]
在一个实施例中,将单词数组存入堆栈数据结构中,依次进行单词的出栈操作,并识别单词类型,如果为变量类型的单词,则入单词待规约栈进行规约;如果当前单词类型为操作符,则确定前置操作符的优先级,如果前置操作符的优先级高,则执行前置操作符的语法规约规则,否则将该操作符入单词待规约栈进行规约,直到堆栈数据结构中的单词为空,且单词待规约栈为空后,返回抽象语法树即可执行语法树的根节点,用于数据结算。
[0067]
步骤s303、根据所述可执行语法树进行所述待计算数据的计算得到数据结算结果。
[0068]
由上述可知,通过语法分析将单词遵从自定义语法规约为一个树形结构,规约的过程遵从运算符优先级排序,适应了数据结算尤其是物流数据结算的场景,可根据不同的待计算数据进行可扩展的灵活的分词,提高了整体的数据结算效率。
[0069]
在上述技术方案的基础上,进行词法分析和语法分析的同时,进一步包括对语法合法性进行检验的步骤,以禁止非法语法参与执行计算,具体的非法语法可相应的在语法分析规约规则中配置,如前述的状态机表格中的记录。由此,保证了计算结果的合理性和准确性,同时针对不合法情况可及时的给出提示。
[0070]
图6为本技术实施例提供的另一种数据结算方法的流程图,给出了一种对可执行语法树进行缓存,和基于缓存的可执行语法树进行数据结算的方法,如图6所示,包括:
[0071]
步骤s401、在检测到数据结算事件时,获取脚本文本数据,对所述脚本文本数据以堆栈结构形式,进行逐个字符识别,根据识别得到的字符类型以及确定出的词法前置规约状态确定当前字符的词法规约模式,并进行相应的规约处理生成单词数组。
[0072]
步骤s402、对所述单词数组以堆栈结构形式,进行逐个单词的类型识别,根据识别得到的单词类型以及确定出的单词前置规约状态确定当前单词的语法规约模式,并进行相应的规约处理得到可执行语法树。
[0073]
步骤s403、根据所述可执行语法树进行所述待计算数据的计算得到数据结算结果。
[0074]
步骤s404、对所述可执行语法树进行缓存,用于后续的数据结算处理。
[0075]
在一个实施例中,得到可执行语法树后对其进行缓存。可选的,针对不同场景下的不同数据结算过程,分别在生成可执行语法树后,对其进行缓存。在后续的进行数据结算的过程中,首先从缓存中查找是否命中对应的可执行语法树,如果命中则直接进行计算,否则生成可执行语法树后进行计算。
[0076]
由上述可知,根据可执行语法树进行所述待计算数据的计算得到数据结算结果后,对可执行语法树进行缓存,用于后续的数据结算处理,可以进一步显著提升数据结算的处理效率,无需重复的进行同一可执行语法树的生成。
[0077]
图7为本技术实施例提供的一种数据结算装置的结构框图,该装置用于执行上述实施例提供的数据结算方法,具备执行方法对应的功能模块和有益效果。如图7所示,该装
置具体包括:数据获取模块101、词法分析模块102、语法分析模块103和计算模块104,其中,
[0078]
数据获取模块101,配置为在检测到数据结算事件时,获取待计算数据;
[0079]
词法分析模块102,配置为对所述待计算数据进行词法分析生成词法分析结果;
[0080]
语法分析模块103,配置为对所述词法分析结果采用基于计算语法的语法分析得到可执行语法树;
[0081]
计算模块104,配置为根据所述可执行语法树进行所述待计算数据的计算得到数据结算结果。
[0082]
由上述方案可知,在检测到数据结算事件时,获取待计算数据,对待计算数据进行词法分析生成词法分析结果,对词法分析结果采用基于计算语法的语法分析得到可执行语法树,根据可执行语法树进行待计算数据的计算得到数据结算结果,该种数据结算的计算方式,能够实现对复杂结算规则的灵活配置,可以实现大规模的实时结算,扩展性高,安全性良好。其中,上述各个模块执行的功能可选的如下所述:
[0083]
在一个可能的实施例中,所述待计算数据包括脚本文本数据,所述对所述待计算数据进行词法分析生成词法分析结果,包括:
[0084]
对所述脚本文本数据中的字符进行识别;
[0085]
基于对所述脚本文本数据中的字符的识别结果以及设置的词法规约规则,进行分词得到词法分析结果,所述词法规约规则包括不同的字符类型和不同的词法前置规约状态下对应的词法规约模式。
[0086]
在一个可能的实施例中,所述字符类型包括运算符、数字和普通字符,所述词法前置规约状态包括开始状态、操作符规约状态和变量规约状态,所述词法规约模式包括操作符规约和变量规约。
[0087]
在一个可能的实施例中,所述对所述脚本文本数据中的字符进行识别,基于对所述脚本文本数据中的字符的识别结果以及设置的词法规约规则,进行分词得到词法分析结果,包括:
[0088]
对所述脚本文本数据以堆栈结构形式,进行逐个字符识别;
[0089]
根据识别得到的字符类型以及确定出的词法前置规约状态确定当前字符的词法规约模式,并进行相应的规约处理。
[0090]
在一个可能的实施例中,所述词法分析结果包括单词数组,所述对所述词法分析结果采用基于计算语法的语法分析得到可执行语法树,包括:
[0091]
基于设置的语法规约规则,对所述单词数组中的每个单词进行规约得到可执行语法树,所述语法规约规则根据运算优先级排序确定,所述语法规约规则包括不同的单词类型和不同的语法前置规约状态下对应的语法规约模式。
[0092]
在一个可能的实施例中,所述单词类型包括单字符操作符、多字符操作符、左括号、右括号、函数声明、参数列表以及变量,所述语法前置规约状态包括开始状态、单目操作符规约状态、双目操作符规约状态、括号规约状态、函数规约状态和列表规约状态,所述语法规约模式包括单目操作符规约模式、双目操作符规约模式、括号规约模式、函数规约模式和列表规约模式。
[0093]
在一个可能的实施例中,所述基于设置的语法规约规则,对所述单词数组中的每个单词进行规约得到可执行语法树,包括:
[0094]
对所述单词数组以堆栈结构形式,进行逐个单词的类型识别;
[0095]
根据识别得到的单词类型以及确定出的单词前置规约状态确定当前单词的语法规约模式,并进行相应的规约处理得到可执行语法树,其中,如果当前单词类型为操作符,则确定前置操作符的优先级,如果所述前置操作符的优先级高,则执行所述前置操作符的语法规约规则。
[0096]
在一个可能的实施例中,所述可执行语法树的语法根节点为变量,所述可执行语法树由变量和操作符组成,所述变量包括表达式和参数,所述根据所述可执行语法树进行所述待计算数据的计算得到数据结算结果,包括:
[0097]
将所述待计算数据中对应变量的参数值输入至所述可执行语法树中,输出数据结算结果。
[0098]
在一个可能的实施例中,在对所述词法分析结果采用基于计算语法的语法分析得到可执行语法树之后,还包括:
[0099]
对所述可执行语法树进行缓存,用于后续的数据结算处理。
[0100]
图8为本技术实施例提供的一种数据结算设备的结构示意图,如图8所示,该设备包括处理器201、存储器202、信息收发装置203和输出装置204;设备中处理器201的数量可以是一个或多个,图中以一个处理器201为例;设备中的处理器201、存储器202和信息收发装置203可以通过总线或其他方式连接,图中以通过总线连接为例。存储器202作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本技术实施例中的数据结算方法对应的程序指令/模块。处理器201通过运行存储在存储器202中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的数据结算方法。信息收发装置203,用于接收用于输入的数字或字符信息,以及发送处理后的输出信息。输出装置204可以包括显示屏等显示设备。
[0101]
本技术实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种上述的数据结算方法,具体包括:
[0102]
在检测到数据结算事件时,获取待计算数据,对所述待计算数据进行词法分析生成词法分析结果;对所述词法分析结果采用基于计算语法的语法分析得到可执行语法树;根据所述可执行语法树进行所述待计算数据的计算得到数据结算结果。
[0103]
值得注意的是,上述视频档位选择装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本技术实施例的保护范围。
[0104]
在一些可能的实施方式中,本技术提供的方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在计算机设备上运行时,所述程序代码用于使所述计算机设备执行本说明书上述描述的根据本技术各种示例性实施方式的方法中的步骤,例如,所述计算机设备可以执行本技术实施例所记载的数据结算方法。所述程序产品可以采用一个或多个可读介质的任意组合实现。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1