10 个版本

0.1.9 2022 年 3 月 16 日
0.1.8 2022 年 2 月 28 日

#298解析工具

每月 21 次下载

MIT 许可证

345KB
8K SLoC

Prexel

数学表达式的求值器。

用法

[dependencies]
prexel = "0.1.0"

示例

您可以使用 Evaluator<N> 来求值一个表达式。

fn main(){
    let evaluator: Evaluator<f64> = Evaluator::new();
    println!("{:?}", evaluator.eval("2 + 3 * 5"));
}

警告

此库可能不稳定,并且可能会在任意时间发生破坏性更改。

实现

求值每个表达式的步骤有 3 个

这使用 TokenizerEvaluatorContext 完成。 Tokenizerstr 转换为 Token,而 Evaluator 处理并评估标记。

Context 是存储用于评估的所有函数、变量、常量和附加信息的地方。您可以使用 DefaultContext 提供的实现。

精度

prexel::ops::math 中实现的一些数学函数(如三角函数)在内部使用 f64 进行计算,并使用 FromPrimitiveToPrimitive 特性,可能会导致精度错误。

如果您需要更高的精度,请使用 decimal 功能启用 128 位十进制数。

use prexel::context::DefaultContext;
use prexel::evaluator::Evaluator;

fn main(){
    let context = DefaultContext::new_decimal();
    let evaluator = Evaluator::with_context(context);

    println!("{:?}", evaluator.eval("Cos(180) * 10!"));
}

依赖项

~0.6–1.1MB
~21K SLoC