#expression-parser #expression #math-parser #evaluation #complex-numbers #ast #evaluate

aftermath

一个用于解析和评估复杂数学表达式的crate

6 个版本 (稳定)

1.1.3 2023年1月30日
1.1.2 2023年1月29日
1.1.0 2023年1月20日
1.0.0 2023年1月12日
0.1.0 2023年1月10日

#2410解析器实现

每月30 次下载

MIT/Apache

125KB
3K SLoC

AfterMath

AfterMath 是一个可以原生处理复数的数学解析和评估库。这个库源于处理任意用户定义数学表达式的需求。它基于一个可评估的AST(你还可以将AST编译成逆波兰表示法)

此库还提供了一种根据给定变量(称为绑定)对解析表达式进行微分的方法

工作原理

解析

首先将输入转换为令牌流,然后对该流应用一些转换以处理多参数函数、一元运算符和隐式乘法

所有这些操作都使用迭代器方法,因此不会产生不必要的分配

然后它消耗修改后的令牌流,并使用Shunting yard算法生成AST

微分

它盲目地应用最简单的规则。例如,d/dx 2x 被微分到 (d/dx 2) * x + (d/dx x) * 2

建议在评估之前先简化微分后的表达式(见下一部分)

简化

在这里,使用简化来表示减少节点数。此库提供了一种评估基本运算(+、-、*、/、%、^)的常量项的方法。这有助于移除无用的节点(例如乘以0时)并允许用户显示更清晰的AST表示。函数只是对AST进行深度优先搜索并合并每个产生已知值的节点。

未来工作

  • 制作更多示例
  • 记录更多内容

依赖关系

~380–510KB