[发明专利]一种基于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){

匹配分割符,成功退出循环;

不成功,尝试匹配数字;

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于山东新汉唐数据科技有限公司,未经山东新汉唐数据科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/202111290306.1/2.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top