expressions 2.0.0

Flexible expression parser and evaluator
Documentation
WHITESPACE = _{ " " | "\t" | NEWLINE }
LITERAL    = @{ ( ASCII_ALPHANUMERIC | "." | "," | "_" )+ }

root       = _{ SOI ~ expression ~ EOI }
expression = { binary_op }

group     = { DELIM_L ~ expression ~ DELIM_R }
    DELIM_L = { "(" }
    DELIM_R = { ")" }
simple    = _{ unary_op | LITERAL | group }
binary_op = _{ simple ~ (binary_operator ~ simple)* }
    binary_operator = _{ EQ | NEQ | GTE | GT | LTE | LT | AND | OR | BIT_AND | BIT_OR | ADD | SUB | MUL | DIV | MOD | EXP }
        EQ      = { "==" }
        NEQ     = { "!=" }
        GTE     = { ">=" }
        GT      = { ">" }
        LTE     = { "<=" }
        LT      = { "<" }
        AND     = { "&&" }
        OR      = { "||" }
        BIT_AND = { "&" }
        BIT_OR  = { "|" }
        ADD     = { "+" }
        SUB     = { "-" }
        MUL     = { "*" }
        DIV     = { "/" }
        MOD     = { "%" }
        EXP     = { "^" }
unary_op  = _{ unary_operator ~ simple }
    unary_operator = _{ PLUS | MINUS | NOT | BIT_NOT }
        PLUS    = { "+" }
        MINUS   = { "-" }
        NOT     = { "!" }
        BIT_NOT = { "~" }