WHITESPACE = _{ " " | "\t" | "\n" | "\r" }
COMMENT = _{ "#" ~ (!"\n" ~ ANY)* }
hexprs = { SOI ~ hexpr* ~ EOI }
one_hexpr = { SOI ~ hexpr ~ EOI }
hexpr = {
composition
| tensor
| frobenius
| operation
}
composition = { "(" ~ hexpr+ ~ ")" }
tensor = { "{" ~ hexpr+ ~ "}" }
frobenius = { "[" ~ vars ~ ( "." ~ vars)? ~ "]" }
vars = { variable* }
operation = @{ (ASCII_ALPHANUMERIC | "-" | "_" | "." | "*" | "+" | "/" | "|" | ">" | ">" | ":" | "=" | "!" | "?")+ }
variable = @{ (ASCII_ALPHANUMERIC | "-" | "_") ~ (ASCII_ALPHANUMERIC | "-" | "_")* }