#布尔 #表达式 #执行 #解析 # #电路

bin+lib positron

解析和执行布尔表达式

6 个版本

0.2.4 2021 年 11 月 6 日
0.2.3 2021 年 11 月 4 日
0.1.0 2021 年 11 月 2 日

#1996解析器实现

每月 28 次下载

GPL-3.0 许可证

19KB
237 代码行

positron - 解析和执行布尔表达式

托管版本(网站) 在此 代码: DevHyperCoder/positron-web

托管版本(API) 在此 代码: DevHyperCoder/positron-api

安装

Cargo.toml

[dependencies]
positron={version = "x.x.x", features= ["json"]}
  • json 功能推导 SerializeDeserialize

在 crates.io 查找 positron 的最新版本

许可证

positron 根据 GNU 通用公共许可证 3 许可。我们的 GPL-3 可以在 此处 找到


lib.rs:

positron - 解析和执行布尔表达式

示例

基本的或门

use std::collections::HashMap;
use positron::{circuit::Circuit,gate::Gate};

// a + b
let gate =  Gate::Or(vec![Gate::Value("a".to_string()),Gate::Value("b".to_string())]);

let mut data = HashMap::new();
data.insert("a".to_string(),true);
data.insert("b".to_string(),true);

let circuit = Circuit {
    gate,
    data
};

assert_eq!(circuit.execute().unwrap(),true)

解析示例

use std::{collections::HashMap,str::FromStr};
use positron::{circuit::Circuit,parser::Parsed};

let input = "(a+b).(a.b)";

let parsed = Parsed::from_str(input).unwrap();

assert!(parsed.variables.contains("a"));
assert!(parsed.variables.contains("b"));

let mut data = HashMap::new();
data.insert("a".to_string(),true);
data.insert("b".to_string(),true);

let circuit = Circuit {
    gate:parsed.root_gate,
    data
};

assert_eq!(circuit.execute().unwrap(),true)

依赖项

~3.5MB
~69K SLoC