diff options
Diffstat (limited to 'spec/syntax.abnf')
| -rw-r--r-- | spec/syntax.abnf | 55 |
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 ) |
