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 = { "^" }
expr = { term ~ (operation ~ term)* }
term = _{ num | symbol | "(" ~ expr ~ ")" }
assignment = { symbol ~ ":=" ~ expr }
solvefor = { "solve" ~ expr ~ "=" ~ expr ~ "for" ~ symbol }
statement = _{ SOI ~ ( solvefor | assignment | expr ) ~ EOI }
WHITESPACE = _{ " " | "\t" }