logical_solver 1.0.2

Rust based logic parser, evaluator, and truth table constructor!
Documentation
use std::str::FromStr;
use crate::ast::{Expr, Opcode}; 

grammar;

pub Expr: Box<Expr> = {
    Expr ExprOp Factor => Box::new(Expr::Op(<>)), 
    Factor,
};

SingleOp: Opcode = {
        "not" => Opcode::Not,
}

ExprOp: Opcode = {
    "=>" => Opcode::Conditional,
    "<=>" => Opcode::Biconditional,
};

Factor: Box<Expr> = {
        Factor FactorOp Term => Box::new(Expr::Op(<>)),
        Term,
};

FactorOp: Opcode = {
        "and" => Opcode::And,
        "or" => Opcode::Or,
};

Term: Box<Expr> = {
        Variable => Box::new(<>),
        Boolean => Box::new(Expr::Boolean(<>)),
        SingleOp Term => Box::new(Expr::Neg(<>)),
        "(" <Expr> ")",
};

Boolean: bool = {
        r"true|false" => <> == "true", 
};


Variable: Expr = {
    r"[A-Z]+" => Expr::Variable(<>.to_string()),
}