summaryrefslogtreecommitdiff
path: root/spec/syntax.zbnf
diff options
context:
space:
mode:
Diffstat (limited to 'spec/syntax.zbnf')
-rw-r--r--spec/syntax.zbnf55
1 files changed, 55 insertions, 0 deletions
diff --git a/spec/syntax.zbnf b/spec/syntax.zbnf
new file mode 100644
index 0000000..5656864
--- /dev/null
+++ b/spec/syntax.zbnf
@@ -0,0 +1,55 @@
+Unit : Blank* ( Datum [Blank] | EOF )
+
+
+Blank : 9...13 | Comment
+
+Datum : OneDatum ( [JoinChar] OneDatum )*
+
+JoinChar : '.' | ':'
+
+
+Comment : ';' ( SkipUnit | SkipLine )
+
+SkipUnit : '~' Unit
+
+SkipLine : ( ~LF )* [LF]
+
+
+OneDatum : BareString | CladDatum
+
+BareString : ( '.' | '+' | '-' | DIGIT ) ( BareChar | '.' )*
+ | BareChar+
+
+CladDatum : '|' PipeStrElt* '|'
+ | '"' QuotStrElt* '"'
+ | '#' HashExpr
+ | '(' List ')' | '[' List ']' | '{' List '}'
+ | "'" Datum | '`' Datum | ',' Datum
+
+
+BareChar : ALPHA | DIGIT
+ | '!' | '$' | '%' | '&' | '*' | '+' | '-' | '/'
+ | '<' | '=' | '>' | '?' | '@' | '^' | '_' | '~'
+
+
+PipeStrElt : ~( '|' | '\' ) | '\' StringEsc
+
+QuotStrElt : ~( '"' | '\' ) | '\' StringEsc
+
+HashExpr : Rune [ '\' BareString | CladDatum ]
+ | '\' BareString
+ | '%' Label ( '%' | '=' Datum )
+ | CladDatum
+
+List : Unit* [ '.' Unit ] Blank*
+
+
+StringEsc : '\' | '|' | '"' | ( HTAB | SP )* LF ( HTAB | SP )*
+ | 'a' | 'b' | 't' | 'n' | 'v' | 'f' | 'r' | 'e'
+ | 'x' ( HEXDIG{2} )+ ';'
+ | 'u' HEXDIG{1,6} ';'
+
+
+Rune : ALPHA ( ALPHA | DIGIT ){0,5}
+
+Label : HEXDIG{1,12}