summaryrefslogtreecommitdiff
path: root/spec/syntax.abnf
blob: a3c4ab9560e6f09006ee498101a030a4f276df91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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 )