pronoun-set = precedence-set / "any" ("&"/"|") " except " exception-set
exception-set = declension-set *("," declension-set) ; one or more <declension-set>s separated by commas
precedence-set = equal-preference-set *(">" equal-preference-set) ; one or more <equal-preference-set>s separated by greater-than signs
equal-preference-set = mix-set *("|" mix-set) / OPWS "any|" OPWS ; one or more <mix-set>s separated by vertical bars, or "any|"
mix-set = declension-set *("&" declension-set) / OPWS "any&" OPWS ; one or more <declension-set>s separated by ampersands, or "any&"
declension-set = pronoun *("/" pronoun) ; one or more <pronoun>s separated by slashes
pronoun = OPWS (1*ALPHA / "ask pronoun") OPWS ; <pronoun> is one or more letters, or the string "ask pronoun"
OPWS = [WSP] ; optional whitespace
Why did I use ABNF? There are an overwhelmingly large number of metasyntax notations; it is hard to choose one. In the end I chose ABNF because ABNF has a public specification.
Are there use cases which this spec doesn't cover? Quite possibly! In that case this spec could be superseded by another spec. In that case I would request that you follow the Design goals below, but I can't force you or anything