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