• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go实现的数学表达式解析计算引擎math-engine

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

使用 Go 实现的数学表达式微型计算引擎,无任何依赖,相对比较完整的完成了数学表达式解析执行,包括词法分析、语法分析、构建AST、运行。

Demo

TODO

已实现

  • 加 +
  • 减 -
  • 乘 *
  • 除 /
  • 取余 %
  • 整数次方 ^
  • 科学计数法 e.g. 1.2e7
  • 括号 ()
  • 混合运算 e.g. 1+26/4+(456_-_89.2)-(2+4^5)
  • 友好的长数字 e.g. 123_456_789
  • 友好的错误消息 e.g.
input /> 123+89-0.0.9
ERROR: strconv.ParseFloat: parsing "0.0.9": invalid syntax
want '(' or '0-9' but get '0.0.9'
------------
123+89-0.0.9
       ^
------------

待实现

  • 科学计数法 e.g. 1.2-e7
  • 精确的浮点计算

Usage

你可以直接引用该库嵌入到自己的程序中:

go get -u github.com/dengsgo/math-engine

在代码中引入:

import "github.com/dengsgo/math-engine/engine"

e.g. :

import "github.com/dengsgo/math-engine/engine"

func main() {
    s := "1 + 2 * 6 / 4 + (456 - 8 * 9.2) - (2 + 4 ^ 5)"
    exec(s)
}

// call engine
func exec(exp string) {
    // input text -> []token
    toks, err := engine.Parse(exp)
    if err != nil {
        fmt.Println("ERROR: " + err.Error())
        return
    }
    // []token -> AST Tree
    ast := engine.NewAST(toks, exp)
    if ast.Err != nil {
        fmt.Println("ERROR: " + ast.Err.Error())
        return
    }
    // AST builder
    ar := ast.ParseExpression()
    if ast.Err != nil {
        fmt.Println("ERROR: " + ast.Err.Error())
        return
    }
    fmt.Printf("ExprAST: %+v\n", ar)
    // AST traversal -> result
    r := engine.ExprASTResult(ar)
    fmt.Println("progressing ...\t", r)
    fmt.Printf("%s = %v\n", exp, r)
}

编译运行,应该可以看到如下输出:

ExprAST: {Op:- Lhs:{Op:+ Lhs:{Op:+ Lhs:{Val:1} Rhs:{Op:/ Lhs:{Op:* Lhs:{Val:2} Rhs:{Val:6}} Rhs:{Val:4}}} Rhs:{Op:- Lhs:{Val:456} Rhs:{Op:* Lhs:{Val:8} Rhs:{Val:9.2}}}} Rhs:{Op:+ Lhs:{Val:2} Rhs:{Op:^ Lhs:{Val:4} Rhs:{Val:5}}}}
progressing ...  -639.6
1+2*6/4+(456-8*9.2)-(2+4^5) = -639.6

Compile

go version 1.12

go test
go build
./math-engine

也可以直接下载已编译好的二进制文件,直接运行:

Github Releases

实现细节

请阅读我的博客文章:用 Go 实现一个完整的数学表达式计算引擎

Mathematical expression parsing and calculation engine library. 数学表达式解析计算引擎库 — Read More

Latest commit to the master branch on 5-9-2021
Download as zip
授权协议:
Apache
开发语言:
Google Go 查看源码»
操作系统:
跨平台

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
eclipse下配置GO语言的开发环境发布时间:2022-07-10
下一篇:
go-web项目性能测试,CPU,内存泄露等发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap