CN113987405A - 一种基于ast的数学表达式计算算法 - Google Patents
一种基于ast的数学表达式计算算法 Download PDFInfo
- Publication number
- CN113987405A CN113987405A CN202111290306.1A CN202111290306A CN113987405A CN 113987405 A CN113987405 A CN 113987405A CN 202111290306 A CN202111290306 A CN 202111290306A CN 113987405 A CN113987405 A CN 113987405A
- Authority
- CN
- China
- Prior art keywords
- expression
- value
- node
- ast
- operator
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
Abstract
本发明提供了一种基于AST的数学表达式计算算法,包括以下步骤:1、用户输入的表达式转换为Token并识别;输入为:用户表达式;输出为:Token。2、将上步识别的Token组成AST语法树;输入为:Token;输出为:AST语法树。3、解析AST语法树计算表达式的值;输入为:AST语法树,输出为:表达式的值。本发明具有以下有益效果:1、可以在用户输入含标识符的表达式时校验输入是否合法。2、如果内置数学函数无法满足用户需求,还提供自定义的函数调用计算功能,即支持用户定义函数的调用,极大地扩展了计算表达式的功能。3、能够处理表达式语句,并根据条件选择计算公式,使用户使用起来没有任何学习成本。
Description
技术领域
本发明属于运算技术领域,涉及一种数学表达式,特别是一种基于AST的数学表达式计算算法。
背景技术
钢筋计算需要大量的计算公式;而用户在输入公式时很难校验其正确性,只能到调用的时候才能提示用户需要修改某个公式,由于节点比较多,公式比较乱,所以用户使用起来并不方便,因此解决用户输入时校验公式是否正确,变成了一件急需解决的问题。
当前常用的公式计算的方式:
1.从左到右顺序扫描整个后缀表达式;
2.如果是操作数,则将该操作数压入到栈中;
3.如果是操作符,则从栈中弹出对应的操作数,注意操作数的顺序;根据操作符进行运算,并将结果重新压入到栈中;
4.直至将整个栈扫描完毕;
5.如果后缀表达式是合法的,则扫描完毕后,栈中只有一个元素,该元素的值即为后缀表达式的结果。
现有技术的主要缺点在于不能处理一元运算符,不能处理关系表达式语句:例如:d>20,h=20*d;d<=20,h=300;当钢筋直径大于20时,h取20*直径的值,当d不大于时,h为300;这种表达式语句在钢筋规范图集中比比皆是。传统的基于后缀表达式的计算无法实现一个字符两种含义的计算。
为了更好的满足规范要求,满足用户的使用需求,解析表达式语句迫在眉睫。
发明内容
本发明的目的是针对现有的技术存在上述问题,提出了一种利用C#的JIT实时编译技术,动态的编译用户定义的函数,并求值,同时通过构件AST语法树,校验表达式以及函数的输入是否正确,实现更加智能的基于AST的数学表达式计算算法。
本发明的目的可通过下列技术方案来实现:一种基于AST的数学表达式计算算法,包括以下步骤:
S1、用户输入的表达式转换为Token并识别:
1)、定义词法规则,从配置文件中读取语法规则;
常用的语法规则如下:
标识符:[a-zA-Z_]([a-zA-Z_]|[0-9])*
数字字面量:[1-9]\d*\.\d*|0\.\d*[1-9]\d*|[0-9]\d*
分割符:‘,’或‘’或‘(’或‘)’
运算符:’+’,’-’,’*’,’/’
逻辑运算符:与(&&),或(||),非(~)
关系运算符:大于(>),小于(<),等于(==),大于等于(>=),小于等于(<=)
2)、基于词法规则构建有限自动机;
3)、识别Token;
while(!EOF){
匹配分割符,成功退出循环;
不成功,尝试匹配数字;
不成功,则回溯,尝试匹配运算符;
不成功,则回溯,尝试匹配逻辑运算符;
不成功,则回溯,尝试匹配关系运算符;
不成功,则回溯,尝试匹配标识符;
不成功,停止识别,抛出异常;
}
S2、将上步识别的Token组成AST语法树:
1)、定义语法规则;
exp:logicalop//表达式
logicalop:reop([&&||!]reop)*//逻辑表达式
reop:add([<>>=<===]add)?//关系表达式
add:mul((+|-)mul)*//加法表达式
mul:pri(('*'|'/')pri)*//乘法表达式
pri:Id|IntLiteral|doubleLiteral|Func|'('exp')';//基础表达式
Id:标识符
IntLiteral:整数
doubleLiteral:浮点数
Func:funcName'('funPara')'://函数名称
funcName:Id//参数ID
funPara:(exp)?//参数表达式
2)、语法规则算法描述;
(1)表达式由逻辑表达式构成;
(2)逻辑表达式由一个或者多个关系表达式和逻辑运算符组成;
(3)关系表达式由加法表达式和关系运算符构成;
(4)加法表达式由一个乘法表达式或者多个乘法表达式和加号或者减号构成;
(5)乘法表达式由一个基本表达式或者多个基本表达式和乘号或者除号构成;
(6)基本表达式由整形字面量、者浮点字面量、函数调用或者标识符以及括号表达式构成;
(7)参数表达式由逗号将多个表达式组合在一起;
3)、根据语法规则构建AST语法树;
针对每一行将其拆分成两个部分:冒号左边的非终结符和冒号右边的对应产生式;再将产生式按其中的'|'分隔符拆分成若干个产生式;对每个产生式进行考察,若第一个Token为非终结符则递归寻找First集合,若为终结符,则加入到此非终结符对应的First集合中去;
(1)计算First集合
假设要计算的产生式是x:
如果x的开头是终结符Token,那么First(x)包含的元素就是这个Token;
如果x的开头是非终结符a,那么First(x)要包含First(a)的所有成员;
如果x的第一个元素a能够产生ε,则再往下看一个元素b,把First(b)的成员也加入到First(x),以此类推;如果所有元素都可能返回ε,那么First(x)也应该包含ε,则为x也可能产生ε;
(2)计算Follow集合
扫描语法规则,查看x后面都可能跟哪些符号;如果后面跟着终结符,则都加到Follow(x)集合中去;如果后面是非终结符,则把其First集合加到自身的Follow集合中;如果后面的非终结符可能产出ε,就再往后查看,直至找到程序终结符号;
(3)构造预测表
a、对文法G的每个产生式A→α执行第(2)和第(3)步骤;
b、对每个终结符a∈FIRST(α),把A→α加至M[A,a]中;
c、若ε∈FIRST(α),则对任何b∈FOLLOW(A)把A→α加至M[A,b]中;
(4)创建AST语法树
a、读取当前的语法节点,获取其名字并创建一个节点;
b、如果当前语法节点含有孩子节点,那么获取当前节点的类型;
c、如果当前节点是逻辑与,创建每一个孩子节点的语法树,并获取节点;
d、如果获取节点为空,则抛出异常,构件语法树失败;
e、如果当前节点是逻辑或,使用first集合和follow集合预测匹配子节点的类型,并创建改孩子节点的语法树,如果创建失败则抛出异常,构件语法树失败;创建成功,则加入到当前节点的子节点中;
S3、解析语法树计算表达式的值:
对于加法节点,其值为左右子节点的和/差;
对于乘法节点,其值为左右子节点的积/商;
对于基础节点,如果其类型为标识符,则其值就是该标识符的值;如果其类型为整形或者浮点型字面量,则其值就是当前字面量的值;如果是函数或者括号表达式,则其值就是函数调用的结果。
在上述的基于AST的数学表达式计算算法中,步骤S1的1)中,采用正则表达式方式表示词法规则。
在上述的基于AST的数学表达式计算算法中,步骤S3中,括号表达式可以看成没有函数名的函数,其返回值就是表达式的计算结果。
在上述的基于AST的数学表达式计算算法中,步骤S3中,算法描述:
访问当前节点,
若当前节点的类型为逻辑运算符,那么求孩子节点的值,然后计算逻辑表达式的值;
若当前节点的类型为关系运算符,那么求孩子节点的值,然后计算关系表达式的值;
若当前节点的类型为加法运算符,那么求孩子节点的值,然后计算加/减法表达式的值;
若当前节点的类型为乘法运算符,那么求孩子节点的值,然后计算乘/除法表达式的值;
若当前节点的类型为函数节点,那么调用对应得函数,将子节点作为参数求出其值;
若当前节点为标识符节点,那么查找符号表,获取标识符的值,作为当前节点的值;
若当前节点为括号运算符,那么计算其子节点的值,作为当前节点的值;
若当前节点为整形或者浮点型的字面量,那么其字面量值即为当前节点的值;
对该语法树做深度优先遍历,然后回溯即可求出其表达式的值。
在上述的基于AST的数学表达式计算算法中,关系表达式的值为真或假。
与现有技术相比,本基于AST的数学表达式计算算法具有以下有益效果:
1、可以在用户输入含标识符的表达式时校验输入是否合法。
2、如果内置数学函数无法满足用户需求,还提供自定义的函数调用计算功能,即支持用户定义函数的调用,极大地扩展了计算表达式的功能。
3、能够处理表达式语句,并根据条件选择计算公式,使用户使用起来没有任何学习成本。
附图说明
图1是本发明的处理流程图。
图2是本发明中构建有限自动机的状态转换图。
具体实施方式
下面结合附图和具体实施例对本发明的具体实施方式做进一步说明:
术语解释:
有限自动机:是为研究有限内存的计算过程和某些语言类而抽象出的一种计算模型。有限状态自动机拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。
正则表达式:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
回溯:回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。
AST:抽象语法树
反射:这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息
Token:表达式中的标记符、运算符、变量的总称。
a/b/ε:希腊字母,用来表示数学符号。
while(value){}:循环标记,下方的执行范围为循环,后面括号内容表示判断条件,即满足条件就进入循环。
First(x):表示函数处理,First代表函数名称,x代表函数输入。
Dll:程序编译后生成的库文件统称。
函数:用于处理问题的方法。通常形式为:返回值函数名(函数参数列表)。
如图1所示,本基于AST的数学表达式计算算法,包括以下步骤:
S1、用户输入的表达式转换为Token并识别:
1)、定义词法规则,采用正则表达式方式表示词法规则,从配置文件中读取语法规则;
常用的语法规则如下:
标识符:[a-zA-Z_]([a-zA-Z_]|[0-9])*
数字字面量:[1-9]\d*\.\d*|0\.\d*[1-9]\d*|[0-9]\d*
分割符:‘,’或‘’或‘(’或‘)’
运算符:’+’,’-’,’*’,’/’
逻辑运算符:与(&&),或(||),非(~)
关系运算符:大于(>),小于(<),等于(==),大于等于(>=),小于等于(<=)
2)、基于词法规则构建有限自动机;
3)、识别Token;
while(!EOF){
匹配分割符,成功退出循环;
不成功,尝试匹配数字;
不成功,则回溯,尝试匹配运算符;
不成功,则回溯,尝试匹配逻辑运算符;
不成功,则回溯,尝试匹配关系运算符;
不成功,则回溯,尝试匹配标识符;
不成功,停止识别,抛出异常;
}
S2、将上步识别的Token组成AST语法树:
1)、定义语法规则;
exp:logicalop//表达式
logicalop:reop([&&||!]reop)*//逻辑表达式
reop:add([<>>=<===]add)?//关系表达式
add:mul((+|-)mul)*//加法表达式
mul:pri(('*'|'/')pri)*//乘法表达式
pri:Id|IntLiteral|doubleLiteral|Func|'('exp')';//基础表达式
Id:标识符
IntLiteral:整数
doubleLiteral:浮点数
Func:funcName'('funPara')'://函数名称
funcName:Id//参数ID
funPara:(exp)?//参数表达式
2)、语法规则算法描述;
(1)表达式由逻辑表达式构成;
(2)逻辑表达式由一个或者多个关系表达式和逻辑运算符组成;
(3)关系表达式由加法表达式和关系运算符构成;
(4)加法表达式由一个乘法表达式或者多个乘法表达式和加号或者减号构成;
(5)乘法表达式由一个基本表达式或者多个基本表达式和乘号或者除号构成;
(6)基本表达式由整形字面量、者浮点字面量、函数调用或者标识符以及括号表达式构成;
(7)参数表达式由逗号将多个表达式组合在一起;
3)、根据语法规则构建AST语法树;
针对每一行将其拆分成两个部分:冒号左边的非终结符和冒号右边的对应产生式;再将产生式按其中的'|'分隔符拆分成若干个产生式;对每个产生式进行考察,若第一个Token为非终结符则递归寻找First集合,若为终结符,则加入到此非终结符对应的First集合中去;
(1)计算First集合
假设要计算的产生式是x:
如果x的开头是终结符Token,那么First(x)包含的元素就是这个Token;
如果x的开头是非终结符a,那么First(x)要包含First(a)的所有成员;
如果x的第一个元素a能够产生ε,则再往下看一个元素b,把First(b)的成员也加入到First(x),以此类推;如果所有元素都可能返回ε,那么First(x)也应该包含ε,则为x也可能产生ε;
(2)计算Follow集合
扫描语法规则,查看x后面都可能跟哪些符号;如果后面跟着终结符,则都加到Follow(x)集合中去;如果后面是非终结符,则把其First集合加到自身的Follow集合中;如果后面的非终结符可能产出ε,就再往后查看,直至找到程序终结符号;
(3)构造预测表
a、对文法G的每个产生式A→α执行第(2)和第(3)步骤;
b、对每个终结符a∈FIRST(α),把A→α加至M[A,a]中;
c、若ε∈FIRST(α),则对任何b∈FOLLOW(A)把A→α加至M[A,b]中;
(4)创建AST语法树
a、读取当前的语法节点,获取其名字并创建一个节点;
b、如果当前语法节点含有孩子节点,那么获取当前节点的类型;
c、如果当前节点是逻辑与,创建每一个孩子节点的语法树,并获取节点;
d、如果获取节点为空,则抛出异常,构件语法树失败;
e、如果当前节点是逻辑或,使用first集合和follow集合预测匹配子节点的类型,并创建改孩子节点的语法树,如果创建失败则抛出异常,构件语法树失败;创建成功,则加入到当前节点的子节点中;
S3、解析语法树计算表达式的值:
对于加法节点,其值为左右子节点的和/差;
对于乘法节点,其值为左右子节点的积/商;
对于基础节点,如果其类型为标识符,则其值就是该标识符的值;如果其类型为整形或者浮点型字面量,则其值就是当前字面量的值;如果是函数或者括号表达式,则其值就是函数调用的结果。括号表达式可以看成没有函数名的函数,其返回值就是表达式的计算结果。
算法描述:
访问当前节点,
若当前节点的类型为逻辑运算符,那么求孩子节点的值,然后计算逻辑表达式的值;
若当前节点的类型为关系运算符,那么求孩子节点的值,然后计算关系表达式的值,关系表达式的值为真或假;
若当前节点的类型为加法运算符,那么求孩子节点的值,然后计算加/减法表达式的值;
若当前节点的类型为乘法运算符,那么求孩子节点的值,然后计算乘/除法表达式的值;
若当前节点的类型为函数节点,那么调用对应得函数,将子节点作为参数求出其值;
若当前节点为标识符节点,那么查找符号表,获取标识符的值,作为当前节点的值;
若当前节点为括号运算符,那么计算其子节点的值,作为当前节点的值;
若当前节点为整形或者浮点型的字面量,那么其字面量值即为当前节点的值;
对该语法树做深度优先遍历,然后回溯即可求出其表达式的值。
与现有技术相比,本基于AST的数学表达式计算算法具有以下有益效果:
1、可以在用户输入含标识符的表达式时校验输入是否合法。
2、如果内置数学函数无法满足用户需求,还提供自定义的函数调用计算功能,即支持用户定义函数的调用,极大地扩展了计算表达式的功能。
3、能够处理表达式语句,并根据条件选择计算公式,使用户使用起来没有任何学习成本。
当然,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。
Claims (5)
1.一种基于AST的数学表达式计算算法,其特征在于,包括以下步骤:
S1、用户输入的表达式转换为Token并识别:
1)、定义词法规则,从配置文件中读取语法规则;
常用的语法规则如下:
标识符:[a-zA-Z_]([a-zA-Z_]|[0-9])*
数字字面量:[1-9]\d*\.\d*|0\.\d*[1-9]\d*|[0-9]\d*
分割符:‘,’或‘’或‘(’或‘)’
运算符:’+’,’-’,’*’,’/’
逻辑运算符:与(&&),或(||),非(~)
关系运算符:大于(>),小于(<),等于(==),大于等于(>=),小于等于(<=)
2)、基于词法规则构建有限自动机;
3)、识别Token;
while(!EOF){
匹配分割符,成功退出循环;
不成功,尝试匹配数字;
不成功,则回溯,尝试匹配运算符;
不成功,则回溯,尝试匹配逻辑运算符;
不成功,则回溯,尝试匹配关系运算符;
不成功,则回溯,尝试匹配标识符;
不成功,停止识别,抛出异常;
}
S2、将上步识别的Token组成AST语法树:
1)、定义语法规则;
exp:logicalop//表达式
logicalop:reop([&&||!]reop)*//逻辑表达式
reop:add([<>>=<===]add)?//关系表达式
add:mul((+|-)mul)*//加法表达式
mul:pri(('*'|'/')pri)*//乘法表达式
pri:Id|IntLiteral|doubleLiteral|Func|'('exp')';//基础表达式
Id:标识符
IntLiteral:整数
doubleLiteral:浮点数
Func:funcName'('funPara')'://函数名称
funcName:Id//参数ID
funPara:(exp)?//参数表达式
2)、语法规则算法描述;
(1)表达式由逻辑表达式构成;
(2)逻辑表达式由一个或者多个关系表达式和逻辑运算符组成;
(3)关系表达式由加法表达式和关系运算符构成;
(4)加法表达式由一个乘法表达式或者多个乘法表达式和加号或者减号构成;
(5)乘法表达式由一个基本表达式或者多个基本表达式和乘号或者除号构成;
(6)基本表达式由整形字面量、者浮点字面量、函数调用或者标识符以及括号表达式构成;
(7)参数表达式由逗号将多个表达式组合在一起;
3)、根据语法规则构建AST语法树;
针对每一行将其拆分成两个部分:冒号左边的非终结符和冒号右边的对应产生式;再将产生式按其中的'|'分隔符拆分成若干个产生式;对每个产生式进行考察,若第一个Token为非终结符则递归寻找First集合,若为终结符,则加入到此非终结符对应的First集合中去;
(1)计算First集合
假设要计算的产生式是x:
如果x的开头是终结符Token,那么First(x)包含的元素就是这个Token;
如果x的开头是非终结符a,那么First(x)要包含First(a)的所有成员;
如果x的第一个元素a能够产生ε,则再往下看一个元素b,把First(b)的成员也加入到First(x),以此类推;如果所有元素都可能返回ε,那么First(x)也应该包含ε,则为x也可能产生ε;
(2)计算Follow集合
扫描语法规则,查看x后面都可能跟哪些符号;如果后面跟着终结符,则都加到Follow(x)集合中去;如果后面是非终结符,则把其First集合加到自身的Follow集合中;如果后面的非终结符可能产出ε,就再往后查看,直至找到程序终结符号;
(3)构造预测表
a、对文法G的每个产生式A→α执行第(2)和第(3)步骤;
b、对每个终结符a∈FIRST(α),把A→α加至M[A,a]中;
c、若ε∈FIRST(α),则对任何b∈FOLLOW(A)把A→α加至M[A,b]中;
(4)创建AST语法树
a、读取当前的语法节点,获取其名字并创建一个节点;
b、如果当前语法节点含有孩子节点,那么获取当前节点的类型;
c、如果当前节点是逻辑与,创建每一个孩子节点的语法树,并获取节点;
d、如果获取节点为空,则抛出异常,构件语法树失败;
e、如果当前节点是逻辑或,使用first集合和follow集合预测匹配子节点的类型,并创建改孩子节点的语法树,如果创建失败则抛出异常,构件语法树失败;创建成功,则加入到当前节点的子节点中;
S3、解析语法树计算表达式的值:
对于加法节点,其值为左右子节点的和/差;
对于乘法节点,其值为左右子节点的积/商;
对于基础节点,如果其类型为标识符,则其值就是该标识符的值;如果其类型为整形或者浮点型字面量,则其值就是当前字面量的值;如果是函数或者括号表达式,则其值就是函数调用的结果。
2.如权利要求1所述的基于AST的数学表达式计算算法,其特征在于,步骤S1的1)中,采用正则表达式方式表示词法规则。
3.如权利要求1所述的基于AST的数学表达式计算算法,其特征在于,步骤S3中,括号表达式可以看成没有函数名的函数,其返回值就是表达式的计算结果。
4.如权利要求1所述的基于AST的数学表达式计算算法,其特征在于,步骤S3中,算法描述:
访问当前节点,
若当前节点的类型为逻辑运算符,那么求孩子节点的值,然后计算逻辑表达式的值;
若当前节点的类型为关系运算符,那么求孩子节点的值,然后计算关系表达式的值;
若当前节点的类型为加法运算符,那么求孩子节点的值,然后计算加/减法表达式的值;
若当前节点的类型为乘法运算符,那么求孩子节点的值,然后计算乘/除法表达式的值;
若当前节点的类型为函数节点,那么调用对应得函数,将子节点作为参数求出其值;
若当前节点为标识符节点,那么查找符号表,获取标识符的值,作为当前节点的值;
若当前节点为括号运算符,那么计算其子节点的值,作为当前节点的值;
若当前节点为整形或者浮点型的字面量,那么其字面量值即为当前节点的值;
对该语法树做深度优先遍历,然后回溯即可求出其表达式的值。
5.如权利要求4所述的基于AST的数学表达式计算算法,其特征在于,关系表达式的值为真或假。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111290306.1A CN113987405A (zh) | 2021-11-02 | 2021-11-02 | 一种基于ast的数学表达式计算算法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111290306.1A CN113987405A (zh) | 2021-11-02 | 2021-11-02 | 一种基于ast的数学表达式计算算法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113987405A true CN113987405A (zh) | 2022-01-28 |
Family
ID=79745898
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111290306.1A Pending CN113987405A (zh) | 2021-11-02 | 2021-11-02 | 一种基于ast的数学表达式计算算法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113987405A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115081393A (zh) * | 2022-07-19 | 2022-09-20 | 上海中汇亿达金融信息技术有限公司 | 用于表达式实时组装文字展示的方法 |
CN115796166A (zh) * | 2023-02-06 | 2023-03-14 | 华侨大学 | 一种智慧物流控制系统的正则表达式测试方法和系统 |
-
2021
- 2021-11-02 CN CN202111290306.1A patent/CN113987405A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115081393A (zh) * | 2022-07-19 | 2022-09-20 | 上海中汇亿达金融信息技术有限公司 | 用于表达式实时组装文字展示的方法 |
CN115081393B (zh) * | 2022-07-19 | 2023-09-15 | 上海中汇亿达金融信息技术有限公司 | 用于表达式实时组装文字展示的方法 |
CN115796166A (zh) * | 2023-02-06 | 2023-03-14 | 华侨大学 | 一种智慧物流控制系统的正则表达式测试方法和系统 |
CN115796166B (zh) * | 2023-02-06 | 2023-05-09 | 华侨大学 | 一种智慧物流控制系统的正则表达式测试方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110187885B (zh) | 一种量子程序编译的中间代码生成方法及装置 | |
CN112100054B (zh) | 一种面向数据管控的程序静态分析方法和系统 | |
CN108388425B (zh) | 一种基于lstm自动补全代码的方法 | |
CN112733137B (zh) | 一种面向漏洞检测的二进制代码相似性分析方法 | |
JPS6375835A (ja) | 目的コ−ド、プログラム・リスト及び設計文書を生成する装置 | |
CN113987405A (zh) | 一种基于ast的数学表达式计算算法 | |
US20040154009A1 (en) | Structuring program code | |
CN115509514B (zh) | 一种前端数据模拟方法、装置、设备及介质 | |
CN110688121A (zh) | 代码补全方法、装置、计算机装置及存储介质 | |
CN110096264A (zh) | 一种代码运行方法及装置 | |
CN113508385B (zh) | 使用子例程图谱进行形式语言处理的方法和系统 | |
Yuan et al. | From local to global semantic clone detection | |
Valenzuela-Escarcega et al. | Description of the Odin event extraction framework and rule language | |
US20030233640A1 (en) | Structuring program code | |
US20080141230A1 (en) | Scope-Constrained Specification Of Features In A Programming Language | |
Koskimies et al. | The design of a language processor generator | |
CN112905232B (zh) | 一种基于语法分析树的程序代码平行语料挖掘方法及系统 | |
Handzhiyski et al. | Tunnel parsing with counted repetitions | |
Shah et al. | Comparative Analysis of LR Parsers in Designing of Compilers | |
KR20050065015A (ko) | 프로그램의 복제 여부를 검사하는 방법 및 시스템 | |
Wąsowski et al. | Concrete Syntax | |
Oumarou et al. | A Novel Code Completion Strategy | |
Das | Compiler Design using FLEX and YACC | |
Gabbrielli et al. | Describing a Programming Language | |
Sičák et al. | Supercombinator set acquired from context-free grammar samples |
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 |