module pegged.examples.PEG; import pegged.grammar; enum string PEGGgrammar =` Grammar <- S Definition+ EOI Definition <- Name Arrow Expression S Expression <- Sequence (OR Sequence)* Sequence <- Prefix+ Prefix <- (LOOKAHEAD / NOT)? Suffix Suffix <- Primary ( OPTION / ONEORMORE / ZEROORMORE )? S Primary <- Name !Arrow / GroupExpr / Literal / Class / ANY Name <- Identifier S GroupExpr <- OPEN Expression :CLOSE S Literal <- Quote (!Quote Char)* Quote S / DoubleQuote (!DoubleQuote Char)* DoubleQuote S Class <- '[' (!']' CharRange)* ']' S CharRange <- Char '-' Char / Char Char <- BackSlash ( Quote / DoubleQuote / BackQuote / BackSlash / [nrt] / [0-2][0-7][0-7] / [0-7][0-7]?) / !BackSlash . # Terminals Arrow <- "<-" S OR <- '/' S LOOKAHEAD <- '&' S NOT <- '!' S OPTION <- '?' S ZEROORMORE <- '*' S ONEORMORE <- '+' S OPEN <- '(' S CLOSE <- ')' S ANY <- '.' S # Blanks EOL <- '\r\n' / '\n' / '\r' Comment <- "#" (!EOL .)* (EOL/EOI) S <- (' ' / '\t' / EOL / Comment)* EOI <- !. `; // TODO: add unit tests on simple grammars