1WHITESPACE = _{ " " }
2
3Rew       = ! { ( ASCII_DIGIT | ASCII_ALPHA_UPPER | "_" | "-" ) + }
4Lit       = ! { ( ASCII_ALPHANUMERIC              | "_" | "-" ) + }
5Word      = _ { Rew | Lit }
6WordGroup = _ { Word ~ ( " " ~ Word ) * }
7
8// Argument groups are nonatomic;
9// "<whitespace |between|the|bar|or|braces |is | OK>"
10
11ArgOptChoiceGroup = { ( "[" ~ Word + ~
12                      ( "|" ~ ( Word
13                              | ArgChoiceGroup ) + ) * ~
14                        "]" ) + }
15ArgReqChoiceGroup = { ( "<" ~ Word + ~
16                      ( "|" ~ ( Word
17                              | ArgChoiceGroup ) + ) * ~
18                        ">" ) + }
19ArgChoiceGroup    = _ { ArgOptChoiceGroup
20                      | ArgReqChoiceGroup }
21
22Command = {
23    ( WordGroup ) ~
24    ( ArgChoiceGroup ) *
25}
26
27HelpMenu = {
28    SOI ~
29
30    (
31        Command ~
32        NEWLINE
33    ) * ~
34
35    EOI
36}
37