一种数据处理的方法、装置和存储介质

文档序号:1952864 发布日期:2021-12-10 浏览:23次 >En<

阅读说明:本技术 一种数据处理的方法、装置和存储介质 (Data processing method, device and storage medium ) 是由 周涛 于 2020-11-04 设计创作,主要内容包括:本申请公开了一种数据处理的方法、装置和存储介质,具体为获取输入字符串,利用获取到的输入字符串,生成与输入字符串对应的运算符字符串,其中,运算符字符串包含输入字符串中的运算符、以及输入字符串中的实际变量参数被呈现为第一数据格式的字符项,在已注册的运算符中匹配运算符字符串中的运算符,当匹配到已注册的运算符时,调用为指定运算符创建的运算符函数处理运算符字符串中的字符项,其中,运算符函数为与注册后的该运算符函数对应的运算符的功能相匹配的功能函数。本申请实施例通过增加自定义的运算符语法,支持封装各种自定义运算符逻辑和自定义运算符函数名称,提升运算符的逻辑顺序可读性。(The application discloses a data processing method, a data processing device and a data processing storage medium, and particularly relates to a method for acquiring an input character string, generating an operator character string corresponding to the input character string by using the acquired input character string, wherein the operator character string comprises operators in the input character string and actual variable parameters in the input character string are presented as character items in a first data format, matching operators in the operator character string in a registered operator, and calling an operator function established for a specified operator to process the character items in the operator character string when the operator character string is matched with the registered operator, wherein the operator function is a function matched with the function of the operator corresponding to the operator function. The embodiment of the application supports encapsulation of various custom operator logics and custom operator function names by adding custom operator grammars, and improves the readability of the logic sequence of operators.)

一种数据处理的方法、装置和存储介质

技术领域

本申请涉及计算机技术领域,尤其涉及一种数据处理的方法、装置和存储介质。

背景技术

运算符在编程语言中是很常用的,通常每种语言都会提供若干种内置支持的运算符,如“+、-、!、=”等。但每种语言提供的运算符均不完全相同,比如Swift支持的“..”运算符,Javascript就不支持。因为Javascript不支持自定义运算符功能,在Javascript中使用“..”运算符并不可行。

在此情况下,可通过在Javascript中创建一个与“..”运算符功能相同的函数,来达到相同效果。如可定义range(1,100),它的计算结果和Swift中1..100计算的结果是一样的,都是值为1到100的数组,即[1,2,4,…,100]。但使用函数与运算符相比,函数语法的逻辑顺序可读性不如运算符清晰。如Swift中的(1..<100).count..1000表达式,在Javascript中使用函数模拟则为range(closedRange(1,100).length),1000),可以看出函数由于只能在括号内传参数,所以在语句的逻辑顺序可读性上没有运算符清晰,特别是较长的语句。另外,运算符的语义往往是一种特殊的计算或逻辑判断,而现有的Javascript的函数只能用规定支持的字符命名(字母、中文、下划线、美元符号),使得函数不能使用特殊字符命名,不具有特定性。

发明内容

本申请实施例提供了一种数据处理的方法,克服了Javascript语言中不可使用自定义运算符的问题。

该方法包括:

获取输入字符串;

利用获取到的输入字符串,生成与所述输入字符串对应的运算符字符串,其中,所述运算符字符串包含所述输入字符串中的所述运算符、以及所述输入字符串中的实际变量参数被呈现为第一数据格式的字符项;

在已注册的所述运算符中匹配所述运算符字符串中的所述运算符;

当匹配到已注册的运算符时,调用为指定运算符创建的所述运算符函数处理所述运算符字符串中的所述字符项,其中,所述运算符函数为与注册后的该运算符函数对应的所述运算符的功能相匹配的功能函数。

可选地,对于每个所述运算符,将与该所述运算符的功能相匹配的所述功能函数作为对应的所述运算符函数,并创建包含所述运算符函数的函数名、以及该所述运算符的运算符名称的键值对;

保存创建的所述键值对之间的映射关系。

可选地,通过运算符执行函数对所述输入字符串进行解析,生成去除所述实际变量参数后的第一字符串数组,以及将按顺序提取的所述输入字符串中的各个所述实际变量参数作为第二字符串数组;

循环所述第一字符串数组,在所述第一字符串数组的各个所述实际变量参数对应的位置添加所述第一数据格式的字符项,其中,所述x从0开始每循环一项加1直至所述第一字符串循环结束,以生成与所述输入字符串对应的所述运算符字符串。

可选地,在运算符抽象结构库中查找以所述运算符字符串为第一索引值的运算符抽象结构,并在未查找到对应的所述运算符抽象结构时,为所述运算符字符串创建所述运算符抽象结构,并以该所述运算符字符串为所述第一索引值保存至所述运算符抽象结构库中。

可选地,在所述运算符字符串中,筛选出除首个所述第一数据格式的字符项外的与所述运算符直接相连的所述第一数据格式的字符项,并在所述运算符与所述第一数据格式的字符项之间添加间隔符号;

在所述运算符字符串中,筛选出包含所述间隔符号的所述运算符和所述第一数据格式的字符项组成的结构字符串,并将所述结构字符串中包含的所述运算符对应的所述运算符名称作为该所述结构字符串的名称属性;

将每个所述结构字符串的所述第一数据格式的字符项中所述x作为所述实际变量参数的第二索引值进行存储。

可选地,判断首个所述第一数据格式的字符项的最左侧是否为非空字符,并在不为非空字符时,为所述运算符抽象结构添加所述多元运算符标识,其中,所述多元运算符标识为首个所述第一数据格式的字符项中所述x对应的所述实际变量参数的索引值。

可选地,当匹配到的所述运算符抽象结构未携带所述多元运算符标识时,在所述运算符抽象结构中获取所述结构字符串,并基于所述结构字符串的所述名称属性,在所述键值对之间的所述映射关系中获取对应的所述运算符函数;

基于所述运算符抽象结构中的每个所述结构字符串包含的所述第二索引值,在所述第二字符串数组中查找对应的所述实际变量参数,并将所述实际变量参数按照对应的所述第一数据格式的字符项所在的位置放置;

循环执行包含所述实际变量参数的所述运算符函数,并将前一个所述运算符函数的运算结果作为后一个所述运算符函数中的第一个参数。

可选地,当匹配到的所述运算符抽象结构携带所述多元运算符标识时,在所述运算符抽象结构中获取所述结构字符串,并基于所述结构字符串的所述名称属性,在所述键值对之间的所述映射关系中获取对应的所述运算符函数;

基于所述多元运算符标识在所述第二字符串数组中查找对应的所述实际变量参数,并将该所述实际变量参数作为于第一个所述运算符函数的第一个参数;

基于所述运算符抽象结构中的每个所述结构字符串包含的所述第二索引值,在所述第二字符串数组中查找对应的所述实际变量参数,并将所述实际变量参数按照对应的所述第一数据格式的字符项所在的位置放置;

循环执行包含所述实际变量参数的所述运算符函数,并将前一个所述运算符函数的运算结果作为后一个所述运算符函数中的第一个参数。

可选地,输出最后一个运算符函数的运行结果作为所述输入字符串对应的所述运行结果。

可选地,所述第一数据格式为${x}格式。

在本发明的另一个实施例中,提供了一种数据处理的装置,该装置包括:

获取模块,用于获取输入字符串;

生成模块,用于利用获取到的输入字符串,生成与所述输入字符串对应的运算符字符串,其中,所述运算符字符串包含所述输入字符串中的所述运算符、以及所述输入字符串中的实际变量参数被呈现为第一数据格式的字符项;

匹配模块,用于在已注册的所述运算符中匹配所述运算符字符串中的所述运算符;

调用模块,用于当匹配到已注册的运算符时,调用为指定运算符创建的所述运算符函数处理所述运算符字符串中的所述字符项,其中,所述运算符函数为与注册后的该运算符函数对应的所述运算符的功能相匹配的功能函数。

在本发明的另一个实施例中,提供了一种非瞬时计算机可读存储介质,所述非瞬时计算机可读存储介质存储指令,所述指令在由处理器执行时使得所述处理器执行上述一种数据处理的方法中的各个步骤。

在本发明的另一个实施例中,提供了一种终端设备,包括处理器,所述处理器用于执行上述一种数据处理的方法中的各个步骤。

基于上述实施例,首先获取输入字符串,利用获取到的输入字符串,生成与输入字符串对应的运算符字符串,其中,运算符字符串包含输入字符串中的运算符、以及输入字符串中的实际变量参数被呈现为第一数据格式的字符项,在已注册的运算符中匹配运算符字符串中的运算符,当匹配到已注册的运算符时,调用为指定运算符创建的运算符函数处理运算符字符串中的字符项,其中,运算符函数为与注册后的该运算符函数对应的运算符的功能相匹配的功能函数。本申请实施例通过增加自定义的运算符语法,支持封装各种自定义运算符逻辑和自定义运算符函数名称,提升运算符的逻辑顺序可读性。

附图说明

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

图1示出了为本申请实施例100所提供的一种数据处理的方法的流程示意图;

图2示出了本申请实施例200提供的注册运算符的具体流程的示意图;

图3示出了本申请实施例300中提供的创建运算符抽象结构的具体流程的示意图;

图4示出了本申请实施例400提供的一种数据处理的方法的具体流程的示意图;

图5示出了本申请实施例500还提供一种数据处理的装置的示意图;

图6示出了本申请实施例600所提供的一种终端设备的示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其他步骤或单元。

基于现有技术中的问题,本申请实施例提供了一种数据处理的方法,主要适用于计算机技术领域。通过利用Javascript已有的Tagged Templates语法基础上自研设计增加了新的自定义运算符语法,支持封装各种自定义运算符逻辑,并支持参数嵌套及与普通Javascript运算符进行混合运算等必要特性,整体符合类似于普通运算符的逻辑顺序可读性,以实现一种数据处理的方法。以下几个具体实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。本申请实施例的应用场景主要为基于JavaScript的语言环境。JavaScript(简称“JS”)是一种具有函数优先的轻量级、解释型或即时编译型的高级编程语言,是前端开发技术的主要编程语言,用途非常广泛。如图1所示,为本申请实施例100提供的一种数据处理的方法的流程示意图。其中,本申请实施例中的第一数据格式为${x}格式。该方法的详细步骤如下:

步骤S11,获取输入字符串。

本步骤中,将与至少一个运算符的功能相匹配的功能函数注册为对应的运算符函数之后,使用运算符和实际变量参数组成的需要进行运算的输入字符串。其中输入字符串中的运算符可为已注册的自定义运算符或Javascript语言中的普通运算符。

步骤S12,利用获取到的输入字符串,生成与输入字符串对应的运算符字符串,其中,运算符字符串包含输入字符串中的运算符、以及输入字符串中的实际变量参数被呈现为第一数据格式的字符项。

本步骤中,使用运算符执行函数对输入字符串进行初始处理。具体地,通过在输入字符串中筛选出去除实际变量参数保留运算符,并将实际变量参数替换为第一数据格式的字符项。其中,第一数据中的x的初始值为0,并根据运算符的个数循环加1。进一步地,将经过前述处理包括运算符和第一数据格式的字符项的字符串确定为输入字符串对应的运算符字符串。其中,本申请实施例中的第一数据格式为${x}格式。

步骤S13,在已注册的运算符中匹配运算符字符串中的运算符。

本步骤中,基于生成的运算符字符串,若其中包含自定义的运算符,需要在已经注册的运算符中匹配该运算符,以确定该运算符的运算逻辑,并使用与运算符对应的运算符函数处理运算符字符串中的运算符。

步骤S14,当匹配到已注册的运算符时,调用为指定运算符创建的运算符函数处理运算符字符串中的字符项,其中,运算符函数为与注册后的该运算符函数对应的运算符的功能相匹配的功能函数。

本步骤中,在获取输入字符串前,将与至少一个运算符的功能相匹配的功能函数注册为对应的运算符函数。进一步地,运算符执行函数在匹配到已注册的运算符时,调用运算符函数并提取对应的各个实际变量参数,按照运算符字符串各个运算符的嵌套逻辑,对运算符字符串中的字符项进行处理,生成运行结果。

如上所述,基于上述实施例,具体为首先获取输入字符串,利用获取到的输入字符串,生成与输入字符串对应的运算符字符串,其中,运算符字符串包含输入字符串中的运算符、以及输入字符串中的实际变量参数被呈现为第一数据格式的字符项,在已注册的运算符中匹配运算符字符串中的运算符,当匹配到已注册的运算符时,调用为指定运算符创建的运算符函数处理运算符字符串中的字符项,其中,运算符函数为与注册后的该运算符函数对应的运算符的功能相匹配的功能函数。本申请实施例通过增加自定义的运算符语法,支持封装各种自定义运算符逻辑和自定义运算符函数名称,提升运算符的逻辑顺序可读性。

为便于表述,首先释明本申请实施例中的运算符在各种场景中的使用方式:

(1)最常用的二元运算符:

(2)右侧含多个参数的二元运算符:

(3)有嵌套的场景:

嵌套执行为Tagged Templates语法默认提供,无需自行实现。利用嵌套,可以实现各种各样的语法逻辑,具有非常强大的适应性,例如:

o`${o`${1}..<(${o`${100}..${o`${100}..${200}`.length}`})`.length}..${1000}`;另外,o函数也可以支持与Javascript普通的运算符混合使用:

o`${100}..${200}`.length+100*2>=1000

(4)含一元运算符的场景:

(5)与普通Javascript运算符混合执行:

o`${o`${1}..<${100}`.length}..${1000}`;

进一步地,本申请实施例中首先对自定义的运算符进行注册,如图2所示,为本申请实施例200提供的注册运算符的具体流程的示意图。其中,该具体流程的详细过程如下:

S201,编写功能函数作为运算符函数。

这里,对于每个运算符,将与该运算符的功能相匹配的功能函数作为对应的运算符函数。具体地,运算符函数使用Javascript函数编写即可,例如o`${1}..${10}`中的“..”运算符,可编写为下面的函数:

其中,运算符函数的函数名和该运算符的运算符名称可任意编写。

S202,使用registerOperator方法注册运算符函数。

这里,每个运算符实质上都是一个Javascript函数,使用registerOperator方法对自定义的运算符函数进行全局注册,如下所示:

function registerOperator(operatorName,operatorFunc){

OperatorMap[operatorName]=operatorFunc;

}

使用它来进行运算符注册:

registerOperator('..',range),其中“range”为'..'的运算符函数的函数名。

S203,保存创建的键值对之间的映射关系。

这里,创建包含运算符函数的函数名、以及该运算符的运算符名称的键值对。具体地,前述步骤S202中的OperatorMap为运算符函数Map,它是一个全局的Javascript对象结构,可用于保存已注册的运算符函数和键值对的映射关系:

本申请实施例基于上述步骤完成注册运算符的具体流程。

另外,为运算符字符串创建对应的运算符抽象结构的步骤如图3所示,为本申请实施例300中提供的创建运算符抽象结构的具体流程的示意图。其中,该具体流程的详细过程如下:

S301,传入运算符字符串并初始化。

这里,若运算符字符串为用Javascript空对象对运算符字符串初始化一个AST对象:const ast={}。

S302,生成包含结构字符串的表达式。

这里,在运算符字符串中,筛选出除首个第一数据格式的字符项外的与运算符直接相连的第一数据格式的字符项,并在运算符与第一数据格式的字符项之间添加间隔符号。其中,对运算符字符串进行处理,生成格式为“xxx(${x})”的结构字符串。具体地,提取出运算符字符串最左侧的”${x}”字符串”${0}”。注意它的左侧不能有非空字符,提取后的字符串为进一步地,用正则表达式提取所有的“xxx${x}”格式的字符串,生成数组['..${1}','..<${2}']。在该数组中所有项的”${x}”外侧加一个间隔符如小括号,然后再填回字符串以此生成包含结构字符串的表达式。

S303,筛选出结构字符串。

这里,在运算符字符串中,筛选出包含间隔符号的运算符和第一数据格式的字符项组成的结构字符串。具体地,使用正则表达式提取所有的“xxx(${x})”的结构字符串,结果为一个数组

S304,判断是否应添加多元运算符标识。

本步骤中,判断首个第一数据格式的字符项的最左侧是否为非空字符,并在不为非空字符时,为运算符抽象结构添加多元运算符标识,其中,多元运算符标识为首个第一数据格式的字符项中x对应的实际变量参数的索引值。多元运算符标识用于表示该运算符字符串是否包含多元运算符。

其中,本申请实施例除了常规的二元运算符外,还可以支持一元运算符,运算符字符串示例如下:

上面例子中的即为一元运算符,使用时它位于参数的左侧。转换为运算符抽象结构后,各参数说明:

一元运算符一般设置在运算符执行函数的最左侧,如下示例:

进一步地,检查运算符字符串最左侧是否能提取出”${x}”,若可以提取出来,确定第一个运算符是二元运算符;否则第一个运算符是一元运算符。

该示例为最左侧有非空字符的”${x}”: 此时不为运算符抽象结构添加多元运算符标识。若第一个运算符是二元运算符的话,需要在运算符抽象结构的最外层加一个多元运算符标识,值为”${x}”的x,含义为参数编号:

const ast={

argIndex:0

}

S305,设置结构字符串的名称属性。

本步骤中,将结构字符串中包含的运算符对应的运算符名称作为该结构字符串的名称属性。具体地,在运算符抽象结构中创建operators数组结构,数组内为每个结构字符串创建一个运算符对象结构,并从每个“xxx(${x})”中提取非小括号的部分再去除前后空格为运算符名称:

S306,将每个结构字符串的第一数据格式的字符项中x作为实际变量参数的第二索引值进行存储。

这里,每个运算符一般都有至少1个实际变量参数,通常为2个,即二元运算符的左右侧2个(下面的startTime和endTime即为参数):

本申请实施例中的的运算符还可以有第3个及更多的实际变量参数,这时需要在运算符右侧添加小括号:

运算符函数参数也改为3个:

进一步地,在每个结构字符串中检查小括号内是否有逗号,若有逗号则该运算符右侧含多个实际变量参数;没有逗号则该运算符右侧只有一个实际变量参数。若运算符右侧有多个参数,则用逗号分隔解析出每个参数对象,然后在运算符对象结构中的params数组内放多个参数对象,并设置第二索引值,值为”${x}”的x。

针对运算符字符串为的运算符抽象结构为:

若运算符右侧只有一个实际变量参数,则每个运算符对象结构的params数组内就只有一个参数对象,AST改后如下:

再如下例运算符字符串:

转换为运算符抽象结构后,各参数说明:

再举个多参数运算符例子,运算符右侧传多个参数时,须要加小括号:

转换为运算符抽象结构后,各参数说明:

本申请实施例基于上述步骤完成创建运算符抽象结构的具体流程。

进一步地,运算符执行函数对输入字符串进行处理。如图4所示,为本申请实施例400提供的一种数据处理的方法的具体流程的示意图。其中,该具体流程的详细过程如下:

S401,将待输入字符串的第一字符串数组和第二字符串数组输入运算符执行函数。

这里,在获取输入字符串后,通过运算符执行函数对输入字符串进行解析,生成去除实际变量参数后的第一字符串数组,以及将按顺序提取的输入字符串中的各个实际变量参数作为第二字符串数组。具体地,运算符执行函数是基于Javascript的TaggedTemplates语法实现。使用时的方式如:

其中,o函数在全局定义一次即可,为运算符执行函数。它的参数定义结构遵循于Tagged Templates语法的规定:

function o(operatorExprs,...args){

}

其中的operatorExprs为第一字符串数组,值为去除实际变量参数后的待输入字符串对应的字符串数组:

args为第二字符串数组,值为按顺序提取的每个第一数据对应的实际变量参数:[startTime,endTime]。

S402,生成与输入字符串对应的运算符字符串。

这里,循环第一字符串数组,在第一字符串数组的各个实际变量参数对应的位置添加第一数据格式的字符项,其中,x从0开始每循环一项加1直至第一字符串循环结束,以生成与输入字符串对应的运算符字符串。具体地,使用字符串执行函数即o函数的第一字符串数组operatorExprs,生成与输入字符串对应的运算符字符串。如针对第一字符串数组operatorExprs为生成后的运算符字符串为其中,循环第一字符串数组operatorExprs,在每个实际变量参数的位置添加第一数据格式的字符项(x从0开始每循环一项增1),并判断最后一项时不添加,生成包含输入字符串中的运算符、以及输入字符串中的实际变量参数被呈现为第一数据格式的字符项的运算符字符串。

S403,在运算符抽象结构库中查找以运算符字符串为第一索引值的运算符抽象结构。

这里,运算符抽象结构为运算符字符串解析后的抽象语法树(abstract syntaxcode,AST)方法。AST是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构。若运算符字符串已经生成过对应的运算符抽象结构,则会将该运算符字符串为第一索引值与对应的运算符抽象结构建立映射关系,方便查找。具体地,o函数(运算符执行函数)在执行时,若每次均把同样的运算符字符串解析为运算符抽象结构时可能存在重复操作,降低运行效率的问题。因此,建立运算符抽象结构库,把已经转换过运算符抽象结构的运算符字符串缓存起来。可通过在全局创建一个AST Map对象作为运算符抽象结构库用于保存,第一索引值使用运算符字符串即可。如:

进一步地,在查找到时,直接使用该运算符抽象结构。

S404,当未查找到时,为运算符字符串创建对应的运算符抽象结构。

这里,在未查找到对应的运算符抽象结构时,为运算符字符串创建运算符抽象结构,并以该运算符字符串为第一索引值保存至运算符抽象结构库中。其中,创建运算符抽象结构的步骤在实施例300中进行说明。

S405,判断运算符抽象结构是否携带多元运算符标识。

这里,多元运算符标识用于表示该运算符抽象结构中是否包含多元运算符。具体地,在运算符抽象结构中判断首个第一数据格式的字符项的最左侧是否为非空字符,并在不为非空字符时,为运算符抽象结构添加多元运算符标识,其中,多元运算符标识为首个第一数据格式的字符项中x对应的实际变量参数的索引值。进一步地,添加多元运算符的过程在为运算符字符串创建对应的运算符抽象结构时添加。

S406,获取运算符抽象结构对应的运算符函数。

本步骤中,当匹配到的运算符抽象结构未携带多元运算符标识时,在运算符抽象结构中获取结构字符串,并基于结构字符串的名称属性,在键值对之间的映射关系中获取对应的运算符函数。

S407,获取运算符抽象结构对应的实际变量参数。

这里,基于运算符抽象结构中的每个结构字符串包含的第二索引值,在第二字符串数组中查找对应的实际变量参数,并将实际变量参数按照对应的第一数据格式的字符项所在的位置放置。

S408,判断当前运算符函数是否为该输入字符串的最后一个运算符函数。

这里,循环执行包含实际变量参数的运算符函数,并将前一个运算符函数的运算结果作为后一个运算符函数中的第一个参数。若不是,返回继续执行步骤S406至步骤S408。

S409,获取多元运算标识符对应的实际变量参数。

这里,当匹配到的运算符抽象结构携带多元运算符标识时,基于多元运算符标识在第二字符串数组中查找对应的实际变量参数,并将该实际变量参数作为于第一个运算符函数的第一个参数。具体地,若判断为二元运算符,即存在第一个运算结果,则在获取运算符抽象结构对应的运算符函数的步骤后,首先执行用多元运算标识符argIndex从第二字符串数组args数组中按索引值取出对应参数,并放置在第一个运算符函数的第一个参数。且该步骤仅执行一次。进一步地,执行获取运算符抽象结构对应的实际变量参数的步骤以及后续步骤。

S410,输出最后一个运算符函数的运行结果作为输入字符串对应的运行结果。

本申请基于上述步骤实现上述一种数据处理的方法。

本申请实施例为Javascript自定义运算符功能提供了一种可行的实现方案。基于Javascript现有的Tagged Templates语法实现,可保持运算符语法的逻辑顺序可读性。如将swift中的(1..<100).count..1000可写为o`${o`${1}..<${100}`.length}..${1000}`。同时,也支持与各种普通Javascript运算符混合使用,语法可适应各种复杂场景,如o`${startTime+1000}..(${endTime-1000},${o`sqrt${2500}`*1000})`。

另外,本申请实施例中的运算符也可以对多个实际变量参数进行处理,并且支持在参数中嵌套使用运算符,写法可为:o`${1}>...<(${100},${o`${50}..${10}`})`。且运算符支持以各类特殊字符命名,例如可以使用emoJi图标等等。如求起始时间和结束时间之间经过的毫秒数,可以写为(为运算符):

本申请实施例中采用的运算符语法设计方案,在利用Javascript已有的TaggedTemplates语法基础上自研设计增加了新的自定义运算符语法,支持封装各种自定义运算符逻辑,并支持参数嵌套及与普通Javascript运算符进行混合运算等必要特性,整体符合类似于普通运算符的逻辑顺序可读性,对Javascript语法是一个很好的增强方案。且采用的自定义运算符实现方案是自研设计的,即包括创建及缓存专用的生成字符串抽象结构的AST流程,AST的各属性设计,以及最终的运算符执行函数的实现逻辑等。

另外,本申请实施例中采用的运算符对执行顺序优先级的处理方案也比较独特,它的优先级规则主要为:多个运算符的运行顺序均为从左到右,若想让其中某一个运算符先运行,那么用”${}”对其进行嵌套即可实现,非常方便。如:

1、默认从左到右运行

2、让右侧先运行

3、让左侧先运行(例如,左侧求出运算符结果后还需要叠加其他运算)

基于同一发明构思,本申请实施例500还提供一种数据处理的装置,其中,如图5所示,该装置包括:

获取模块51,用于获取输入字符串;

生成模块52,用于利用获取到的输入字符串,生成与输入字符串对应的运算符字符串,其中,运算符字符串包含输入字符串中的运算符、以及输入字符串中的实际变量参数被呈现为第一数据格式的字符项;

匹配模块53,用于在已注册的运算符中匹配运算符字符串中的运算符;

调用模块54,用于当匹配到已注册的运算符时,调用为指定运算符创建的运算符函数处理运算符字符串中的字符项,其中,运算符函数为与注册后的该运算符函数对应的运算符的功能相匹配的功能函数。

本实施例中,获取模块51、生成模块52、匹配模块53和调用模块54的具体功能和交互方式,可参见图1对应的实施例的记载,在此不再赘述。

如图6所示,本申请的又一实施例600还提供一种终端设备,包括处理器601,其中,处理器601用于执行上述一种数据处理的方法的步骤。从图6中还可以看出,上述实施例提供的终端设备还包括非瞬时计算机可读存储介质602,该非瞬时计算机可读存储介质602上存储有计算机程序,该计算机程序被处理器601运行时执行上述一种数据处理的方法的步骤。实际应用中,该终端设备可以是一台或多台计算机,只要包括上述计算机可读介质和处理器即可。

具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘和FLASH等,该存储介质上的计算机程序被运行时,能够执行上述的一种数据处理的方法中的各个步骤。实际应用中,所述的计算机可读介质可以是上述实施例中描述的设备/装置/系统中所包含的,也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或多个程序被执行时,能够执行上述的一种数据处理的方法中的各个步骤。

根据本申请公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件,或者上述的任意合适的组合,但不用于限制本申请保护的范围。在本申请公开的实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

本申请附图中的流程图和框图,示出了按照本申请公开的各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或者代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应该注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同附图中所标注的顺序发生。例如,两个连接地表示的方框实际上可以基本并行地执行,它们有时也可以按照相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或者流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本申请中。特别地,在不脱离本申请精神和教导的情况下,本申请的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,所有这些组合和/或结合均落入本申请公开的范围。

最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行变更或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些变更、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

26页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于知识图谱的非结构化电网数据处理方法及装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!