_WHITESPACE = " " | "\t" | " "; _COMMENT = "(*", {!"*)", <0, 0xFF>}, "*)"; _ = {_WHITESPACE | _COMMENT}; DIGIT = <"0", "9">; ADD = _, ("+"), _; SUB = _, ("-" | "−"), _; MUL = _, ("*" | "⋅" | "×"), _; DIV = _, ("/" | "∕" | "÷"), _; sign = ADD | SUB; unsigned = DIGIT, {DIGIT | _WHITESPACE | "_" | "'"}; _number = unsigned | "(", _expr, (")" | -); number = _number, {_, _number}; (* optionally with implicit multiplication *) value = [sign], number; _expr = hyper1; hyper1 = _, hyper2, {(ADD | SUB), (hyper2 | -)}, _; hyper2 = _, value, {(MUL | DIV), (value | -)}, _;