#lexer #calculator #parser #tokens #ast #calculate #expression

bin+lib wcal

一个包含词法分析和解析器的计算器

2 个不稳定版本

0.2.0 2021年4月23日
0.1.0 2021年4月22日

#64#calculate

MIT 许可证

32KB
786

wcal

Build Crates.io version shield Docs Crates.io license shield

用 Rust 编写的计算器

允许的操作符:+ - * / ( ).

结果可以是 i128f64。当结果是 i128 并且发生除法转换时,例如 3/2=1,将会出现警告。

此计算器有三个步骤

  • 使用 logos 将表达式解析为标记。
  • 使用解析器将标记解析为 AST。
  • 从 AST 计算结果。

以下解析器可用

  • 自顶向下解析器(默认)

库使用

示例

use wcal::{calculator, parser};
 
fn main() {
    let res: f64 = calculator!("1+2").unwrap();
    assert_eq!(res, 3f64);
 
    let res: i128 = calculator("1+2", wcal::parser::top_down_parser::parse).unwrap();
    assert_eq!(res, 3);
 
    let res: f64 = calculator("1+2", wcal::parser::top_down_parser::parse).unwrap();
    assert_eq!(res, 3f64);
}

有关此包的更多用法,请参阅文档

可执行文件使用

构建

要求: rust cargo

$ cargo run build --release

命令行模式

$ wcal "2*6+(1/2)" -f "2*6+(1/2)"
i> 2*6+(1/2)
Warning: division will cause a cast
12
f> 2*6+(1/2)
12.5

默认模式是 i128,使用 -f 切换到 f64,使用 -i 切换回。

交互式模式

$ wcal
i> help
i       Enter i128 mod
f       Enter f64 mod
quit
q       Quit
i> f
Enter f64 mod
f> 1/2
0.5
f> quit
Bye!

依赖项

~1.5MB