WHITESPACE = _{ " " | "\t" } number = @{ "-"? ~ ASCII_DIGIT+ } postprocess = { "avg" | "max" | "min" | "sum" } dice = ${ number ~ ( "d" | "D" ) ~ number ~ postprocess? } compare = { ">=" | "<=" | ">" | "<" | "=" } checker = { compare ~ number } op_add = { "+" } op_sub = { "-" } op_multiply = { "*" | "x" } operator = _{ op_multiply | op_add | op_sub } parentheses = { "(" ~ expr ~ ")" } item = { parentheses | dice | number } expr = { item ~ ( operator ~ item )* } command = _{ SOI ~ expr ~ checker? ~ EOI }