-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtree-sitter-scheme.ebnf
107 lines (81 loc) · 12.6 KB
/
tree-sitter-scheme.ebnf
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
//
// From tree-sitter-scheme/src/grammar.json
//
//
// EBNF to generate railroad diagram at
// (IPV6) https://www.bottlecaps.de/rr/ui
// (IPV4) https://rr.red-dove.com/ui
//
program ::=
_token*
_token ::=
_intertoken
| _datum
_intertoken ::=
[ #x0D#x0A#x09#x0C#x0B\p{Zs}\p{Zl}\p{Zp}]+
| directive
| comment
| block_comment
comment ::=
';.'*
| '#;' _intertoken* _datum
directive ::=
'#!' _intertoken* ( [^ #x0D#x0A#x09#x0C#x0B\p{Zs}\p{Zl}\p{Zp}#x23;"'`,(){}#x5B#x5D\|]+ | '|' ( [^|\]+ | '\'[xX][0-9a-fA-F]+';' | '\'[abtnr] | '\|' )* '|' )
block_comment ::=
'#|' ( block_comment | '.'|[#x0D#x0A\u{85}\u{2028}\u{2029}] )* '|#'
_datum ::=
boolean
| character
| string
| number
| symbol
| vector
| byte_vector
| list
| quote
| quasiquote
| unquote
| unquote_splicing
| syntax
| quasisyntax
| unsyntax
| unsyntax_splicing
| keyword
boolean ::=
( '#' [tTfF] | '#' [tTfF] | '#' ( [tTfF] | [tT][rR][uU][eE] | [fF][aA][lL][sS][eE] ) )
number ::=
( ( ( '#b' | '#B' ) ( '#i' | '#e' | '#I' | '#E' )? | ( '#i' | '#e' | '#I' | '#E' )? ( '#b' | '#B' ) ) ( [+-]? ( [01]+ '#'* | [01]+ '#'* '/' [01]+ '#'* | '' ) | [+-]? ( [01]+ '#'* | [01]+ '#'* '/' [01]+ '#'* | '' ) '@' [+-]? ( [01]+ '#'* | [01]+ '#'* '/' [01]+ '#'* | '' ) | ( [+-]? ( [01]+ '#'* | [01]+ '#'* '/' [01]+ '#'* | '' ) )? [+-] ( [01]+ '#'* | [01]+ '#'* '/' [01]+ '#'* | '' )? 'i' ) | ( ( '#o' | '#O' ) ( '#i' | '#e' | '#I' | '#E' )? | ( '#i' | '#e' | '#I' | '#E' )? ( '#o' | '#O' ) ) ( [+-]? ( [0-7]+ '#'* | [0-7]+ '#'* '/' [0-7]+ '#'* | '' ) | [+-]? ( [0-7]+ '#'* | [0-7]+ '#'* '/' [0-7]+ '#'* | '' ) '@' [+-]? ( [0-7]+ '#'* | [0-7]+ '#'* '/' [0-7]+ '#'* | '' ) | ( [+-]? ( [0-7]+ '#'* | [0-7]+ '#'* '/' [0-7]+ '#'* | '' ) )? [+-] ( [0-7]+ '#'* | [0-7]+ '#'* '/' [0-7]+ '#'* | '' )? 'i' ) | ( ( '#d' | '#D' )? ( '#i' | '#e' | '#I' | '#E' )? | ( '#i' | '#e' | '#I' | '#E' )? ( '#d' | '#D' )? ) ( [+-]? ( [0-9]+ '#'* | [0-9]+ '#'* '/' [0-9]+ '#'* | [0-9]+ '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | '.' [0-9]+ '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '#'+ '.' '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? ) | [+-]? ( [0-9]+ '#'* | [0-9]+ '#'* '/' [0-9]+ '#'* | [0-9]+ '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | '.' [0-9]+ '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '#'+ '.' '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? ) '@' [+-]? ( [0-9]+ '#'* | [0-9]+ '#'* '/' [0-9]+ '#'* | [0-9]+ '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | '.' [0-9]+ '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '#'+ '.' '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? ) | ( [+-]? ( [0-9]+ '#'* | [0-9]+ '#'* '/' [0-9]+ '#'* | [0-9]+ '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | '.' [0-9]+ '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '#'+ '.' '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? ) )? [+-] ( [0-9]+ '#'* | [0-9]+ '#'* '/' [0-9]+ '#'* | [0-9]+ '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | '.' [0-9]+ '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '#'+ '.' '#'* ( [eEsSfFdDlL] [+-]? [0-9]+ )? )? 'i' ) | ( ( '#x' | '#X' ) ( '#i' | '#e' | '#I' | '#E' )? | ( '#i' | '#e' | '#I' | '#E' )? ( '#x' | '#X' ) ) ( [+-]? ( [0-9a-fA-F]+ '#'* | [0-9a-fA-F]+ '#'* '/' [0-9a-fA-F]+ '#'* | '' ) | [+-]? ( [0-9a-fA-F]+ '#'* | [0-9a-fA-F]+ '#'* '/' [0-9a-fA-F]+ '#'* | '' ) '@' [+-]? ( [0-9a-fA-F]+ '#'* | [0-9a-fA-F]+ '#'* '/' [0-9a-fA-F]+ '#'* | '' ) | ( [+-]? ( [0-9a-fA-F]+ '#'* | [0-9a-fA-F]+ '#'* '/' [0-9a-fA-F]+ '#'* | '' ) )? [+-] ( [0-9a-fA-F]+ '#'* | [0-9a-fA-F]+ '#'* '/' [0-9a-fA-F]+ '#'* | '' )? 'i' ) | ( ( '#b' | '#B' ) ( '#i' | '#e' | '#I' | '#E' )? | ( '#i' | '#e' | '#I' | '#E' )? ( '#b' | '#B' ) ) ( [+-]? ( [01]+ | [01]+ '/' [01]+ | '' ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) | ( [+-]? ( [01]+ | [01]+ '/' [01]+ | '' ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) ) '@' ( [+-]? ( [01]+ | [01]+ '/' [01]+ | '' ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) ) | ( [+-]? ( [01]+ | [01]+ '/' [01]+ | '' ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) )? [+-] ( ( [01]+ | [01]+ '/' [01]+ | '' ( '|' [0-9]+ )? ) | 'nan.0' | 'inf.0' )? 'i' ) | ( ( '#o' | '#O' ) ( '#i' | '#e' | '#I' | '#E' )? | ( '#i' | '#e' | '#I' | '#E' )? ( '#o' | '#O' ) ) ( [+-]? ( [0-7]+ | [0-7]+ '/' [0-7]+ | '' ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) | ( [+-]? ( [0-7]+ | [0-7]+ '/' [0-7]+ | '' ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) ) '@' ( [+-]? ( [0-7]+ | [0-7]+ '/' [0-7]+ | '' ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) ) | ( [+-]? ( [0-7]+ | [0-7]+ '/' [0-7]+ | '' ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) )? [+-] ( ( [0-7]+ | [0-7]+ '/' [0-7]+ | '' ( '|' [0-9]+ )? ) | 'nan.0' | 'inf.0' )? 'i' ) | ( ( '#d' | '#D' )? ( '#i' | '#e' | '#I' | '#E' )? | ( '#i' | '#e' | '#I' | '#E' )? ( '#d' | '#D' )? ) ( [+-]? ( [0-9]+ | [0-9]+ '/' [0-9]+ | ( [0-9]+ ( [eEsSfFdDlL] [+-]? [0-9]+ )? | '.' [0-9]+ ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' ( [eEsSfFdDlL] [+-]? [0-9]+ )? ) ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) | ( [+-]? ( [0-9]+ | [0-9]+ '/' [0-9]+ | ( [0-9]+ ( [eEsSfFdDlL] [+-]? [0-9]+ )? | '.' [0-9]+ ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' ( [eEsSfFdDlL] [+-]? [0-9]+ )? ) ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) ) '@' ( [+-]? ( [0-9]+ | [0-9]+ '/' [0-9]+ | ( [0-9]+ ( [eEsSfFdDlL] [+-]? [0-9]+ )? | '.' [0-9]+ ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' ( [eEsSfFdDlL] [+-]? [0-9]+ )? ) ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) ) | ( [+-]? ( [0-9]+ | [0-9]+ '/' [0-9]+ | ( [0-9]+ ( [eEsSfFdDlL] [+-]? [0-9]+ )? | '.' [0-9]+ ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' ( [eEsSfFdDlL] [+-]? [0-9]+ )? ) ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) )? [+-] ( ( [0-9]+ | [0-9]+ '/' [0-9]+ | ( [0-9]+ ( [eEsSfFdDlL] [+-]? [0-9]+ )? | '.' [0-9]+ ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* ( [eEsSfFdDlL] [+-]? [0-9]+ )? | [0-9]+ '.' ( [eEsSfFdDlL] [+-]? [0-9]+ )? ) ( '|' [0-9]+ )? ) | 'nan.0' | 'inf.0' )? 'i' ) | ( ( '#x' | '#X' ) ( '#i' | '#e' | '#I' | '#E' )? | ( '#i' | '#e' | '#I' | '#E' )? ( '#x' | '#X' ) ) ( [+-]? ( [0-9a-fA-F]+ | [0-9a-fA-F]+ '/' [0-9a-fA-F]+ | '' ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) | ( [+-]? ( [0-9a-fA-F]+ | [0-9a-fA-F]+ '/' [0-9a-fA-F]+ | '' ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) ) '@' ( [+-]? ( [0-9a-fA-F]+ | [0-9a-fA-F]+ '/' [0-9a-fA-F]+ | '' ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) ) | ( [+-]? ( [0-9a-fA-F]+ | [0-9a-fA-F]+ '/' [0-9a-fA-F]+ | '' ( '|' [0-9]+ )? ) | [+-] ( 'nan.0' | 'inf.0' ) )? [+-] ( ( [0-9a-fA-F]+ | [0-9a-fA-F]+ '/' [0-9a-fA-F]+ | '' ( '|' [0-9]+ )? ) | 'nan.0' | 'inf.0' )? 'i' ) | ( '#'[bB] '#'[ieIE]? | '#'[ieIE]? '#'[bB] ) ( [+-]? ( [01]+ | [01]+ '/' [01]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' | ( [+-]? ( [01]+ | [01]+ '/' [01]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) '@' ( [+-]? ( [01]+ | [01]+ '/' [01]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) | ( [+-]? ( [01]+ | [01]+ '/' [01]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) [+-] ( [01]+ | [01]+ '/' [01]+ | '' ) 'i' | ( [+-]? ( [01]+ | [01]+ '/' [01]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) [+-] 'i' | ( [+-]? ( [01]+ | [01]+ '/' [01]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) ( [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) 'i' | [+-] ( [01]+ | [01]+ '/' [01]+ | '' ) 'i' | ( [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) 'i' | [+-] 'i' ) | ( '#'[oO] '#'[ieIE]? | '#'[ieIE]? '#'[oO] ) ( [+-]? ( [0-7]+ | [0-7]+ '/' [0-7]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' | ( [+-]? ( [0-7]+ | [0-7]+ '/' [0-7]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) '@' ( [+-]? ( [0-7]+ | [0-7]+ '/' [0-7]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) | ( [+-]? ( [0-7]+ | [0-7]+ '/' [0-7]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) [+-] ( [0-7]+ | [0-7]+ '/' [0-7]+ | '' ) 'i' | ( [+-]? ( [0-7]+ | [0-7]+ '/' [0-7]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) [+-] 'i' | ( [+-]? ( [0-7]+ | [0-7]+ '/' [0-7]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) ( [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) 'i' | [+-] ( [0-7]+ | [0-7]+ '/' [0-7]+ | '' ) 'i' | ( [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) 'i' | [+-] 'i' ) | ( '#'[dD]? '#'[ieIE]? | '#'[ieIE]? '#'[dD]? ) ( [+-]? ( [0-9]+ | [0-9]+ '/' [0-9]+ | [0-9]+ ( [eE] [+-]? [0-9]+ )? | '.' [0-9]+ ( [eE] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* ( [eE] [+-]? [0-9]+ )? ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' | ( [+-]? ( [0-9]+ | [0-9]+ '/' [0-9]+ | [0-9]+ ( [eE] [+-]? [0-9]+ )? | '.' [0-9]+ ( [eE] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* ( [eE] [+-]? [0-9]+ )? ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) '@' ( [+-]? ( [0-9]+ | [0-9]+ '/' [0-9]+ | [0-9]+ ( [eE] [+-]? [0-9]+ )? | '.' [0-9]+ ( [eE] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* ( [eE] [+-]? [0-9]+ )? ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) | ( [+-]? ( [0-9]+ | [0-9]+ '/' [0-9]+ | [0-9]+ ( [eE] [+-]? [0-9]+ )? | '.' [0-9]+ ( [eE] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* ( [eE] [+-]? [0-9]+ )? ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) [+-] ( [0-9]+ | [0-9]+ '/' [0-9]+ | [0-9]+ ( [eE] [+-]? [0-9]+ )? | '.' [0-9]+ ( [eE] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* ( [eE] [+-]? [0-9]+ )? ) 'i' | ( [+-]? ( [0-9]+ | [0-9]+ '/' [0-9]+ | [0-9]+ ( [eE] [+-]? [0-9]+ )? | '.' [0-9]+ ( [eE] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* ( [eE] [+-]? [0-9]+ )? ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) [+-] 'i' | ( [+-]? ( [0-9]+ | [0-9]+ '/' [0-9]+ | [0-9]+ ( [eE] [+-]? [0-9]+ )? | '.' [0-9]+ ( [eE] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* ( [eE] [+-]? [0-9]+ )? ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) ( [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) 'i' | [+-] ( [0-9]+ | [0-9]+ '/' [0-9]+ | [0-9]+ ( [eE] [+-]? [0-9]+ )? | '.' [0-9]+ ( [eE] [+-]? [0-9]+ )? | [0-9]+ '.' [0-9]* ( [eE] [+-]? [0-9]+ )? ) 'i' | ( [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) 'i' | [+-] 'i' ) | ( '#'[xX] '#'[ieIE]? | '#'[ieIE]? '#'[xX] ) ( [+-]? ( [0-9a-fA-F]+ | [0-9a-fA-F]+ '/' [0-9a-fA-F]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' | ( [+-]? ( [0-9a-fA-F]+ | [0-9a-fA-F]+ '/' [0-9a-fA-F]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) '@' ( [+-]? ( [0-9a-fA-F]+ | [0-9a-fA-F]+ '/' [0-9a-fA-F]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) | ( [+-]? ( [0-9a-fA-F]+ | [0-9a-fA-F]+ '/' [0-9a-fA-F]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) [+-] ( [0-9a-fA-F]+ | [0-9a-fA-F]+ '/' [0-9a-fA-F]+ | '' ) 'i' | ( [+-]? ( [0-9a-fA-F]+ | [0-9a-fA-F]+ '/' [0-9a-fA-F]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) [+-] 'i' | ( [+-]? ( [0-9a-fA-F]+ | [0-9a-fA-F]+ '/' [0-9a-fA-F]+ | '' ) | [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) ( [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) 'i' | [+-] ( [0-9a-fA-F]+ | [0-9a-fA-F]+ '/' [0-9a-fA-F]+ | '' ) 'i' | ( [+-][iI][nN][fF]'.0' | [+-][nN][aA][nN]'.0' ) 'i' | [+-] 'i' ) )
character ::=
( '#\' ( [sS][pP][aA][cC][eE] | [nN][eE][wW][lL][iI][nN][eE] | '.'|[#x0D#x0A\u{85}\u{2028}\u{2029}] ) | '#\' ( 'nul' | 'alarm' | 'backspace' | 'tab' | 'linefeed' | 'newline' | 'vtab' | 'page' | 'return' | 'esc' | 'space' | 'delete' | 'x'[0-9a-fA-F]+ | '.'|[#x0D#x0A\u{85}\u{2028}\u{2029}] ) | '#\' ( 'alarm' | 'backspace' | 'delete' | 'escape' | 'newline' | 'null' | 'return' | 'space' | 'tab' | [xX][0-9a-fA-F]+ | '.'|[#x0D#x0A\u{85}\u{2028}\u{2029}] ) | '#\' ( 'bel' | 'ls' | 'nel' | 'rubout' | 'vt' ) )
string ::=
'"' ( escape_sequence | [^"\]+ )* '"'
escape_sequence ::=
( '\"' | '\\' | '\'[abtnvfr"\] | '\x'[0-9a-fA-F]+';' | '\\' [#x09\p{Zs}] [#x0A#x0D\u{2028}\u{0085}]|('#x0D#x0A')|('#x0D\u{0085}') [#x09\p{Zs}] | '\\' ( [abtnr"\] | [#x09\p{Zs}]* [#x0A#x0D\u{2028}\u{0085}]|('#x0D#x0A')|('#x0D\u{0085}') [#x09\p{Zs}]* | [xX][0-9a-fA-F]+';' ) | '\.' )
symbol ::=
( [^ #x0D#x0A#x09#x0C#x0B\p{Zs}\p{Zl}\p{Zp}#x23;"'`,(){}#x5B#x5D\|]+ | '|' ( [^|\]+ | '\'[xX][0-9a-fA-F]+';' | '\'[abtnr] | '\|' )* '|' )
keyword ::=
( '#:' ( [^ #x0D#x0A#x09#x0C#x0B\p{Zs}\p{Zl}\p{Zp}#x23;"'`,(){}#x5B#x5D\|]+ | '|' ( [^|\]+ | '\'[xX][0-9a-fA-F]+';' | '\'[abtnr] | '\|' )* '|' ) )
list ::=
'(' _token* ')'
| '[' _token* ']'
| '{' _token* '}'
quote ::=
"'" _intertoken* _datum
quasiquote ::=
'`' _intertoken* _datum
syntax ::=
"#'" _intertoken* _datum
quasisyntax ::=
'#`' _intertoken* _datum
unquote ::=
',' _intertoken* _datum
unquote_splicing ::=
',@' _intertoken* _datum
unsyntax ::=
'#,' _intertoken* _datum
unsyntax_splicing ::=
'#,@' _intertoken* _datum
vector ::=
'#(' _token* ')'
byte_vector ::=
'#vu8(' _token* ')'