summaryrefslogtreecommitdiff
path: root/docs/c1/grammar/peg.txt
diff options
context:
space:
mode:
authorTaylan Kammer <taylan.kammer@gmail.com>2026-01-12 08:03:38 +0100
committerTaylan Kammer <taylan.kammer@gmail.com>2026-01-12 08:03:38 +0100
commit2f77b3ceaa2989d944296c572a07b2caee39d9d4 (patch)
tree93b5838d5d49e7f7f23796c1accc089a5b78eacd /docs/c1/grammar/peg.txt
parentb7a386f1da020cb4dde8d37e96170ea4299def30 (diff)
Update HTML stuff.
Diffstat (limited to 'docs/c1/grammar/peg.txt')
-rw-r--r--docs/c1/grammar/peg.txt78
1 files changed, 78 insertions, 0 deletions
diff --git a/docs/c1/grammar/peg.txt b/docs/c1/grammar/peg.txt
new file mode 100644
index 0000000..1e060ec
--- /dev/null
+++ b/docs/c1/grammar/peg.txt
@@ -0,0 +1,78 @@
+# 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 <- ( '.' / '+' / '-' / DIGIT ) ( BareChar / '.' )*
+ / BareChar+
+
+CladDatum <- PipeStr / QuoteStr / HashExpr / QuoteExpr / List
+
+PipeStr <- '|' ( PipeStrChar / '\' StringEsc )* '|'
+QuoteStr <- '"' ( QuotStrChar / '\' StringEsc )* '"'
+HashExpr <- '#' ( RuneExpr / LabelExpr / HashDatum )
+QuoteExpr <- "'" Datum / '`' Datum / ',' Datum
+List <- ParenList / SquareList / BraceList
+
+BareChar <- ALPHA / DIGIT
+ / '!' / '$' / '%' / '*' / '+'
+ / '-' / '/' / '<' / '=' / '>'
+ / '?' / '@' / '^' / '_' / '~'
+
+PipeStrChar <- (![|\\] .)
+QuotStrChar <- (!["\\] .)
+
+StringEsc <- '\' / '|' / '"' / ( HTAB / SP )* LF ( HTAB / SP )*
+ / 'a' / 'b' / 't' / 'n' / 'v' / 'f' / 'r' / 'e'
+ / 'x' HexByte+ ';'
+ / 'u' UnicodeSV ';'
+
+HexByte <- HEXDIG HEXDIG
+UnicodeSV <- HEXDIG+
+
+RuneExpr <- Rune ( '\' BareString / CladDatum )?
+LabelExpr <- '%' Label ( '%' / '=' Datum )
+HashDatum <- '\' BareString / CladDatum
+
+Rune <- ALPHA ( ALPHA / DIGIT )*
+Label <- HEXDIG+
+
+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.