5 个版本

0.1.4 2024年7月24日
0.1.3 2022年6月7日
0.1.2 2022年5月30日
0.1.1 2022年5月30日
0.1.0 2022年5月30日

#414 in 解析器实现

Download history 102/week @ 2024-07-19 49/week @ 2024-07-26 6/week @ 2024-08-02

每月下载量157次

MIT/Apache

455KB
13K SLoC

evaluator_rs

Build codecov License:MIT

Rust 评估引擎库。

用法

请参阅文档以获取更多详细信息。

添加到您的 Cargo.toml

[dependencies]
evaluator_rs = "0.1"

示例

extern crate evaluator_rs;

use std::collections::HashMap;

use evaluator_rs::{evaluate, parse_expr_from_str, parse_expr_from_json, Value};

fn main() {
    // from str expression
    let expr = parse_expr_from_str("{a} + 2 + 3").unwrap();
    let parameters = HashMap::from([("a", Value::from(1))]);
    let rs = evaluate(&expr, &parameters).unwrap();
    assert_eq!(rs, Value::from(6));

    let expr = parse_expr_from_str("{a} in [1, 2 , 3]").unwrap();
    let parameters = HashMap::from([("a", Value::from(1))]);
    let rs = evaluate(&expr, &parameters).unwrap();
    assert_eq!(rs, Value::from(true));

    // from json expression
    let json_expr = r#"{
        "lhs": "{a}",
        "op": "in",
        "rhs": [4, 5, 6] 
    }"#;
    let expr = parse_expr_from_json(json_expr).unwrap();
    let parameters = HashMap::from([("a", Value::from(4))]);
    let rs = evaluate(&expr, &parameters).unwrap();
    assert_eq!(rs, Value::from(true));
}

数据类型

类型 示例
数字 1
字符串 'hello world'
布尔值 true
数组 [1, 2, 3]

支持的操作符

操作符 优先级 描述
&& 1
|| 1
== 2 等于
> 2 大于
>= 2 大于等于
< 2 小于
<= 2 小于等于
2 数组包含
* 3 乘法
/ 3 除法
+ 4 加法
- 4 减法

标识符

标识符用花括号括起来。当表达式被评估时,必须提供标识符的值。

示例

    let expr = parse_expr("{a} in [1, 2 , 3]").unwrap();
    let parameters = HashMap::from([("a", Value::from(1))]);
    let rs = evaluate(&expr, &parameters).unwrap();
    assert_eq!(rs, Value::from(true));

许可证

依赖项

~3.5–7MB
~115K SLoC