| Grammar : Spacing Definition+ EndOfFile; |
| Definition : Identifier COLON Expression SEMI; |
| Expression : Sequence (BAR Sequence)*; |
| Sequence : Prefix*; |
| Prefix : (AND | NOT)? Suffix; |
| Suffix : Primary (QUESTION | STAR | PLUS)?; |
| Primary : Identifier !COLON |
| | DOLLAR OPEN Expression CLOSE |
| | DOLLAR Identifier OPEN Expression CLOSE |
| | OPEN Expression CLOSE |
| | Literal |
| | Class |
| | DOT; |
| Identifier : $(IdentStart IdentCont*) Spacing; |
| IdentStart : [a-zA-Z_]; |
| IdentCont : IdentStart |
| | [0-9]; |
| Literal : ['] (!['] Char)* ['] Spacing |
| | ["] (!["] Char)* ["] Spacing; |
| Class : "[" (!"]" Range)* "]" Spacing; |
| Range : Char "-" Char |
| | Char; |
| Char : "\\" [nrt'"\[\]\\] |
| | "\\" [0-2] [0-7] [0-7] |
| | "\\" [0-7] [0-7]? |
| | !"\\" .; |
| COLON : ":" Spacing; |
| SEMI : ";" Spacing; |
| BAR : "|" Spacing; |
| AND : "&" Spacing; |
| NOT : "!" Spacing; |
| QUESTION : "?" Spacing; |
| STAR : "*" Spacing; |
| PLUS : "+" Spacing; |
| OPEN : "(" Spacing; |
| CLOSE : ")" Spacing; |
| DOT : "." Spacing; |
| DOLLAR : "$" Spacing; |
| Spacing : $((Space | Comment)*); |
| Comment : "#" (!EndOfLine .)* EndOfLine; |
| Space : " " |
| | "\t" |
| | EndOfLine; |
| EndOfLine : "\r\n" |
| | "\n" |
| | "\r"; |
| EndOfFile : !.; |