#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum ArithmeticOperator {
Add,
Subtract,
Multiply,
Divide,
Remainder,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum ComparisonOperator {
Equal,
NotEqual,
Less,
LessEqual,
Greater,
GreaterEqual,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum LogicalOperator {
And,
Or,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum BitwiseOperator {
And,
Or,
Xor,
ShiftLeft,
ShiftRight,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum BinaryOperator {
Arithmetic(ArithmeticOperator),
Comparison(ComparisonOperator),
Logical(LogicalOperator),
Bitwise(BitwiseOperator),
}
impl std::fmt::Display for BinaryOperator {
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Arithmetic(ArithmeticOperator::Add) => write!(formatter, "+"),
Self::Arithmetic(ArithmeticOperator::Subtract) => write!(formatter, "-"),
Self::Arithmetic(ArithmeticOperator::Multiply) => write!(formatter, "*"),
Self::Arithmetic(ArithmeticOperator::Divide) => write!(formatter, "/"),
Self::Arithmetic(ArithmeticOperator::Remainder) => write!(formatter, "%"),
Self::Comparison(ComparisonOperator::Equal) => write!(formatter, "=="),
Self::Comparison(ComparisonOperator::NotEqual) => write!(formatter, "!="),
Self::Comparison(ComparisonOperator::Less) => write!(formatter, "<"),
Self::Comparison(ComparisonOperator::LessEqual) => write!(formatter, "<="),
Self::Comparison(ComparisonOperator::Greater) => write!(formatter, ">"),
Self::Comparison(ComparisonOperator::GreaterEqual) => write!(formatter, ">="),
Self::Logical(LogicalOperator::And) => write!(formatter, "&&"),
Self::Logical(LogicalOperator::Or) => write!(formatter, "||"),
Self::Bitwise(BitwiseOperator::And) => write!(formatter, "&"),
Self::Bitwise(BitwiseOperator::Or) => write!(formatter, "|"),
Self::Bitwise(BitwiseOperator::Xor) => write!(formatter, "^"),
Self::Bitwise(BitwiseOperator::ShiftLeft) => write!(formatter, "<<"),
Self::Bitwise(BitwiseOperator::ShiftRight) => write!(formatter, ">>"),
}
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum UnaryOperator {
Negate,
LogicalNot,
BitwiseNot,
}