#expression #reverse #polish #rpn

ripin

一个处理逆波兰表达式(Reverse Polish Notation, RPN)、编译和评估它们的库

3 个版本

使用旧的 Rust 2015

0.1.2 2017年1月11日
0.1.1 2017年1月7日
0.1.0 2017年1月5日

#2079Rust 模式

22 每月下载量

MIT 许可证

48KB
1K SLoC

Ripin-rs

Crates.io Documentation Build Status Coverage Status

一个用于处理逆波兰表达式(Reverse Polish Notated, RPN)的库。

Ripin 还可以评估变量表达式,并且不仅限于字符串令牌,它可以处理任何迭代器类型,唯一限制是你的想象力。有 examples 可以帮助你了解如何从自定义类型实现自己的表达式。

安装

Ripin 可在 crates.io 上找到,并可以像这样添加到你的 Cargo 项目中

[dependencies]
ripin = "0.1"

然后在你的代码中这样引入它

extern crate ripin;

示例

Ripin 可以评估逆波兰表达式。

use ripin::expression::FloatExpr;

let expr_str = "3 4 + 2 *"; // (3 + 4) * 2
let tokens = expr_str.split_whitespace();

let expr = FloatExpr::<f32>::from_iter(tokens).unwrap();

println!("Expression {:?} gives {:?}", expr_str, expr.evaluate())

你还可以在表达式中使用变量,使它们更加“可变”。

use std::collections::HashMap;
use ripin::evaluate::VariableFloatExpr;
use ripin::variable::IndexVar;

let mut variables = HashMap::new(); // using a Vec is the same
variables.insert(0, 3.0);
variables.insert(1, 500.0);

let expr_str = "3 $1 + 2 * $0 -"; // (3 + $1) * 2 - $0
let tokens = expr_str.split_whitespace();

let expr = VariableFloatExpr::<f32, IndexVar>::from_iter(tokens).unwrap();

let result = expr.evaluate_with_variables(&variables);

println!("Expression {:?} gives {:?}", expr_str, result); // Ok(1003)

依赖项

~245KB