summaryrefslogtreecommitdiff
path: root/doc/c1/grammar/peg.txt
diff options
context:
space:
mode:
authorTaylan Kammer <taylan.kammer@gmail.com>2026-06-01 21:49:37 +0200
committerTaylan Kammer <taylan.kammer@gmail.com>2026-06-01 21:49:37 +0200
commit724ac8ae394675a78c2977c6e35555b210256e01 (patch)
treed7f5574b49ec71341ea8079f18a33b9c17b60221 /doc/c1/grammar/peg.txt
parent9ce0aa66cedc985322e06db4bac130910610c113 (diff)
docs -> doc
Diffstat (limited to 'doc/c1/grammar/peg.txt')
-rw-r--r--doc/c1/grammar/peg.txt93
1 files changed, 93 insertions, 0 deletions
diff --git a/doc/c1/grammar/peg.txt b/doc/c1/grammar/peg.txt
new file mode 100644
index 0000000..7b28a99
--- /dev/null
+++ b/doc/c1/grammar/peg.txt
@@ -0,0 +1,93 @@
+# 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 <- '(' ListBody ')'
+SquareList <- '[' ListBody ']'
+BraceList <- '{' ListBody '}'
+
+ListBody <- Unit* ( Blank* '&' Unit )? Blank*
+
+
+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: