rust-expression 0.3.1

Calculator and solver for linear equations.
Documentation
int = { ("+" | "-")? ~ ASCII_DIGIT+ }
num = @{ int ~ ("." ~ ASCII_DIGIT*)? ~ (^"e" ~ int)? }

ident = _{ ASCII_ALPHA ~ ( ASCII_ALPHANUMERIC | "_" )* }

symbol = @{ ident }

operation = _{ add | subtract | multiply | divide | rem | power }
    add      = { "+" }
    subtract = { "-" }
    multiply = { "*" }
    divide   = { "/" }
    rem      = { "%" }
    power    = { "^" }

fun_call = { symbol ~ "(" ~ ( expr ~ ("," ~ expr)* )? ~ ")" }

expr = { term ~ (operation ~ term)* }
term = _{ num | fun_call | symbol | "(" ~ expr ~ ")" }

function = { symbol ~ "(" ~ ( symbol ~ ("," ~ symbol)* )? ~ ")" ~ ":=" ~ expr }

assignment = { symbol ~ ":=" ~ expr }

solvefor = { "solve" ~ expr ~ "=" ~ expr ~ "for" ~ symbol }

plot = { "plot" ~ symbol }

statement = _{ SOI ~ ( function | plot | solvefor | assignment | expr ) ~ EOI }

WHITESPACE = _{ " " | "\t" }