message Parts
The individual tokens (strings) constituting the message.
Alphanumerics are in runs, separated from other alphanumerics by a single space.
Operator characters are never beside spaces, and are always parsed as individual tokens.
Open guillemet («), double dagger (‡), and close guillemet (») are used to indicate repeated or optional substructures.
The characters octothorp (#) and question mark (?) modify the output of repeated substructures to produce either a count of the repetitions or a boolean indicating whether an optional subexpression (expecting no arguments) was present.
Placing a question mark (?) after a group containing arguments but no double dagger (‡) will limit the repetitions of the group to at most one. Although limiting the method definitions to only accept 0..1 occurrences would accomplish the same grammatical narrowing, the parser might still attempt to parse more than one occurrence, leading to unnecessarily confusing diagnostics.
An exclamation mark (!) can follow a group of alternations to produce the 1-based index of the alternative that actually occurred.
An underscore (_) indicates where an argument occurs.
A single dagger (†) may occur immediately after an underscore to cause the argument expression to be evaluated in the static scope during compilation, wrapping the value in a LiteralPhraseDescriptor. This is applicable to both methods and macros. The expression is subject to grammatical restrictions, and it must yield a value of suitable type.
An up-arrow (↑) after an underscore indicates an in-scope variable name is to be parsed. The subexpression causes the variable itself to be provided, rather than its value.
An exclamation mark (!) may occur after the underscore instead, to indicate the argument expression may be ⊤-valued or ⊥-valued. Since a function (and therefore a method definition) cannot accept a ⊤-valued argument, this mechanism only makes sense for macros, since macros bodies are passed phrases, which may be typed as yielding a top-valued result.
An ellipsis (…) matches a single A_Token.
An exclamation mark (!) after an ELLIPSIS indicates any token will be accepted at that position.
An octothorp (#) after an ellipsis indicates only a literal token will be accepted.
The Nthsection (§) in a message name indicates where a macro's NthA_Definition.prefixFunctions should be invoked with the current parse stack up to that point.
A backquote (`) can precede any operator character, such as guillemets or double dagger, to ensure it is not used in a special way. A backquote may also operate on another backquote (to indicate that an actual backquote token will appear in a call).