summaryrefslogtreecommitdiff
path: root/spec/syntax.abnf
diff options
context:
space:
mode:
Diffstat (limited to 'spec/syntax.abnf')
-rw-r--r--spec/syntax.abnf55
1 files changed, 55 insertions, 0 deletions
diff --git a/spec/syntax.abnf b/spec/syntax.abnf
new file mode 100644
index 0000000..a3c4ab9
--- /dev/null
+++ b/spec/syntax.abnf
@@ -0,0 +1,55 @@
+Unit = *Blank Datum [ ';' SkipLine ]
+
+
+Blank = HTAB / LF / %x0b / %x0c / CR / Comment
+
+Datum = OneDatum *( [JoinChar] OneDatum )
+
+JoinChar = '.' / ':'
+
+
+Comment = ';' ( SkipUnit / SkipLine LF )
+
+SkipUnit = '~' Unit
+
+SkipLine = *( %x00-09 / %x0b-ff ) ; any but LF
+
+
+OneDatum = BareString / CladDatum
+
+BareString = ( '.' / '+' / '-' / DIGIT ) *( BareChar / '.' )
+ / 1*BareChar
+
+CladDatum = '|' *( PipeStrChar / '\' StringEsc ) '|'
+ / '"' *( QuotStrChar / '\' StringEsc ) '"'
+ / '#' HashExpr
+ / '(' List ')' / '[' List ']' / '{' List '}'
+ / "'" Datum / '`' Datum / ',' Datum
+
+
+BareChar = ALPHA / DIGIT
+ / '!' / '$' / '%' / '&' / '*' / '+' / '-' / '/'
+ / '<' / '=' / '>' / '?' / '@' / '^' / '_' / '~'
+
+
+PipeStrChar = %x00-5b / %x5d-7b / %x7d-ff ; any but | or \
+
+QuotStrChar = %x00-21 / %x23-5b / %x5d-ff ; any but " or \
+
+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' 1*( 2*HEXDIG ) ';'
+ / 'u' 1*6( HEXDIG ) ';'
+
+
+Rune = ALPHA *5( ALPHA / DIGIT )
+
+Label = 1*12( HEXDIG )