elementary-row-operation-verifier 0.0.1

A tool to verify the correctness of elementary row operations on matrices
Documentation
//! 数学表达式 AST
//!
//! 优先级(从低到高):
//!   /  → 分数线(最低,a / b + c = a / (b + c))
//!   + - → 加减
//!   * 隐式乘 → 乘法
//!   - 一元负号

use num_rational::Rational64;

#[derive(Debug, Clone, PartialEq)]
pub enum Expr {
    /// 有理数
    Num(Rational64),
    /// 变量
    Var(String),
    /// a + b
    Add(Box<Expr>, Box<Expr>),
    /// a - b
    Sub(Box<Expr>, Box<Expr>),
    /// a * b
    Mul(Box<Expr>, Box<Expr>),
    /// a / b(低优先级分数线)
    Div(Box<Expr>, Box<Expr>),
    /// -a
    Neg(Box<Expr>),
}

impl Expr {
    pub fn num(n: i64) -> Self {
        Expr::Num(Rational64::from_integer(n))
    }

    pub fn frac(num: i64, den: i64) -> Self {
        Expr::Num(Rational64::new(num, den))
    }

    pub fn var(name: &str) -> Self {
        Expr::Var(name.to_string())
    }
}