summaryrefslogtreecommitdiff
path: root/docs/c1/grammar.zbnf.txt
diff options
context:
space:
mode:
authorTaylan Kammer <taylan.kammer@gmail.com>2026-01-10 17:33:14 +0100
committerTaylan Kammer <taylan.kammer@gmail.com>2026-01-10 17:33:14 +0100
commitb737130c059e8e5566caa7aa3144f910d43999ae (patch)
tree5dfbfface09aed028efbeacd119e6a78e7530f61 /docs/c1/grammar.zbnf.txt
parent29dfeb175122d66bf71fc67ecd80f8df90a9a462 (diff)
More grammar shite.
Diffstat (limited to 'docs/c1/grammar.zbnf.txt')
-rw-r--r--docs/c1/grammar.zbnf.txt63
1 files changed, 63 insertions, 0 deletions
diff --git a/docs/c1/grammar.zbnf.txt b/docs/c1/grammar.zbnf.txt
new file mode 100644
index 0000000..a8792f0
--- /dev/null
+++ b/docs/c1/grammar.zbnf.txt
@@ -0,0 +1,63 @@
+# Custom notation with PEG semantics; see grammar.html
+
+Stream : Unit ( Blank Unit )*
+
+Unit : Blank* [Datum]
+
+
+Blank : '\t'...'\r' | SP | Comment
+
+Datum : OneDatum ( [JoinChar] OneDatum )*
+
+JoinChar : '.' | ':'
+
+
+Comment : ';' ( SkipUnit | SkipLine )
+
+SkipUnit : '~' Unit
+
+SkipLine : ( ~LF )* [LF]
+
+
+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*