Files
bigbirb/src/commands/eval/mod.rs
2024-10-12 01:36:39 -04:00

24 lines
567 B
Rust

use crate::common::{Context, Error};
mod tokenizer;
mod parse;
fn evaluate(expr: &str) -> Result<f64, Error> {
let tokens = tokenizer::Token::tokenize(expr)?;
let mut tokens = tokens.iter();
let tree = parse::ParseTree::new(&mut tokens)?;
Ok(tree.evaluate())
}
/// Evaluates an expression (uses Polish Notation)
#[poise::command(slash_command, prefix_command)]
pub async fn eval(ctx: Context<'_>,
#[rest]
expr: String) -> Result<(), Error>
{
ctx.reply(format!("{}", evaluate(&expr)?)).await?;
Ok(())
}