blob: 8c70d19395f9d971b4a52d4dc615a703bd148751 [file] [log] [blame]
Grammar <- Spacing Definition+ EndOfFile
Definition <- Identifier LEFTARROW Expression
Expression <- Sequence (SLASH Sequence)*
Sequence <- Prefix*
Prefix <- (AND / NOT)? Suffix
Suffix <- Primary (QUESTION / STAR / PLUS)?
Primary <- Identifier !LEFTARROW
/ DOLLAR 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]?
/ !'\\' .
LEFTARROW <- '<-' Spacing
SLASH <- '/' 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 <- !.