CN111752566B - 编译型语言环境中函数表达式的解析方法及装置、存储介质、终端 - Google Patents
编译型语言环境中函数表达式的解析方法及装置、存储介质、终端 Download PDFInfo
- Publication number
- CN111752566B CN111752566B CN201910244141.0A CN201910244141A CN111752566B CN 111752566 B CN111752566 B CN 111752566B CN 201910244141 A CN201910244141 A CN 201910244141A CN 111752566 B CN111752566 B CN 111752566B
- Authority
- CN
- China
- Prior art keywords
- function
- expression
- function expression
- language environment
- json format
- 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
Links
- 230000006870 function Effects 0.000 title claims abstract description 246
- 230000014509 gene expression Effects 0.000 title claims abstract description 156
- 238000004458 analytical method Methods 0.000 title abstract description 22
- 238000000034 method Methods 0.000 claims abstract description 33
- 238000006467 substitution reaction Methods 0.000 claims description 18
- 238000007781 pre-processing Methods 0.000 claims description 6
- 230000002452 interceptive effect Effects 0.000 claims description 4
- 238000010276 construction Methods 0.000 claims description 3
- 238000004364 calculation method Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
一种编译型语言环境中函数表达式的解析方法及装置、存储介质、终端,所述方法包括:从所述编译型语言环境外部获取所述函数表达式;对所述函数表达式进行正则替换操作,以将所述函数表达式解析成JSON格式的字符串;基于所述JSON格式的字符串构建调用树。通过本发明提供的方案能够简化编译型语言环境中对函数表达式的解析操作,降低运算复杂度。
Description
技术领域
本发明涉及计算机技术领域,具体地涉及一种编译型语言环境中函数表达式的解析方法及装置、存储介质、终端。
背景技术
在算法领域的客户机和服务器(client-server,简称C/S)架构中,存在一些应用场景,客户机和服务器中的一方需要传递函数表达式给另一方以供后者在自己的运行环境中调用,其中,函数表达式支持函数与四则运算。
在一些脚本语言(如JavaScript)环境中,传递过来的函数表达式字符串可以直接运行。
但是,在编译型语言(如C++或者Java)环境中,这类运行环境没有配备语法解析器,从外界传递过来的函数表达式字符串必须经过解析才能被调用。而现有在编译型语言环境中对函数表达式的解析处理方式较为复杂,严重影响C/S架构中的数据处理速度。
发明内容
本发明解决的技术问题是如何降低编译型语言环境中对函数表达式的解析复杂度,提高运算效率。
为解决上述技术问题,本发明实施例提供一种编译型语言环境中函数表达式的解析方法,包括:从所述编译型语言环境外部获取所述函数表达式;对所述函数表达式进行正则替换操作,以将所述函数表达式解析成JSON格式的字符串;基于所述JSON格式的字符串构建调用树。
可选的,所述对所述函数表达式进行正则替换操作,以将所述函数表达式解析成JSON格式的字符串包括:识别所述函数表达式中的待解析函数;对所述待解析函数进行正则替换,以将所述待解析函数解析成所述JSON格式的字符串。
可选的,所述函数表达式由常量、变量和函数中的至少一种构成,且构成所述函数表达式的常量、变量和/或函数之间通过运算符连接;当所述函数包含有常量、变量和/或函数时,所述常量、变量和函数也通过运算符连接。
可选的,所述识别所述函数表达式中的待解析函数包括:将所述至少一个函数分别识别为所述待解析函数;对于处于相同运算优先级的运算符,将所述运算符所连接的相邻常量、变量和/或函数识别为所述待解析函数。
可选的,所述对所述待解析函数进行正则替换,以将所述待解析函数解析成所述JSON格式的字符串包括:当所述待解析函数包含运算符时,将所述运算符转换为参数;将所述待解析函数的括号转换为JSON格式的符号。
可选的,在对所述函数表达式进行正则替换操作之前,所述解析方法还包括:对获取的函数表达式进行预处理,以剔除所述函数表达式中的干扰字符。
可选的,所述干扰字符包括空格。
可选的,在对所述函数表达式进行正则替换操作之前,所述解析方法还包括:当获取的函数表达式包括负号时,将所述负号转换为减号。
可选的,所述基于所述JSON格式的字符串构建调用树包括:将所述JSON格式的字符串中由预设分隔符分割的各参数确定为所述调用树的节点;遍历各节点,以按照运算优先级构建所述调用树。
为解决上述技术问题,本发明实施例还提供一种编译型语言环境中函数表达式的解析装置,包括:获取模块,用于从所述编译型语言环境外部获取所述函数表达式;处理模块,用于对所述函数表达式进行正则替换操作,以将所述函数表达式解析成JSON格式的字符串;构建模块,用于基于所述JSON格式的字符串构建调用树。
为解决上述技术问题,本发明实施例还提供一种存储介质,其上存储有计算机指令,所述计算机指令运行时执行上述方法的步骤。
为解决上述技术问题,本发明实施例还提供一种终端,包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机指令,所述处理器运行所述计算机指令时执行上述方法的步骤。
与现有技术相比,本发明实施例的技术方案具有以下有益效果:
本发明实施例提供一种编译型语言环境中函数表达式的解析方法,包括:从所述编译型语言环境外部获取所述函数表达式;对所述函数表达式进行正则替换操作,以将所述函数表达式解析成JSON格式的字符串;基于所述JSON格式的字符串构建调用树。较之现有技术需要在编译型语言环境中专门编写编译器,并调用编译器对接收到的函数表达式进行词法分析、语法分析、语义分析等一系列比较复杂的处理来进行解析的方案,本实施例的方案用JSON来取代传统的编译器,并基于正则表达式来确定接收到的函数表达式和JSON格式的字符串之间的关系,进而进行正则替换。具体而言,由于编译型语言环境中支持有JSON解析库,所以,本实施例的方案无需预先构建编译器,而是可以采用复杂度更低的方式将函数表达式解析成编译型语言环境能够调用的JSON格式的字符串。由此,通过本发明提供的方案能够简化编译型语言环境中对函数表达式的解析操作,降低运算复杂度。
进一步,所述对所述函数表达式进行正则替换操作,以将所述函数表达式解析成JSON格式的字符串包括:识别所述函数表达式中的待解析函数;对所述待解析函数进行正则替换,以将所述待解析函数解析成所述JSON格式的字符串。由此,可以利用字符串替换操作将函数表达式中所有的待解析函数转换成符合JSON格式的字符串,避免了编译器式的解析过程,利用现成的JSON解析库,实现了一种简化的、逻辑简单的字符串公式解析方法,其中所述字符串公式即为所述函数表达式。
附图说明
图1是本发明实施例的一种编译型语言环境中函数表达式的解析方法的流程图;
图2是图1中步骤S102的一个具体实施方式的流程图;
图3是本发明一个典型的应用场景的调用树示意图;
图4是本发明实施例的一种编译型语言环境中函数表达式的解析装置的结构示意图。
具体实施方式
如背景技术所言,现有在编译型语言环境中对函数表达式的解析处理方式较为复杂,严重影响C/S架构中终端的数据处理速度。
具体而言,无论现有C/S架构中的客户机还是服务器,若该终端是运行在编译型语言环境中的,在接收到对端发送的函数表达式时,需要专门编写编译器,并调用该编译器来对接收到的函数表达式进行词法分析、语法分析、语义分析等一系列比较复杂的处理。可见,现有技术在对编译型语言环境中的函数表达式进行解析时处理逻辑复杂,效率低下。
为解决上述技术问题,本发明实施例提供一种编译型语言环境中函数表达式的解析方法,包括:从所述编译型语言环境外部获取所述函数表达式;对所述函数表达式进行正则替换操作,以将所述函数表达式解析成JSON格式的字符串;基于所述JSON格式的字符串构建调用树。
本实施例的方案用JSON来取代传统的编译器,并基于正则表达式来确定接收到的函数表达式和JSON格式的字符串之间的关系,进而进行正则替换。具体而言,由于编译型语言环境中支持有JSON解析库,所以,本实施例的方案无需预先构建编译器,而是可以采用复杂度更低的方式将函数表达式解析成编译型语言环境能够调用的JSON格式的字符串。由此,通过本发明提供的方案能够简化编译型语言环境中对函数表达式的解析操作,降低运算复杂度。
为使本发明的上述目的、特征和有益效果能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
图1是本发明实施例的一种编译型语言环境中函数表达式的解析方法的流程图。本实施例的方案可以应用于C/S架构下对字符串公式的解析场景。本实施例的方案可以由C/S架构中的客户机和服务器中的任一终端执行,其中,执行本实施例所述方案的终端运行于编译型语言环境。
具体地,参考图1,本实施例所述编译型语言环境中函数表达式的解析方法可以包括如下步骤:
步骤S101,从所述编译型语言环境外部获取所述函数表达式;
步骤S102,对所述函数表达式进行正则替换操作,以将所述函数表达式解析成JSON格式的字符串;
步骤S103,基于所述JSON格式的字符串构建调用树。
更为具体地,JSON是JavaScript Object Notation,即JS对象简谱的简称。进一步地,所述JSON格式的字符串可以被运行于所述编译型语言环境的终端直接调用。
在一个实施例中,所述编译型语言环境外部获取所述函数表达式可以指:从运行于非编译型语言环境的终端处接收所述函数表达式。例如,所述非编译型语言环境可以为脚本语言环境。
因为运行于所述脚本语言环境的终端可以直接运行所述函数表达式,所以当运行于所述脚本语言环境的终端为所述C/S架构中的客户机或服务器时,可能直接向对端发送所述函数表达式。而运行于所述编译型语言环境的终端无法直接调用所述函数表达式。所以,当运行于所述编译型语言环境的终端为所述对端时,可以执行本实施例所述方案,以采用一种简化的、逻辑简单的公式解析方案解析接收到的所述函数表达式。
在一个实施例中,所述函数表达式可以由常量、变量和函数中的至少一种构成,且构成所述函数表达式的常量、变量和/或函数之间通过运算符连接。
进一步地,当所述函数包含有常量、变量和/或函数时,所述常量、变量和函数也可以通过运算符连接。
例如,cos(x)+sin(3x)可以理解成由三角函数cos()和sin()、变量x和3x以及运算符“+”构成的。
在一个实施例中,所述正则替换操作可以用于将所述函数表达式中无法被编译型语言环境识别的字符替换为能够给编译型语言环境识别的字符。具体地,所述无法被编译型语言环境识别的字符包括运算符,因而,需要将所述函数表达式中的运算符识别出来,并将所述运算符所构成的函数转换为JSON格式的字符串。
以函数表达式cos(x)+sin(3x)为例,经过所述步骤S102处理后得到的JSON格式的字符串为{“ari”:[{“cos”:[“x”]},“+”,{“sin”:[3,“x”]}]}。其中,ari为JSON格式中用于表示四则运算的函数;在ari[]函数中,以“,”作为分隔符,第一个分隔符之前的部分(即前项{“cos”:[“x”]})表示四则运算的前项,第一和第二个分隔符之间的部分(即“+”)表示运算符,第二个分隔符之后的部分(即{“sin”:[3,“x”]})表示四则运算的后项。
在一个实施例中,参考图2,所述步骤S102可以包括如下步骤:
步骤S1021,识别所述函数表达式中的待解析函数;
步骤S1022,对所述待解析函数进行正则替换,以将所述待解析函数解析成所述JSON格式的字符串。
由此,可以利用字符串替换操作将函数表达式中所有的待解析函数转换成符合JSON格式的字符串,避免了编译器式的解析过程,利用现成的JSON解析库,实现了一种简化的、逻辑简单的字符串公式解析方法,其中所述字符串公式即为所述函数表达式。
具体地,所述待解析函数可以包括:所述函数表达式中的函数,如三角函数、对数函数等;由运算符连接的函数,如a+b、x*y等;以及所述函数表达式整体。
在一个实施例中,所述步骤S1021可以包括步骤:将所述至少一个函数分别识别为所述待解析函数;对于处于相同运算优先级的运算符,将所述运算符所连接的相邻常量、变量和/或函数识别为所述待解析函数。
具体地,对于所述函数表达式中包含的诸如三角函数、对数函数等函数,可以直观地识别为所述待解析函数。
进一步地,对于所述函数表达式中由运算符连接的函数,如a+b、sin(x)-y等,这类函数也应一体地识别为待解析函数。
例如,可以将所述函数表达式的整个算式前后补上括号,以便在后续正则替换操作时能够将所述函数表达式整体视为一个完整的函数。相应的正则替换规则可以写成:formula=“(“+formula+“)”。
又例如,当所述函数表达式包含负数时,可以将该数的负号替换为“0-该数”,也即,将负号替换为运算符减号,以便在后续正则替换操作时能够准确识别该函数。相应的正则替换规则可以写成:formula=formula.replace(“/(^|[\+\-\*\/\(]{1})(\-)/g”,“$010$02”)。
在一个实施例中,所述步骤S1022可以包括步骤:当所述待解析函数包含运算符时,将所述运算符转换为参数;将所述待解析函数的括号转换为JSON格式的符号。
具体地,对于同一运算优先级的每一待解析函数,可以将所述待解析函数按照ari函数的格式进行重构,此时,所述待解析函数中的运算符在对应的ari函数中是以参数形式表示的。其中,ari函数中以“”表示参数。由此,所述运算符对于编译型语言环境而言不再是无法识别的符号,而是可以被调用的参数,调用逻辑可以根据所述编译型语言环境对ari函数的定义确定。
例如,可以将所有待解析函数的起始位置的“(”替换为“(ari(”,以便后续操作时能够将该待解析函数识别为需要转换成ari函数的对象,对应的“)”可以在后续步骤中一并填补。相应的正则替换规则可以写成:formula=formula.replace(“/(\w)+(\()/g”,“(ari(”)。
进一步地,对于不同运算优先级的每一待解析函数,所述函数表达式是基于括号“()”来规定四则运算优先级的,因而,可以将具有较高运算优先级的待解析函数再次按照ari函数的格式进行重构。
例如,可以将所有用于规定四则运算优先级的括号的“(”替换为“ari(ari(”,以便在后续操作时能够将具有较高优先级的待解析函数整体识别为需要转换成ari函数的对象。相应的正则替换规则可以写成:formula=formula.replace(“/(^|\W)(\()/g”,“(ari(”)。
在一个实施例中,在所述步骤S102之前,本实施例所述解析方法还可以包括步骤:对获取的函数表达式进行预处理,以剔除所述函数表达式中的干扰字符。由此,可以对获取的函数表达式进行清洗,以避免后续进行正则替换操作时出现识别错误的情况。
优选地,所述干扰字符可以包括空格。
相应的正则替换规则可以写成:formula=formula.replace(“/\s/g”,“”)。
接下来,以函数表达式-7*cos(2/(5-x))+sin(3+y)为例,对所述步骤S102的具体过程进行阐述。
首先,可以对所述函数表达式-7*cos(2/(5-x))+sin(3+y)进行预处理,以清理所述函数表达式中的不必要字符(如所有空格),对应的正则替换规则为formula=formula.replace(“/\s/g”,“”)。此时,可以得到预处理后的函数表达式-7*cos(2/(5-x))+sin(3+y)。
其次,对于预处理后的函数表达式-7*cos(2/(5-x))+sin(3+y),可以为整个算式的前后补上括号,对应的正则替换规则为formula=“(“+formula+“)”。此时,可以得到函数表达式(-7*cos(2/(5-x))+sin(3+y)),由此,可以将整个式子看做一个整体,为后面补上ari函数做准备。
再次,对于函数表达式(-7*cos(2/(5-x))+sin(3+y))中的负数(即-7),将该负数变成“0-7”,对应的正则替换规则为formula=formula.replace(“/(^|[\+\-\*\/\(]{1})(\-)/g”,“$010$02”)。此时,可以得到函数表达式(0-7*cos(2/(5-x))+sin(3+y),可以看出,原始函数表达式中的负号已经被统一为减号。
接下来,将函数表达式(0-7*cos(2/(5-x))+sin(3+y)中所有待解析函数的起始“(”变成“(ari(”,对应的正则替换规则为formula=formula.replace(“/(\w)+(\()/g”,“(ari(”)。此时,可以得到函数表达式(0-7*cos(ari(2/(5-x))+sin(ari(3+y))。由此,可以将函数内部的四则式子转换为ari函数,这里缺的’)’会后续步骤中补齐。
接下来,将函数表达式(0-7*cos(ari(2/(5-x))+sin(ari(3+y))中所有用于指示运算优先级的起始“(”变成“ari(ari(”,对应的正则替换规则为formula=formula.replace(“/(^|\W)(\()/g”,“(ari(”)。此时,可以得到函数表达式ari(ari(0-7*cos(ari(2/ari(ari(5-x))+sin(ari(3+y))。由此,可以将规定四则运算优先级的括号转换为ari函数的形式。
接下来,将函数表达式ari(ari(0-7*cos(ari(2/ari(ari(5-x))+sin(ari(3+y))中所有的“)”调整成“))”,对应的正则替换规则为formula=formula.replace(“/(\))/g”,“))”)。此时,可以得到函数表达式ari(ari(0-7*Pow(ari(2/ari(ari(5-x)),3))+sin(ari(3+y)))),以将ari函数的后半个括号“)”补齐。
接下来,对于函数表达式ari(ari(0-7*Pow(ari(2/ari(ari(5-x)),3))+sin(ari(3+y))))中所有的“,”,在“,”前后补上括号,对应的正则替换规则为formula=formula.replace(“/(\,)/g”,“),(”)。此时,可以得到函数表达式(ari(0-7*cos(ari(2/ari(ari(5-x))))+sin(ari(3+y))))。由此,可以确保所述函数表达式内每个参数的四则运算作为一个单元。
接下来,在函数表达式(ari(0-7*cos(ari(2/ari(ari(5-x))))+sin(ari(3+y))))中所有四则运算符字符的前后各加一个“,”,例如:“+”可以转换为“,+,”,对应的正则替换规则为formula=formula.replace(“/([\+\-\*\/])/g”,",\"$1\",")。此时,可以得到函数表达式ari(ari(0,"-",7,"*",cos(ari(2,"/",ari(ari(5,"-","x")))),"+",sin(ari(3,"+","y"))))。由此,可以实现四则运算符的参数化。
接下来,将函数表达式ari(ari(0,"-",7,"*",cos(ari(2,"/",ari(ari(5,"-","x")))),"+",sin(ari(3,"+","y"))))的括号更换成JSON的格式符号“{”和“[”,对应的正则替换规则为formula=formula.replace(“/([a-zA-Z_][a-zA-Z0-9]*)\(/g”,"{\"$1\":["),以及formula=formula.replace(“/\)/g”,"]}")。此时,可以得到JSON格式的字符串"{"ari":[{"ari":[0,"-",7,"*",{"cos":[{"ari":[2,"/",{"ari":[{"ari":[5,"-","x"]}]}]}]},"+",{"sin":[{"ari":[3,"+","y"]}]}]}]}"。
在一个实施例中,所述步骤S103可以包括步骤:将所述JSON格式的字符串中由预设分隔符分割的各参数确定为所述调用树的节点;遍历各节点,以按照运算优先级构建所述调用树。
仍以函数表达式cos(x)+sin(3x)为例,在将函数表达式cos(x)+sin(3x)解析成JSON格式的字符串{“ari”:[{“cos”:[“x”]},“+”,{“sin”:[3,“x”]}]}后。可以根据分隔符“,”确定所述字符串中的JSON对象。
进一步地,在生成JSON对象后,通过对JSON对象(JSON Object)节点的遍历,即可构造出如3所示的调用树30。
具体地,所述调用树30的每个节点都是同一个抽象类的对象,该抽象类实现一个计算(Calculate)方法,调用该方法会返回以该节点为根的子树的值。
更为具体地,所述调用树30的叶节点均为常数或者变量。因此在给变量节点附值后,调用根节点的计算方法就可以通过递归调用实现函数式的赋值计算。
换言之,本实施例所述方案利用正则替换将获取的函数表达式转化为JSON格式的字符串,然后根据JSON格式的字符串的结构构造调用树,从而完成对所述函数表达式的解析。
进一步地,所述编译型语言环境中的程序实际运行时,从所述调用树的根节点开始向下调用,每个节点都会采用特定的计算方法进行计算,最终得到计算结果。
由上,采用本实施例的方案,用JSON来取代传统的编译器,并基于正则表达式来确定接收到的函数表达式和JSON格式的字符串之间的关系,进而进行正则替换。具体而言,由于编译型语言环境中支持有JSON解析库,所以,本实施例的方案无需预先构建编译器,而是可以采用复杂度更低的方式将函数表达式解析成编译型语言环境能够调用的JSON格式的字符串。由此,通过本发明提供的方案能够简化编译型语言环境中对函数表达式的解析操作,降低运算复杂度。
图4是本发明实施例的一种编译型语言环境中函数表达式的解析装置的结构示意图。本领域技术人员理解,本实施例所述编译型语言环境中函数表达式的解析装置4(可简称为解析装置4)可以用于实施上述图1至图3所示实施例中所述的方法技术方案。
具体地,在本实施例中,所述解析装置4可以包括:获取模块41,用于从所述编译型语言环境外部获取所述函数表达式;处理模块44,用于对所述函数表达式进行正则替换操作,以将所述函数表达式解析成JSON格式的字符串;构建模块45,用于基于所述JSON格式的字符串构建调用树。
在一个实施例中,所述处理模块44可以包括:识别子模块441,用于识别所述函数表达式中的待解析函数;处理子模块442,用于对所述待解析函数进行正则替换,以将所述待解析函数解析成所述JSON格式的字符串。
在一个实施例中,所述函数表达式可以由常量、变量和函数中的至少一种构成,且构成所述函数表达式的常量、变量和/或函数之间可以通过运算符连接;当所述函数包含有常量、变量和/或函数时,所述常量、变量和函数也可以通过运算符连接。
进一步地,所述识别子模块441可以包括:第一识别单元4411,用于将所述至少一个函数分别识别为所述待解析函数;第二识别单元4412,对于处于相同运算优先级的运算符,将所述运算符所连接的相邻常量、变量和/或函数识别为所述待解析函数。
在一个实施例中,所述处理子模块442可以包括:第一转换单元4421,用于当所述待解析函数包含运算符时,将所述运算符转换为参数;第二转换单元4422,用于将所述待解析函数的括号转换为JSON格式的符号。
在一个实施例中,所述解析装置4还可以包括:预处理模块42,用于在对所述函数表达式进行正则替换操作之前,对获取的函数表达式进行预处理,以剔除所述函数表达式中的干扰字符。
进一步地,所述干扰字符可以包括空格。
在一个实施例中,所述解析装置4还可以包括:转换模块43,用于在对所述函数表达式进行正则替换操作之前,当获取的函数表达式包括负号时,将所述负号转换为减号。
在一个实施例中,所述构建模块45可以包括:确定子模块451,用于将所述JSON格式的字符串中由预设分隔符分割的各参数确定为所述调用树的节点;遍历子模块452,用于遍历各节点,以按照运算优先级构建所述调用树。
关于所述解析装置4的工作原理、工作方式的更多内容,可以参照上述图1至图3中的相关描述,这里不再赘述。
进一步地,本发明实施例还公开一种存储介质,其上存储有计算机指令,所述计算机指令运行时执行上述图1至图3所示实施例中所述的方法技术方案。优选地,所述存储介质可以包括诸如非挥发性(non-volatile)存储器或者非瞬态(non-transitory)存储器等计算机可读存储介质。所述存储介质可以包括ROM、RAM、磁盘或光盘等。
进一步地,本发明实施例还公开一种终端,包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机指令,所述处理器运行所述计算机指令时执行上述图1至图3所示实施例中所述的方法技术方案。优选地,所述终端可以是运行于编译型语言环境的终端,如C/S架构中的客户机和服务器中的任一种。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
Claims (11)
1.一种编译型语言环境中函数表达式的解析方法,其特征在于,包括:
从所述编译型语言环境外部获取所述函数表达式;
对所述函数表达式进行正则替换操作,以将所述函数表达式解析成JSON格式的字符串;
基于所述JSON格式的字符串构建调用树;
其中,从所述编译型语言环境外部获取所述函数表达式包括:从运行于非编译型语言环境的终端处接收所述函数表达式,所述非编译型语言环境包括脚本语言环境;
所述对所述函数表达式进行正则替换操作,以将所述函数表达式解析成JSON格式的字符串包括:
识别所述函数表达式中的待解析函数,所述待解析函数包括所述函数表达式中的函数、由运算符连接的函数以及所述函数表达式整体;
对所述待解析函数进行正则替换,以将所述待解析函数解析成所述JSON格式的字符串。
2.根据权利要求1所述的解析方法,其特征在于,所述函数表达式由常量、变量和函数中的至少一种构成,且构成所述函数表达式的常量、变量和/或函数之间通过运算符连接;当所述函数包含有常量、变量和/或函数时,所述常量、变量和函数也通过运算符连接。
3.根据权利要求2所述的解析方法,其特征在于,所述识别所述函数表达式中的待解析函数包括:
将所述至少一个函数分别识别为所述待解析函数;
对于处于相同运算优先级的运算符,将所述运算符所连接的相邻常量、变量和/或函数识别为所述待解析函数。
4.根据权利要求1所述的解析方法,其特征在于,所述对所述待解析函数进行正则替换,以将所述待解析函数解析成所述JSON格式的字符串包括:当所述待解析函数包含运算符时,将所述运算符转换为参数;
将所述待解析函数的括号转换为JSON格式的符号。
5.根据权利要求1所述的解析方法,其特征在于,在对所述函数表达式进行正则替换操作之前,还包括:
对获取的函数表达式进行预处理,以剔除所述函数表达式中的干扰字符。
6.根据权利要求5所述的解析方法,其特征在于,所述干扰字符包括空格。
7.根据权利要求1所述的解析方法,其特征在于,在对所述函数表达式进行正则替换操作之前,还包括:
当获取的函数表达式包括负号时,将所述负号转换为减号。
8.根据权利要求1所述的解析方法,其特征在于,所述基于所述JSON格式的字符串构建调用树包括:
将所述JSON格式的字符串中由预设分隔符分割的各参数确定为所述调用树的节点;
遍历各节点,以按照运算优先级构建所述调用树。
9.一种编译型语言环境中函数表达式的解析装置,其特征在于,包括:
获取模块,用于从所述编译型语言环境外部获取所述函数表达式;
处理模块,用于对所述函数表达式进行正则替换操作,以将所述函数表达式解析成JSON格式的字符串;
构建模块,用于基于所述JSON格式的字符串构建调用树;
其中,所述获取模块执行步骤:从运行于非编译型语言环境的终端处接收所述函数表达式,所述非编译型语言环境包括脚本语言环境;
所述处理模块包括:识别子模块,用于识别所述函数表达式中的待解析函数,所述待解析函数包括所述函数表达式中的函数、由运算符连接的函数以及所述函数表达式整体;处理子模块,用于对所述待解析函数进行正则替换,以将所述待解析函数解析成所述JSON格式的字符串。
10.一种存储介质,其上存储有计算机指令,其特征在于,所述计算机指令运行时执行权利要求1至8任一项所述方法的步骤。
11.一种终端,包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机指令,其特征在于,所述处理器运行所述计算机指令时执行权利要求1至8任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910244141.0A CN111752566B (zh) | 2019-03-28 | 2019-03-28 | 编译型语言环境中函数表达式的解析方法及装置、存储介质、终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910244141.0A CN111752566B (zh) | 2019-03-28 | 2019-03-28 | 编译型语言环境中函数表达式的解析方法及装置、存储介质、终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111752566A CN111752566A (zh) | 2020-10-09 |
CN111752566B true CN111752566B (zh) | 2024-03-22 |
Family
ID=72672267
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910244141.0A Active CN111752566B (zh) | 2019-03-28 | 2019-03-28 | 编译型语言环境中函数表达式的解析方法及装置、存储介质、终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111752566B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112765934B (zh) * | 2021-01-20 | 2022-07-19 | 山东师范大学 | 一种表格公式的缩进教学演示系统及方法 |
CN115794121B (zh) * | 2023-01-18 | 2023-05-26 | 中国科学技术信息研究所 | 差阶逻辑表达式的编译方法、装置、电子设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786529A (zh) * | 2016-04-22 | 2016-07-20 | 浙江工业大学 | 一种类托管代码调用c/c++风格函数的复杂结构的参数设计方法 |
CN107579944A (zh) * | 2016-07-05 | 2018-01-12 | 南京联成科技发展股份有限公司 | 基于人工智能和MapReduce安全攻击预测方法 |
-
2019
- 2019-03-28 CN CN201910244141.0A patent/CN111752566B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786529A (zh) * | 2016-04-22 | 2016-07-20 | 浙江工业大学 | 一种类托管代码调用c/c++风格函数的复杂结构的参数设计方法 |
CN107579944A (zh) * | 2016-07-05 | 2018-01-12 | 南京联成科技发展股份有限公司 | 基于人工智能和MapReduce安全攻击预测方法 |
Non-Patent Citations (1)
Title |
---|
在线数学公式编辑器的设计与实现;沈联民;《知网硕士电子期刊》;第11-49页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111752566A (zh) | 2020-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8479178B2 (en) | Compiler in a managed application context | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
US8930285B2 (en) | Composite production rules | |
CN110502227B (zh) | 代码补全的方法及装置、存储介质、电子设备 | |
JP2001209547A (ja) | ソースコード変換方法、ソースコード変換プログラムを記録した記録媒体及びソースコード変換装置 | |
US8849673B2 (en) | Rule generation | |
CN111752566B (zh) | 编译型语言环境中函数表达式的解析方法及装置、存储介质、终端 | |
US11599447B2 (en) | Detection of runtime errors using machine learning | |
CN107515739B (zh) | 提高代码执行性能的方法及装置 | |
CN112346730B (zh) | 一种中间表示的生成方法、计算机设备及存储介质 | |
CN112540767B (zh) | 程序代码的生成方法、装置、电子设备及存储介质 | |
CN115509514B (zh) | 一种前端数据模拟方法、装置、设备及介质 | |
EP0520708B1 (en) | Method and apparatus for converting high level form abstract syntaxes into an intermediate form | |
CN115357235A (zh) | 基于表单的业务规则配置方法及装置 | |
CN114186678B (zh) | 基于深度学习的硬件适配装置和方法 | |
CN111309332A (zh) | 文件内容按需加载方法、装置及电子设备、存储介质 | |
CN114265772A (zh) | 一种测试用例的生成方法及一种测试方法 | |
CN110825433B (zh) | 一种边缘控制设备设计方法 | |
US20100010801A1 (en) | Conflict resolution and error recovery strategies | |
CN116909573A (zh) | 计算图的节点融合方法、装置、电子设备及存储介质 | |
CN115576603A (zh) | 一种获取代码片段中的变量值的方法及装置 | |
JP6490779B2 (ja) | 仕様抽出装置、仕様抽出方法およびプログラム | |
CN114065197A (zh) | 调用序列生成方法、装置、电子设备、存储介质及产品 | |
CN111967247A (zh) | 基于函数声明的自然语言语义表示方法、装置和电子设备 | |
CN113031952A (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 |