blob: 97b9632caea5b00cbba125611f54bcd40bd44182 (
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
|
Unit <- Blank* ( Datum Blank? )?
Blank <- ' ' / '\t' / '\n' / Comment
Datum <- OneDatum ( JoinChar? OneDatum )*
JoinChar <- '.' / ':'
Comment <- ';' ( SkipUnit / SkipLine )
SkipUnit <- '~' Unit
SkipLine <- (!'\n' .)* '\n'?
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*
DIGIT <- [0-9]
ALPHA <- [a-zA-Z]
HEXDIG <- [0-9a-fA-F]
|