diff options
Diffstat (limited to 'doc/0/grammar/peg.txt')
| -rw-r--r-- | doc/0/grammar/peg.txt | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/doc/0/grammar/peg.txt b/doc/0/grammar/peg.txt new file mode 100644 index 0000000..1541da6 --- /dev/null +++ b/doc/0/grammar/peg.txt @@ -0,0 +1,91 @@ +# Standard PEG notation + +Stream <- Unit ( Blank Unit )* !. + + +Unit <- Blank* Datum + +Blank <- [\t-\r ] / Comment + + +Datum <- OneDatum ( JoinChar? OneDatum )* + +JoinChar <- '.' / ':' + + +Comment <- ';' ( SkipUnit / SkipLine ) + +SkipUnit <- '~' Unit + +SkipLine <- (!'\n' .)* '\n'? + + +OneDatum <- BareString / CladDatum + + +BareString <- SpecBareChar ( BareChar / JoinChar )* + / BareChar+ + +SpecBareChar <- '+' / '-' / JoinChar / DIGIT + +BareChar <- ALPHA / DIGIT + / '!' / '$' / '%' / '&' / '*' / '+' / '-' / '/' + / '<' / '=' / '>' / '?' / '^' / '_' / '~' + + +CladDatum <- PipeStr / QuoteStr / HashExpr / QuoteExpr / List + +PipeStr <- '|' ( PipeStrChar / '\' StringEsc )* '|' +QuoteStr <- '"' ( QuotStrChar / '\' StringEsc )* '"' +HashExpr <- '#' HashExprs +QuoteExpr <- "'" Datum / '`' Datum / ',' Datum +List <- ParenList / SquareList / BraceList + + +PipeStrChar <- (![|\\] .) +QuotStrChar <- (!["\\] .) + +StringEsc <- '\' / '|' / '"' / ( HTAB / SP )* LF ( HTAB / SP )* + / '0' / 'a' / 'b' / 't' / 'n' / 'v' / 'f' / 'r' / 'e' + / 'x' HexByte* ';' + / 'u' UnicodeSV ';' + +HexByte <- HEXDIG HEXDIG +UnicodeSV <- HEXDIG+ + + +HashExprs <- '!' [\t ]* HBangLine '\n'? + / '%' Label ( '%' / '=' Datum ) + / '\' BareString / CladDatum + / Rune ( '\' BareString / CladDatum )? + +HBangLine <- HBChars+ [\t ]* ( HBChars+ )? +HBChars <- (![\t\n ] .) +Label <- HEXDIG+ +Rune <- ALPHA ( ALPHA / DIGIT )* + + +ParenList <- '(' Unit* ')' +SquareList <- '[' Unit* ']' +BraceList <- '{' Unit* '}' + + +DIGIT <- [0-9] +ALPHA <- [a-zA-Z] +HEXDIG <- [0-9a-fA-F] + + +# Keep this in sync line-for-line with the ZBNF grammar for easy +# comparison between the two. + +# This file is meant to be compatible with: +# https://piumarta.com/software/peg + +# Due to a quirk in the peg tool this file is used with, the grammar +# must not allow an empty stream. Therefore, the Unit rule has its +# Datum declared as mandatory rather than optional. + + +# Local Variables: +# eval: (flyspell-mode -1) +# End: |
