pnc 0.1.1

A fast, fully offline, terminal-only reverse Polish notation (RPN) calculator
use pnc_engine::parse;
use std::io;
use std::process::ExitCode;

pub fn eval_tokens(tokens: Vec<String>) -> ExitCode {
    let mut stack = Vec::new();
    let line = tokens.join(" ");
    if let Err(e) = parse::eval_line(&mut stack, &line) {
        eprintln!("{}", e);
        return ExitCode::from(1);
    }
    if let Some(v) = stack.last() {
        println!("{}", v);
    }
    ExitCode::SUCCESS
}

pub fn eval_stdin() -> ExitCode {
    let mut line = String::new();
    if io::stdin().read_line(&mut line).is_err() {
        eprintln!("failed to read stdin");
        return ExitCode::from(1);
    }
    let mut stack = Vec::new();
    if let Err(e) = parse::eval_line(&mut stack, &line) {
        eprintln!("{}", e);
        return ExitCode::from(1);
    }
    if let Some(v) = stack.last() {
        println!("{}", v);
    }
    ExitCode::SUCCESS
}