[发明专利]一种基于AST的数学表达式计算算法在审
申请号: | 202111290306.1 | 申请日: | 2021-11-02 |
公开(公告)号: | CN113987405A | 公开(公告)日: | 2022-01-28 |
发明(设计)人: | 高玉生;马仁怀;朱明龙 | 申请(专利权)人: | 山东新汉唐数据科技有限公司 |
主分类号: | G06F17/10 | 分类号: | G06F17/10 |
代理公司: | 济南知来知识产权代理事务所(普通合伙) 37276 | 代理人: | 王乾 |
地址: | 250098 山东省济南市高新区*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 ast 数学 表达式 计算 算法 | ||
本发明提供了一种基于AST的数学表达式计算算法,包括以下步骤:1、用户输入的表达式转换为Token并识别;输入为:用户表达式;输出为:Token。2、将上步识别的Token组成AST语法树;输入为:Token;输出为:AST语法树。3、解析AST语法树计算表达式的值;输入为:AST语法树,输出为:表达式的值。本发明具有以下有益效果:1、可以在用户输入含标识符的表达式时校验输入是否合法。2、如果内置数学函数无法满足用户需求,还提供自定义的函数调用计算功能,即支持用户定义函数的调用,极大地扩展了计算表达式的功能。3、能够处理表达式语句,并根据条件选择计算公式,使用户使用起来没有任何学习成本。
技术领域
本发明属于运算技术领域,涉及一种数学表达式,特别是一种基于AST的数学表达式计算算法。
背景技术
钢筋计算需要大量的计算公式;而用户在输入公式时很难校验其正确性,只能到调用的时候才能提示用户需要修改某个公式,由于节点比较多,公式比较乱,所以用户使用起来并不方便,因此解决用户输入时校验公式是否正确,变成了一件急需解决的问题。
当前常用的公式计算的方式:
1.从左到右顺序扫描整个后缀表达式;
2.如果是操作数,则将该操作数压入到栈中;
3.如果是操作符,则从栈中弹出对应的操作数,注意操作数的顺序;根据操作符进行运算,并将结果重新压入到栈中;
4.直至将整个栈扫描完毕;
5.如果后缀表达式是合法的,则扫描完毕后,栈中只有一个元素,该元素的值即为后缀表达式的结果。
现有技术的主要缺点在于不能处理一元运算符,不能处理关系表达式语句:例如:d20,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){
匹配分割符,成功退出循环;
不成功,尝试匹配数字;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于山东新汉唐数据科技有限公司,未经山东新汉唐数据科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111290306.1/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种体声波谐振器
- 下一篇:一种锂离子电池电解液及锂离子电池