blob: a8792f01139848d59e5342a7ad8651b96b5a7e4f (
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
56
57
58
59
60
61
62
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*
|