ebnf 2.3.2 → 2.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c74fb8dfe53ab905e6c329a9135845b7a8064b64755d594a0595ae7ab52316a
4
- data.tar.gz: 76d3101062440b05bb878cf626c67b4891abeaa99754568a181ca583d2115f57
3
+ metadata.gz: c4fb86945b28f51ba07f086e46e5d89e0707bbaa5d59c88c1748c4701d1106e4
4
+ data.tar.gz: e7df3a8153bf07c292ccd0aa1d7664583032ecd06a224a48a0485c0f87024fe5
5
5
  SHA512:
6
- metadata.gz: 7252bcc2e3f658607d89db824a0e56a67d5b4ab7a0b21fa194269e03fbf8813dfe27ae8172d51282f86d2abb326e590d506e2fd1374b74eba763d2e3179b71f2
7
- data.tar.gz: 38511111c2a6769741b85893d5df222c5d4ab39f62fabc8a97fb4aff9bf5784ae9e75e9a56e2e4bf0553c46ae369b56c53e6fd3ab6be74c2b0e69357cc51382a
6
+ metadata.gz: 0cfe707433ef76136a8e856f5ae6e7eb8e1cb9e6430d762f337f9ce388fa7b055a6dc4538d272fb4c4a91a57b65d888ee0c314d47ba35ec77d9cbae826936810
7
+ data.tar.gz: 316d8928d79e585bc00a9667b7ab31f4ab8236863af0526631c5dcf5eeb3d152cf3ac31f188264f43250498bc7f3fe6d735d6b1e06ca99b186cdc1996c553fd6
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [EBNF][] parser and generic parser generator.
4
4
 
5
- [![Gem Version](https://badge.fury.io/rb/ebnf.png)](https://badge.fury.io/rb/ebnf)
5
+ [![Gem Version](https://badge.fury.io/rb/ebnf.svg)](https://badge.fury.io/rb/ebnf)
6
6
  [![Build Status](https://github.com/dryruby/ebnf/workflows/CI/badge.svg?branch=develop)](https://github.com/dryruby/ebnf/actions?query=workflow%3ACI)
7
7
  [![Coverage Status](https://coveralls.io/repos/dryruby/ebnf/badge.svg?branch=develop)](https://coveralls.io/r/dryruby/ebnf?branch=develop)
8
8
  [![Gitter chat](https://badges.gitter.im/ruby-rdf/rdf.png)](https://gitter.im/ruby-rdf/rdf)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.2
1
+ 2.3.3
data/etc/turtle.html CHANGED
@@ -1,467 +1,388 @@
1
- <table class='grammar'>
2
- <tbody id='grammar-productions'>
3
- <tr id='grammar-production-turtleDoc'>
4
- <td>[1]</td>
5
- <td><code>turtleDoc</code></td>
6
- <td>::=</td>
7
- <td>
8
- statement*
9
- </td>
10
- </tr>
11
- <tr id='grammar-production-statement'>
12
- <td>[2]</td>
13
- <td><code>statement</code></td>
14
- <td>::=</td>
15
- <td>
16
- directive | triples "."
17
- </td>
18
- </tr>
19
- <tr id='grammar-production-directive'>
20
- <td>[3]</td>
21
- <td><code>directive</code></td>
22
- <td>::=</td>
23
- <td>
24
- prefixID
25
- | base
26
- | sparqlPrefix
27
- | sparqlBase
28
- </td>
29
- </tr>
30
- <tr id='grammar-production-prefixID'>
31
- <td>[4]</td>
32
- <td><code>prefixID</code></td>
33
- <td>::=</td>
34
- <td>
35
- "@prefix" PNAME_NS IRIREF "."
36
- </td>
37
- </tr>
38
- <tr id='grammar-production-base'>
39
- <td>[5]</td>
40
- <td><code>base</code></td>
41
- <td>::=</td>
42
- <td>
43
- "@base" IRIREF "."
44
- </td>
45
- </tr>
46
- <tr id='grammar-production-sparqlPrefix'>
47
- <td>[28s]</td>
48
- <td><code>sparqlPrefix</code></td>
49
- <td>::=</td>
50
- <td>
51
- SPARQL_PREFIX PNAME_NS IRIREF
52
- </td>
53
- </tr>
54
- <tr id='grammar-production-sparqlBase'>
55
- <td>[29s]</td>
56
- <td><code>sparqlBase</code></td>
57
- <td>::=</td>
58
- <td>
59
- SPARQL_BASE IRIREF
60
- </td>
61
- </tr>
62
- <tr id='grammar-production-triples'>
63
- <td>[6]</td>
64
- <td><code>triples</code></td>
65
- <td>::=</td>
66
- <td>
67
- subject predicateObjectList
68
- | blankNodePropertyList predicateObjectList?
69
- </td>
70
- </tr>
71
- <tr id='grammar-production-predicateObjectList'>
72
- <td>[7]</td>
73
- <td><code>predicateObjectList</code></td>
74
- <td>::=</td>
75
- <td>
76
- verb
77
- objectList
78
- (";" (verb objectList)?)*
79
- </td>
80
- </tr>
81
- <tr id='grammar-production-objectList'>
82
- <td>[8]</td>
83
- <td><code>objectList</code></td>
84
- <td>::=</td>
85
- <td>
86
- object ("," object)*
87
- </td>
88
- </tr>
89
- <tr id='grammar-production-verb'>
90
- <td>[9]</td>
91
- <td><code>verb</code></td>
92
- <td>::=</td>
93
- <td>
94
- predicate | "a"
95
- </td>
96
- </tr>
97
- <tr id='grammar-production-subject'>
98
- <td>[10]</td>
99
- <td><code>subject</code></td>
100
- <td>::=</td>
101
- <td>
102
- iri | BlankNode | collection
103
- </td>
104
- </tr>
105
- <tr id='grammar-production-predicate'>
106
- <td>[11]</td>
107
- <td><code>predicate</code></td>
108
- <td>::=</td>
109
- <td>
110
- iri
111
- </td>
112
- </tr>
113
- <tr id='grammar-production-object'>
114
- <td>[12]</td>
115
- <td><code>object</code></td>
116
- <td>::=</td>
117
- <td>
118
- iri
119
- | BlankNode
120
- | collection
121
- | blankNodePropertyList
122
- | literal
123
- </td>
124
- </tr>
125
- <tr id='grammar-production-literal'>
126
- <td>[13]</td>
127
- <td><code>literal</code></td>
128
- <td>::=</td>
129
- <td>
130
- RDFLiteral
131
- | NumericLiteral
132
- | BooleanLiteral
133
- </td>
134
- </tr>
135
- <tr id='grammar-production-blankNodePropertyList'>
136
- <td>[14]</td>
137
- <td><code>blankNodePropertyList</code></td>
138
- <td>::=</td>
139
- <td>
140
- "[" predicateObjectList "]"
141
- </td>
142
- </tr>
143
- <tr id='grammar-production-collection'>
144
- <td>[15]</td>
145
- <td><code>collection</code></td>
146
- <td>::=</td>
147
- <td>
148
- "(" object* ")"
149
- </td>
150
- </tr>
151
- <tr id='grammar-production-NumericLiteral'>
152
- <td>[16]</td>
153
- <td><code>NumericLiteral</code></td>
154
- <td>::=</td>
155
- <td>
156
- INTEGER | DECIMAL | DOUBLE
157
- </td>
158
- </tr>
159
- <tr id='grammar-production-RDFLiteral'>
160
- <td>[128s]</td>
161
- <td><code>RDFLiteral</code></td>
162
- <td>::=</td>
163
- <td>
164
- String (LANGTAG | "^^" iri)?
165
- </td>
166
- </tr>
167
- <tr id='grammar-production-BooleanLiteral'>
168
- <td>[133s]</td>
169
- <td><code>BooleanLiteral</code></td>
170
- <td>::=</td>
171
- <td>
172
- "true" | "false"
173
- </td>
174
- </tr>
175
- <tr id='grammar-production-String'>
176
- <td>[17]</td>
177
- <td><code>String</code></td>
178
- <td>::=</td>
179
- <td>
180
- STRING_LITERAL_QUOTE
181
- | STRING_LITERAL_SINGLE_QUOTE
182
- | STRING_LITERAL_LONG_SINGLE_QUOTE
183
- | STRING_LITERAL_LONG_QUOTE
184
- </td>
185
- </tr>
186
- <tr id='grammar-production-iri'>
187
- <td>[135s]</td>
188
- <td><code>iri</code></td>
189
- <td>::=</td>
190
- <td>
191
- IRIREF | PrefixedName
192
- </td>
193
- </tr>
194
- <tr id='grammar-production-PrefixedName'>
195
- <td>[136s]</td>
196
- <td><code>PrefixedName</code></td>
197
- <td>::=</td>
198
- <td>
199
- PNAME_LN | PNAME_NS
200
- </td>
201
- </tr>
202
- <tr id='grammar-production-BlankNode'>
203
- <td>[137s]</td>
204
- <td><code>BlankNode</code></td>
205
- <td>::=</td>
206
- <td>
207
- BLANK_NODE_LABEL | ANON
208
- </td>
209
- </tr>
210
- <tr id='grammar-production-IRIREF'>
211
- <td>[18]</td>
212
- <td><code>IRIREF</code></td>
213
- <td>::=</td>
214
- <td>
215
- "<"
216
- [^#x00-#x20<>"{}|^`]#x20|#x20UCHAR)*#x20'>']
217
- </td>
218
- </tr>
219
- <tr id='grammar-production-PNAME_NS'>
220
- <td>[139s]</td>
221
- <td><code>PNAME_NS</code></td>
222
- <td>::=</td>
223
- <td>
224
- PN_PREFIX? ":"
225
- </td>
226
- </tr>
227
- <tr id='grammar-production-PNAME_LN'>
228
- <td>[140s]</td>
229
- <td><code>PNAME_LN</code></td>
230
- <td>::=</td>
231
- <td>
232
- PNAME_NS PN_LOCAL
233
- </td>
234
- </tr>
235
- <tr id='grammar-production-BLANK_NODE_LABEL'>
236
- <td>[141s]</td>
237
- <td><code>BLANK_NODE_LABEL</code></td>
238
- <td>::=</td>
239
- <td>
240
- "_:"
241
- (PN_CHARS_U | [0-9])
242
- (PN_CHARS | ".")* PN_CHARS?
243
- </td>
244
- </tr>
245
- <tr id='grammar-production-LANGTAG'>
246
- <td>[144s]</td>
247
- <td><code>LANGTAG</code></td>
248
- <td>::=</td>
249
- <td>
250
- "@" ([a-zA-Z])+ ("-" ([a-zA-Z0-9])+)*
251
- </td>
252
- </tr>
253
- <tr id='grammar-production-INTEGER'>
254
- <td>[19]</td>
255
- <td><code>INTEGER</code></td>
256
- <td>::=</td>
257
- <td>
258
- ([+-])? ([0-9])+
259
- </td>
260
- </tr>
261
- <tr id='grammar-production-DECIMAL'>
262
- <td>[20]</td>
263
- <td><code>DECIMAL</code></td>
264
- <td>::=</td>
265
- <td>
266
- ([+-])? (([0-9])* "." ([0-9])+)
267
- </td>
268
- </tr>
269
- <tr id='grammar-production-DOUBLE'>
270
- <td>[21]</td>
271
- <td><code>DOUBLE</code></td>
272
- <td>::=</td>
273
- <td>
274
- ([+-])?
275
- (([0-9])+ "." ([0-9])* EXPONENT | "." ([0-9])+ EXPONENT | ([0-9])+ EXPONENT)
276
- </td>
277
- </tr>
278
- <tr id='grammar-production-EXPONENT'>
279
- <td>[154s]</td>
280
- <td><code>EXPONENT</code></td>
281
- <td>::=</td>
282
- <td>
283
- [eE] ([+-])? ([0-9])+
284
- </td>
285
- </tr>
286
- <tr id='grammar-production-STRING_LITERAL_QUOTE'>
287
- <td>[22]</td>
288
- <td><code>STRING_LITERAL_QUOTE</code></td>
289
- <td>::=</td>
290
- <td>
291
- '"'
292
- ([^#x22#x5C#xA#xD] | ECHAR | UCHAR)*
293
- '"'
294
- </td>
295
- </tr>
296
- <tr id='grammar-production-STRING_LITERAL_SINGLE_QUOTE'>
297
- <td>[23]</td>
298
- <td><code>STRING_LITERAL_SINGLE_QUOTE</code></td>
299
- <td>::=</td>
300
- <td>
301
- "'"
302
- ([^#x27#x5C#xA#xD] | ECHAR | UCHAR)*
303
- "'"
304
- </td>
305
- </tr>
306
- <tr id='grammar-production-STRING_LITERAL_LONG_SINGLE_QUOTE'>
307
- <td>[24]</td>
308
- <td><code>STRING_LITERAL_LONG_SINGLE_QUOTE</code></td>
309
- <td>::=</td>
310
- <td>
311
- "'''"
312
- (("'" | "''")? [^']#x20|#x20ECHAR#x20|#x20UCHAR#x20)#x20)*#x20"'''"])
313
- </td>
314
- </tr>
315
- <tr id='grammar-production-STRING_LITERAL_LONG_QUOTE'>
316
- <td>[25]</td>
317
- <td><code>STRING_LITERAL_LONG_QUOTE</code></td>
318
- <td>::=</td>
319
- <td>
320
- '"""'
321
- (('"' | '""')? [^"]#x20|#x20ECHAR#x20|#x20UCHAR#x20)#x20)*#x20'"""'])
322
- </td>
323
- </tr>
324
- <tr id='grammar-production-UCHAR'>
325
- <td>[26]</td>
326
- <td><code>UCHAR</code></td>
327
- <td>::=</td>
328
- <td>
329
- "u" HEX HEX HEX HEX
330
- | "U" HEX HEX HEX HEX HEX HEX HEX HEX
331
- </td>
332
- </tr>
333
- <tr id='grammar-production-ECHAR'>
334
- <td>[159s]</td>
335
- <td><code>ECHAR</code></td>
336
- <td>::=</td>
337
- <td>
338
- "\" [tbnrf"']
339
- </td>
340
- </tr>
341
- <tr id='grammar-production-SPARQL_PREFIX'>
342
- <td>[28t]</td>
343
- <td><code>SPARQL_PREFIX</code></td>
344
- <td>::=</td>
345
- <td>
346
- [Pp] [Rr] [Ee] [Ff] [Ii] [Xx]
347
- </td>
348
- </tr>
349
- <tr id='grammar-production-SPARQL_BASE'>
350
- <td>[29t]</td>
351
- <td><code>SPARQL_BASE</code></td>
352
- <td>::=</td>
353
- <td>
354
- [Bb] [Aa] [Ss] [Ee]
355
- </td>
356
- </tr>
357
- <tr id='grammar-production-WS'>
358
- <td>[161s]</td>
359
- <td><code>WS</code></td>
360
- <td>::=</td>
361
- <td>
362
- #x20 | #x9 | #xD | #xA
363
- </td>
364
- </tr>
365
- <tr id='grammar-production-ANON'>
366
- <td>[162s]</td>
367
- <td><code>ANON</code></td>
368
- <td>::=</td>
369
- <td>
370
- "[" WS* "]"
371
- </td>
372
- </tr>
373
- <tr id='grammar-production-PN_CHARS_BASE'>
374
- <td>[163s]</td>
375
- <td><code>PN_CHARS_BASE</code></td>
376
- <td>::=</td>
377
- <td>
378
- [A-Z]
379
- | [a-z]
380
- | [#x00C0-#x00D6]
381
- | [#x00D8-#x00F6]
382
- | [#x00F8-#x02FF]
383
- | [#x0370-#x037D]
384
- | [#x037F-#x1FFF]
385
- | [#x200C-#x200D]
386
- | [#x2070-#x218F]
387
- | [#x2C00-#x2FEF]
388
- | [#x3001-#xD7FF]
389
- | [#xF900-#xFDCF]
390
- | [#xFDF0-#xFFFD]
391
- | [#x10000-#xEFFFF]
392
- </td>
393
- </tr>
394
- <tr id='grammar-production-PN_CHARS_U'>
395
- <td>[164s]</td>
396
- <td><code>PN_CHARS_U</code></td>
397
- <td>::=</td>
398
- <td>
399
- PN_CHARS_BASE | "_"
400
- </td>
401
- </tr>
402
- <tr id='grammar-production-PN_CHARS'>
403
- <td>[166s]</td>
404
- <td><code>PN_CHARS</code></td>
405
- <td>::=</td>
406
- <td>
407
- PN_CHARS_U
408
- | "-"
409
- | [0-9]
410
- | #x00B7
411
- | [#x0300-#x036F]
412
- | [#x203F-#x2040]
413
- </td>
414
- </tr>
415
- <tr id='grammar-production-PN_PREFIX'>
416
- <td>[167s]</td>
417
- <td><code>PN_PREFIX</code></td>
418
- <td>::=</td>
419
- <td>
420
- PN_CHARS_BASE
421
- (PN_CHARS | ".")* PN_CHARS?
422
- </td>
423
- </tr>
424
- <tr id='grammar-production-PN_LOCAL'>
425
- <td>[168s]</td>
426
- <td><code>PN_LOCAL</code></td>
427
- <td>::=</td>
428
- <td>
429
- (PN_CHARS_U | ":" | [0-9] | PLX)
430
- (PN_CHARS | "." | ":" | PLX)* (PN_CHARS | ":" | PLX)?
431
- </td>
432
- </tr>
433
- <tr id='grammar-production-PLX'>
434
- <td>[169s]</td>
435
- <td><code>PLX</code></td>
436
- <td>::=</td>
437
- <td>
438
- PERCENT | PN_LOCAL_ESC
439
- </td>
440
- </tr>
441
- <tr id='grammar-production-PERCENT'>
442
- <td>[170s]</td>
443
- <td><code>PERCENT</code></td>
444
- <td>::=</td>
445
- <td>
446
- "%" HEX HEX
447
- </td>
448
- </tr>
449
- <tr id='grammar-production-HEX'>
450
- <td>[171s]</td>
451
- <td><code>HEX</code></td>
452
- <td>::=</td>
453
- <td>
454
- [0-9] | [A-F] | [a-f]
455
- </td>
456
- </tr>
457
- <tr id='grammar-production-PN_LOCAL_ESC'>
458
- <td>[172s]</td>
459
- <td><code>PN_LOCAL_ESC</code></td>
460
- <td>::=</td>
461
- <td>
462
- "\"
463
- ("_" | "~" | "." | "-" | #x21 | "$" | "&" | "'" | "(" | ")" | "*" | "+" | "," | ";" | "=" | "/" | "?" | "#" | "@" | "%")
464
- </td>
465
- </tr>
466
- </tbody>
1
+
2
+ <table class="grammar">
3
+ <tbody id="grammar-productions" class="ebnf">
4
+ <tr id="grammar-production-turtleDoc">
5
+ <td>[1]</td>
6
+ <td><code>turtleDoc</code></td>
7
+ <td>::=</td>
8
+ <td><a href="#grammar-production-statement">statement</a><code>*</code></td>
9
+ </tr>
10
+ <tr id="grammar-production-statement">
11
+ <td>[2]</td>
12
+ <td><code>statement</code></td>
13
+ <td>::=</td>
14
+ <td><a href="#grammar-production-directive">directive</a> <code>|</code> <code>(</code><a href="#grammar-production-triples">triples</a> "<code class="grammar-literal">.</code>"<code>)</code></td>
15
+ </tr>
16
+ <tr id="grammar-production-directive">
17
+ <td>[3]</td>
18
+ <td><code>directive</code></td>
19
+ <td>::=</td>
20
+ <td><a href="#grammar-production-prefixID">prefixID</a> <code>|</code> <a href="#grammar-production-base">base</a> <code>|</code> <a href="#grammar-production-sparqlPrefix">sparqlPrefix</a> <code>|</code> <a href="#grammar-production-sparqlBase">sparqlBase</a></td>
21
+ </tr>
22
+ <tr id="grammar-production-prefixID">
23
+ <td>[4]</td>
24
+ <td><code>prefixID</code></td>
25
+ <td>::=</td>
26
+ <td>&quot;@prefix&quot; <a href="#grammar-production-PNAME_NS">PNAME_NS</a> <a href="#grammar-production-IRIREF">IRIREF</a> "<code class="grammar-literal">.</code>"</td>
27
+ </tr>
28
+ <tr id="grammar-production-base">
29
+ <td>[5]</td>
30
+ <td><code>base</code></td>
31
+ <td>::=</td>
32
+ <td>&quot;@base&quot; <a href="#grammar-production-IRIREF">IRIREF</a> "<code class="grammar-literal">.</code>"</td>
33
+ </tr>
34
+ <tr id="grammar-production-sparqlPrefix">
35
+ <td>[28s]</td>
36
+ <td><code>sparqlPrefix</code></td>
37
+ <td>::=</td>
38
+ <td><a href="#grammar-production-SPARQL_PREFIX">SPARQL_PREFIX</a> <a href="#grammar-production-PNAME_NS">PNAME_NS</a> <a href="#grammar-production-IRIREF">IRIREF</a></td>
39
+ </tr>
40
+ <tr id="grammar-production-sparqlBase">
41
+ <td>[29s]</td>
42
+ <td><code>sparqlBase</code></td>
43
+ <td>::=</td>
44
+ <td><a href="#grammar-production-SPARQL_BASE">SPARQL_BASE</a> <a href="#grammar-production-IRIREF">IRIREF</a></td>
45
+ </tr>
46
+ <tr id="grammar-production-triples">
47
+ <td>[6]</td>
48
+ <td><code>triples</code></td>
49
+ <td>::=</td>
50
+ <td><code>(</code><a href="#grammar-production-subject">subject</a> <a href="#grammar-production-predicateObjectList">predicateObjectList</a><code>)</code> <code>|</code> <code>(</code><a href="#grammar-production-blankNodePropertyList">blankNodePropertyList</a> <a href="#grammar-production-predicateObjectList">predicateObjectList</a><code>?</code><code>)</code></td>
51
+ </tr>
52
+ <tr id="grammar-production-predicateObjectList">
53
+ <td>[7]</td>
54
+ <td><code>predicateObjectList</code></td>
55
+ <td>::=</td>
56
+ <td><a href="#grammar-production-verb">verb</a> <a href="#grammar-production-objectList">objectList</a> <code>(</code>"<code class="grammar-literal">;</code>" <code>(</code><a href="#grammar-production-verb">verb</a> <a href="#grammar-production-objectList">objectList</a><code>)</code><code>?</code><code>)</code><code>*</code></td>
57
+ </tr>
58
+ <tr id="grammar-production-objectList">
59
+ <td>[8]</td>
60
+ <td><code>objectList</code></td>
61
+ <td>::=</td>
62
+ <td><a href="#grammar-production-object">object</a> <code>(</code>"<code class="grammar-literal">,</code>" <a href="#grammar-production-object">object</a><code>)</code><code>*</code></td>
63
+ </tr>
64
+ <tr id="grammar-production-verb">
65
+ <td>[9]</td>
66
+ <td><code>verb</code></td>
67
+ <td>::=</td>
68
+ <td><a href="#grammar-production-predicate">predicate</a> <code>|</code> "<code class="grammar-literal">a</code>"</td>
69
+ </tr>
70
+ <tr id="grammar-production-subject">
71
+ <td>[10]</td>
72
+ <td><code>subject</code></td>
73
+ <td>::=</td>
74
+ <td><a href="#grammar-production-iri">iri</a> <code>|</code> <a href="#grammar-production-BlankNode">BlankNode</a> <code>|</code> <a href="#grammar-production-collection">collection</a></td>
75
+ </tr>
76
+ <tr id="grammar-production-predicate">
77
+ <td>[11]</td>
78
+ <td><code>predicate</code></td>
79
+ <td>::=</td>
80
+ <td><a href="#grammar-production-iri">iri</a></td>
81
+ </tr>
82
+ <tr id="grammar-production-object">
83
+ <td>[12]</td>
84
+ <td><code>object</code></td>
85
+ <td>::=</td>
86
+ <td><a href="#grammar-production-iri">iri</a> <code>|</code> <a href="#grammar-production-BlankNode">BlankNode</a> <code>|</code> <a href="#grammar-production-collection">collection</a> <code>|</code> <a href="#grammar-production-blankNodePropertyList">blankNodePropertyList</a> <code>|</code> <a href="#grammar-production-literal">literal</a></td>
87
+ </tr>
88
+ <tr id="grammar-production-literal">
89
+ <td>[13]</td>
90
+ <td><code>literal</code></td>
91
+ <td>::=</td>
92
+ <td><a href="#grammar-production-RDFLiteral">RDFLiteral</a> <code>|</code> <a href="#grammar-production-NumericLiteral">NumericLiteral</a> <code>|</code> <a href="#grammar-production-BooleanLiteral">BooleanLiteral</a></td>
93
+ </tr>
94
+ <tr id="grammar-production-blankNodePropertyList">
95
+ <td>[14]</td>
96
+ <td><code>blankNodePropertyList</code></td>
97
+ <td>::=</td>
98
+ <td>"<code class="grammar-literal">[</code>" <a href="#grammar-production-predicateObjectList">predicateObjectList</a> "<code class="grammar-literal">]</code>"</td>
99
+ </tr>
100
+ <tr id="grammar-production-collection">
101
+ <td>[15]</td>
102
+ <td><code>collection</code></td>
103
+ <td>::=</td>
104
+ <td>"<code class="grammar-literal">(</code>" <a href="#grammar-production-object">object</a><code>*</code> "<code class="grammar-literal">)</code>"</td>
105
+ </tr>
106
+ <tr id="grammar-production-NumericLiteral">
107
+ <td>[16]</td>
108
+ <td><code>NumericLiteral</code></td>
109
+ <td>::=</td>
110
+ <td><a href="#grammar-production-INTEGER">INTEGER</a> <code>|</code> <a href="#grammar-production-DECIMAL">DECIMAL</a> <code>|</code> <a href="#grammar-production-DOUBLE">DOUBLE</a></td>
111
+ </tr>
112
+ <tr id="grammar-production-RDFLiteral">
113
+ <td>[128s]</td>
114
+ <td><code>RDFLiteral</code></td>
115
+ <td>::=</td>
116
+ <td><a href="#grammar-production-String">String</a> <code>(</code><a href="#grammar-production-LANGTAG">LANGTAG</a> <code>|</code> <code>(</code>&quot;^^&quot; <a href="#grammar-production-iri">iri</a><code>)</code><code>)</code><code>?</code></td>
117
+ </tr>
118
+ <tr id="grammar-production-BooleanLiteral">
119
+ <td>[133s]</td>
120
+ <td><code>BooleanLiteral</code></td>
121
+ <td>::=</td>
122
+ <td>&quot;true&quot; <code>|</code> &quot;false&quot;</td>
123
+ </tr>
124
+ <tr id="grammar-production-String">
125
+ <td>[17]</td>
126
+ <td><code>String</code></td>
127
+ <td>::=</td>
128
+ <td><a href="#grammar-production-STRING_LITERAL_QUOTE">STRING_LITERAL_QUOTE</a> <code>|</code> <a href="#grammar-production-STRING_LITERAL_SINGLE_QUOTE">STRING_LITERAL_SINGLE_QUOTE</a> <code>|</code> <a href="#grammar-production-STRING_LITERAL_LONG_SINGLE_QUOTE">STRING_LITERAL_LONG_SINGLE_QUOTE</a> <code>|</code> <a href="#grammar-production-STRING_LITERAL_LONG_QUOTE">STRING_LITERAL_LONG_QUOTE</a></td>
129
+ </tr>
130
+ <tr id="grammar-production-iri">
131
+ <td>[135s]</td>
132
+ <td><code>iri</code></td>
133
+ <td>::=</td>
134
+ <td><a href="#grammar-production-IRIREF">IRIREF</a> <code>|</code> <a href="#grammar-production-PrefixedName">PrefixedName</a></td>
135
+ </tr>
136
+ <tr id="grammar-production-PrefixedName">
137
+ <td>[136s]</td>
138
+ <td><code>PrefixedName</code></td>
139
+ <td>::=</td>
140
+ <td><a href="#grammar-production-PNAME_LN">PNAME_LN</a> <code>|</code> <a href="#grammar-production-PNAME_NS">PNAME_NS</a></td>
141
+ </tr>
142
+ <tr id="grammar-production-BlankNode">
143
+ <td>[137s]</td>
144
+ <td><code>BlankNode</code></td>
145
+ <td>::=</td>
146
+ <td><a href="#grammar-production-BLANK_NODE_LABEL">BLANK_NODE_LABEL</a> <code>|</code> <a href="#grammar-production-ANON">ANON</a></td>
147
+ </tr>
148
+ <tr>
149
+ <td colspan=2>@terminals</td>
150
+ <td></td>
151
+ <td><strong># Productions for terminals</strong></td>
152
+ </tr>
153
+ <tr id="grammar-production-IRIREF">
154
+ <td>[18]</td>
155
+ <td><code>IRIREF</code></td>
156
+ <td>::=</td>
157
+ <td>"<code class="grammar-literal">&lt;</code>" <code>(</code><code>[</code><code class="grammar-literal">^&lt;&gt;&quot;{}|^`]-[</code><code class="grammar-char-escape"><abbr title="null">#x00</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code>]</code> <code>|</code> <a href="#grammar-production-UCHAR">UCHAR</a><code>)</code><code>*</code> "<code class="grammar-literal">&gt;</code>"</td>
158
+ </tr>
159
+ <tr id="grammar-production-PNAME_NS">
160
+ <td>[139s]</td>
161
+ <td><code>PNAME_NS</code></td>
162
+ <td>::=</td>
163
+ <td><a href="#grammar-production-PN_PREFIX">PN_PREFIX</a><code>?</code> "<code class="grammar-literal">:</code>"</td>
164
+ </tr>
165
+ <tr id="grammar-production-PNAME_LN">
166
+ <td>[140s]</td>
167
+ <td><code>PNAME_LN</code></td>
168
+ <td>::=</td>
169
+ <td><a href="#grammar-production-PNAME_NS">PNAME_NS</a> <a href="#grammar-production-PN_LOCAL">PN_LOCAL</a></td>
170
+ </tr>
171
+ <tr id="grammar-production-BLANK_NODE_LABEL">
172
+ <td>[141s]</td>
173
+ <td><code>BLANK_NODE_LABEL</code></td>
174
+ <td>::=</td>
175
+ <td>&quot;_:&quot; <code>(</code><a href="#grammar-production-PN_CHARS_U">PN_CHARS_U</a> <code>|</code> <code>[</code><code class="grammar-literal">0-9</code><code>]</code><code>)</code> <code>(</code><code>(</code><a href="#grammar-production-PN_CHARS">PN_CHARS</a> <code>|</code> "<code class="grammar-literal">.</code>"<code>)</code><code>*</code> <a href="#grammar-production-PN_CHARS">PN_CHARS</a><code>)</code><code>?</code></td>
176
+ </tr>
177
+ <tr id="grammar-production-LANGTAG">
178
+ <td>[144s]</td>
179
+ <td><code>LANGTAG</code></td>
180
+ <td>::=</td>
181
+ <td>"<code class="grammar-literal">@</code>" <code>[</code><code class="grammar-literal">a-zA-Z</code><code>]</code><code>+</code> <code>(</code>"<code class="grammar-literal">-</code>" <code>[</code><code class="grammar-literal">a-zA-Z0-9</code><code>]</code><code>+</code><code>)</code><code>*</code></td>
182
+ </tr>
183
+ <tr id="grammar-production-INTEGER">
184
+ <td>[19]</td>
185
+ <td><code>INTEGER</code></td>
186
+ <td>::=</td>
187
+ <td><code>[</code><code class="grammar-literal">+-</code><code>]</code><code>?</code> <code>[</code><code class="grammar-literal">0-9</code><code>]</code><code>+</code></td>
188
+ </tr>
189
+ <tr id="grammar-production-DECIMAL">
190
+ <td>[20]</td>
191
+ <td><code>DECIMAL</code></td>
192
+ <td>::=</td>
193
+ <td><code>[</code><code class="grammar-literal">+-</code><code>]</code><code>?</code> <code>(</code><code>[</code><code class="grammar-literal">0-9</code><code>]</code><code>*</code> "<code class="grammar-literal">.</code>" <code>[</code><code class="grammar-literal">0-9</code><code>]</code><code>+</code><code>)</code></td>
194
+ </tr>
195
+ <tr id="grammar-production-DOUBLE">
196
+ <td>[21]</td>
197
+ <td><code>DOUBLE</code></td>
198
+ <td>::=</td>
199
+ <td><code>[</code><code class="grammar-literal">+-</code><code>]</code><code>?</code> <code>(</code><code>(</code><code>[</code><code class="grammar-literal">0-9</code><code>]</code><code>+</code> "<code class="grammar-literal">.</code>" <code>[</code><code class="grammar-literal">0-9</code><code>]</code><code>*</code> <a href="#grammar-production-EXPONENT">EXPONENT</a><code>)</code> <code>|</code> <code>(</code>"<code class="grammar-literal">.</code>" <code>[</code><code class="grammar-literal">0-9</code><code>]</code><code>+</code> <a href="#grammar-production-EXPONENT">EXPONENT</a><code>)</code> <code>|</code> <code>(</code><code>[</code><code class="grammar-literal">0-9</code><code>]</code><code>+</code> <a href="#grammar-production-EXPONENT">EXPONENT</a><code>)</code><code>)</code></td>
200
+ </tr>
201
+ <tr id="grammar-production-EXPONENT">
202
+ <td>[154s]</td>
203
+ <td><code>EXPONENT</code></td>
204
+ <td>::=</td>
205
+ <td><code>[</code><code class="grammar-literal">eE</code><code>]</code> <code>[</code><code class="grammar-literal">+-</code><code>]</code><code>?</code> <code>[</code><code class="grammar-literal">0-9</code><code>]</code><code>+</code></td>
206
+ </tr>
207
+ <tr id="grammar-production-STRING_LITERAL_QUOTE">
208
+ <td>[22]</td>
209
+ <td><code>STRING_LITERAL_QUOTE</code></td>
210
+ <td>::=</td>
211
+ <td>'<code class="grammar-literal">&quot;</code>' <code>(</code><code>[</code><code class="grammar-literal">^</code><code class="grammar-char-escape"><abbr title="quot">>&quot;</abbr></code><code class="grammar-char-escape"><abbr title="ascii '\'">#x5C</abbr></code><code class="grammar-char-escape"><abbr title="new line">#x0A</abbr></code><code class="grammar-char-escape"><abbr title="carriage return">#x0D</abbr></code><code>]</code> <code>|</code> <a href="#grammar-production-ECHAR">ECHAR</a> <code>|</code> <a href="#grammar-production-UCHAR">UCHAR</a><code>)</code><code>*</code> '<code class="grammar-literal">&quot;</code>'</td>
212
+ </tr>
213
+ <tr id="grammar-production-STRING_LITERAL_SINGLE_QUOTE">
214
+ <td>[23]</td>
215
+ <td><code>STRING_LITERAL_SINGLE_QUOTE</code></td>
216
+ <td>::=</td>
217
+ <td>"<code class="grammar-literal">&apos;</code>" <code>(</code><code>[</code><code class="grammar-literal">^</code><code class="grammar-char-escape"><abbr title="ascii '&apos;'">#x27</abbr></code><code class="grammar-char-escape"><abbr title="ascii '\'">#x5C</abbr></code><code class="grammar-char-escape"><abbr title="new line">#x0A</abbr></code><code class="grammar-char-escape"><abbr title="carriage return">#x0D</abbr></code><code>]</code> <code>|</code> <a href="#grammar-production-ECHAR">ECHAR</a> <code>|</code> <a href="#grammar-production-UCHAR">UCHAR</a><code>)</code><code>*</code> "<code class="grammar-literal">&apos;</code>"</td>
218
+ </tr>
219
+ <tr id="grammar-production-STRING_LITERAL_LONG_SINGLE_QUOTE">
220
+ <td>[24]</td>
221
+ <td><code>STRING_LITERAL_LONG_SINGLE_QUOTE</code></td>
222
+ <td>::=</td>
223
+ <td>&quot;&apos;&apos;&apos;&quot; <code>(</code><code>(</code>"<code class="grammar-literal">&apos;</code>" <code>|</code> &quot;&apos;&apos;&quot;<code>)</code><code>?</code> <code>[</code><code class="grammar-literal">^&apos;]</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">|</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">ECHAR</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">|</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">UCHAR</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">)</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">)*</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">&quot;&apos;&apos;&apos;&quot;</code><code>]</code><code>)</code></td>
224
+ </tr>
225
+ <tr id="grammar-production-STRING_LITERAL_LONG_QUOTE">
226
+ <td>[25]</td>
227
+ <td><code>STRING_LITERAL_LONG_QUOTE</code></td>
228
+ <td>::=</td>
229
+ <td>&apos;&quot;&quot;&quot;&apos; <code>(</code><code>(</code>'<code class="grammar-literal">&quot;</code>' <code>|</code> &apos;&quot;&quot;&apos;<code>)</code><code>?</code> <code>[</code><code class="grammar-literal">^&quot;]</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">|</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">ECHAR</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">|</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">UCHAR</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">)</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">)*</code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">&apos;&quot;&quot;&quot;&apos;</code><code>]</code><code>)</code></td>
230
+ </tr>
231
+ <tr id="grammar-production-UCHAR">
232
+ <td>[26]</td>
233
+ <td><code>UCHAR</code></td>
234
+ <td>::=</td>
235
+ <td><code>(</code>"<code class="grammar-literal">u</code>" <a href="#grammar-production-HEX">HEX</a> <a href="#grammar-production-HEX">HEX</a> <a href="#grammar-production-HEX">HEX</a> <a href="#grammar-production-HEX">HEX</a><code>)</code> <code>|</code> <code>(</code>"<code class="grammar-literal">U</code>" <a href="#grammar-production-HEX">HEX</a> <a href="#grammar-production-HEX">HEX</a> <a href="#grammar-production-HEX">HEX</a> <a href="#grammar-production-HEX">HEX</a> <a href="#grammar-production-HEX">HEX</a> <a href="#grammar-production-HEX">HEX</a> <a href="#grammar-production-HEX">HEX</a> <a href="#grammar-production-HEX">HEX</a><code>)</code></td>
236
+ </tr>
237
+ <tr id="grammar-production-ECHAR">
238
+ <td>[159s]</td>
239
+ <td><code>ECHAR</code></td>
240
+ <td>::=</td>
241
+ <td>"<code class="grammar-literal">\</code>" <code>[</code><code class="grammar-literal">tbnrf&quot;&apos;</code><code>]</code></td>
242
+ </tr>
243
+ <tr id="grammar-production-SPARQL_PREFIX">
244
+ <td>[28t]</td>
245
+ <td><code>SPARQL_PREFIX</code></td>
246
+ <td>::=</td>
247
+ <td><code>[</code><code class="grammar-literal">Pp</code><code>]</code> <code>[</code><code class="grammar-literal">Rr</code><code>]</code> <code>[</code><code class="grammar-literal">Ee</code><code>]</code> <code>[</code><code class="grammar-literal">Ff</code><code>]</code> <code>[</code><code class="grammar-literal">Ii</code><code>]</code> <code>[</code><code class="grammar-literal">Xx</code><code>]</code></td>
248
+ </tr>
249
+ <tr id="grammar-production-SPARQL_BASE">
250
+ <td>[29t]</td>
251
+ <td><code>SPARQL_BASE</code></td>
252
+ <td>::=</td>
253
+ <td><code>[</code><code class="grammar-literal">Bb</code><code>]</code> <code>[</code><code class="grammar-literal">Aa</code><code>]</code> <code>[</code><code class="grammar-literal">Ss</code><code>]</code> <code>[</code><code class="grammar-literal">Ee</code><code>]</code></td>
254
+ </tr>
255
+ <tr id="grammar-production-WS">
256
+ <td>[161s]</td>
257
+ <td><code>WS</code></td>
258
+ <td>::=</td>
259
+ <td><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code> <code>|</code> <code class="grammar-char-escape"><abbr title="horizontal tab">#x09</abbr></code> <code>|</code> <code class="grammar-char-escape"><abbr title="carriage return">#x0D</abbr></code> <code>|</code> <code class="grammar-char-escape"><abbr title="new line">#x0A</abbr></code></td>
260
+ </tr>
261
+ <tr id="grammar-production-ANON">
262
+ <td>[162s]</td>
263
+ <td><code>ANON</code></td>
264
+ <td>::=</td>
265
+ <td>"<code class="grammar-literal">[</code>" <a href="#grammar-production-WS">WS</a><code>*</code> "<code class="grammar-literal">]</code>"</td>
266
+ </tr>
267
+ <tr id="grammar-production-PN_CHARS_BASE">
268
+ <td>[163s]</td>
269
+ <td><code>PN_CHARS_BASE</code></td>
270
+ <td>::=</td>
271
+ <td><code>[</code><code class="grammar-literal">A-Z</code><code>]</code></td>
272
+ </tr>
273
+ <tr>
274
+ <td colspan=2></td>
275
+ <td>|</td>
276
+ <td><code>[</code><code class="grammar-literal">a-z</code><code>]</code></td>
277
+ </tr>
278
+ <tr>
279
+ <td colspan=2></td>
280
+ <td>|</td>
281
+ <td><code>[</code><code class="grammar-char-escape"><abbr title="extended ascii '#xC0'">#xC0</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="extended ascii '#xD6'">#xD6</abbr></code><code>]</code></td>
282
+ </tr>
283
+ <tr>
284
+ <td colspan=2></td>
285
+ <td>|</td>
286
+ <td><code>[</code><code class="grammar-char-escape"><abbr title="extended ascii '#xD8'">#xD8</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="extended ascii '#xF6'">#xF6</abbr></code><code>]</code></td>
287
+ </tr>
288
+ <tr>
289
+ <td colspan=2></td>
290
+ <td>|</td>
291
+ <td><code>[</code><code class="grammar-char-escape"><abbr title="extended ascii '#xF8'">#xF8</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#x02FF</abbr></code><code>]</code></td>
292
+ </tr>
293
+ <tr>
294
+ <td colspan=2></td>
295
+ <td>|</td>
296
+ <td><code>[</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#x0370</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#x037D</abbr></code><code>]</code></td>
297
+ </tr>
298
+ <tr>
299
+ <td colspan=2></td>
300
+ <td>|</td>
301
+ <td><code>[</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#x037F</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Reserved'">#x1FFF</abbr></code><code>]</code></td>
302
+ </tr>
303
+ <tr>
304
+ <td colspan=2></td>
305
+ <td>|</td>
306
+ <td><code>[</code><code class="grammar-char-escape"><abbr title="unicode 'Format'">#x200C</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Format'">#x200D</abbr></code><code>]</code></td>
307
+ </tr>
308
+ <tr>
309
+ <td colspan=2></td>
310
+ <td>|</td>
311
+ <td><code>[</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#x2070</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Reserved'">#x218F</abbr></code><code>]</code></td>
312
+ </tr>
313
+ <tr>
314
+ <td colspan=2></td>
315
+ <td>|</td>
316
+ <td><code>[</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#x2C00</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Reserved'">#x2FEF</abbr></code><code>]</code></td>
317
+ </tr>
318
+ <tr>
319
+ <td colspan=2></td>
320
+ <td>|</td>
321
+ <td><code>[</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#x3001</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Reserved'">#xD7FF</abbr></code><code>]</code></td>
322
+ </tr>
323
+ <tr>
324
+ <td colspan=2></td>
325
+ <td>|</td>
326
+ <td><code>[</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#xF900</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#xFDCF</abbr></code><code>]</code></td>
327
+ </tr>
328
+ <tr>
329
+ <td colspan=2></td>
330
+ <td>|</td>
331
+ <td><code>[</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#xFDF0</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#xFFFD</abbr></code><code>]</code></td>
332
+ </tr>
333
+ <tr>
334
+ <td colspan=2></td>
335
+ <td>|</td>
336
+ <td><code>[</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#x00010000</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Noncharacter'">#x000EFFFF</abbr></code><code>]</code></td>
337
+ </tr>
338
+ <tr id="grammar-production-PN_CHARS_U">
339
+ <td>[164s]</td>
340
+ <td><code>PN_CHARS_U</code></td>
341
+ <td>::=</td>
342
+ <td><a href="#grammar-production-PN_CHARS_BASE">PN_CHARS_BASE</a> <code>|</code> "<code class="grammar-literal">_</code>"</td>
343
+ </tr>
344
+ <tr id="grammar-production-PN_CHARS">
345
+ <td>[166s]</td>
346
+ <td><code>PN_CHARS</code></td>
347
+ <td>::=</td>
348
+ <td><a href="#grammar-production-PN_CHARS_U">PN_CHARS_U</a> <code>|</code> "<code class="grammar-literal">-</code>" <code>|</code> <code>[</code><code class="grammar-literal">0-9</code><code>]</code> <code>|</code> <code class="grammar-char-escape"><abbr title="extended ascii '#xB7'">#xB7</abbr></code> <code>|</code> <code>[</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#x0300</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#x036F</abbr></code><code>]</code> <code>|</code> <code>[</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#x203F</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#x2040</abbr></code><code>]</code></td>
349
+ </tr>
350
+ <tr id="grammar-production-PN_PREFIX">
351
+ <td>[167s]</td>
352
+ <td><code>PN_PREFIX</code></td>
353
+ <td>::=</td>
354
+ <td><a href="#grammar-production-PN_CHARS_BASE">PN_CHARS_BASE</a> <code>(</code><code>(</code><a href="#grammar-production-PN_CHARS">PN_CHARS</a> <code>|</code> "<code class="grammar-literal">.</code>"<code>)</code><code>*</code> <a href="#grammar-production-PN_CHARS">PN_CHARS</a><code>)</code><code>?</code></td>
355
+ </tr>
356
+ <tr id="grammar-production-PN_LOCAL">
357
+ <td>[168s]</td>
358
+ <td><code>PN_LOCAL</code></td>
359
+ <td>::=</td>
360
+ <td><code>(</code><a href="#grammar-production-PN_CHARS_U">PN_CHARS_U</a> <code>|</code> "<code class="grammar-literal">:</code>" <code>|</code> <code>[</code><code class="grammar-literal">0-9</code><code>]</code> <code>|</code> <a href="#grammar-production-PLX">PLX</a><code>)</code> <code>(</code><code>(</code><a href="#grammar-production-PN_CHARS">PN_CHARS</a> <code>|</code> "<code class="grammar-literal">.</code>" <code>|</code> "<code class="grammar-literal">:</code>" <code>|</code> <a href="#grammar-production-PLX">PLX</a><code>)</code><code>*</code> <code>(</code><a href="#grammar-production-PN_CHARS">PN_CHARS</a> <code>|</code> "<code class="grammar-literal">:</code>" <code>|</code> <a href="#grammar-production-PLX">PLX</a><code>)</code><code>)</code><code>?</code></td>
361
+ </tr>
362
+ <tr id="grammar-production-PLX">
363
+ <td>[169s]</td>
364
+ <td><code>PLX</code></td>
365
+ <td>::=</td>
366
+ <td><a href="#grammar-production-PERCENT">PERCENT</a> <code>|</code> <a href="#grammar-production-PN_LOCAL_ESC">PN_LOCAL_ESC</a></td>
367
+ </tr>
368
+ <tr id="grammar-production-PERCENT">
369
+ <td>[170s]</td>
370
+ <td><code>PERCENT</code></td>
371
+ <td>::=</td>
372
+ <td>"<code class="grammar-literal">%</code>" <a href="#grammar-production-HEX">HEX</a> <a href="#grammar-production-HEX">HEX</a></td>
373
+ </tr>
374
+ <tr id="grammar-production-HEX">
375
+ <td>[171s]</td>
376
+ <td><code>HEX</code></td>
377
+ <td>::=</td>
378
+ <td><code>[</code><code class="grammar-literal">0-9A-Fa-f</code><code>]</code></td>
379
+ </tr>
380
+ <tr id="grammar-production-PN_LOCAL_ESC">
381
+ <td>[172s]</td>
382
+ <td><code>PN_LOCAL_ESC</code></td>
383
+ <td>::=</td>
384
+ <td>"<code class="grammar-literal">\</code>" <code>(</code>"<code class="grammar-literal">_</code>" <code>|</code> "<code class="grammar-literal">~</code>" <code>|</code> "<code class="grammar-literal">.</code>" <code>|</code> "<code class="grammar-literal">-</code>" <code>|</code> "<code class="grammar-literal">!</code>" <code>|</code> "<code class="grammar-literal">$</code>" <code>|</code> "<code class="grammar-literal">&amp;</code>" <code>|</code> "<code class="grammar-literal">&apos;</code>" <code>|</code> "<code class="grammar-literal">(</code>" <code>|</code> "<code class="grammar-literal">)</code>" <code>|</code> "<code class="grammar-literal">*</code>" <code>|</code> "<code class="grammar-literal">+</code>" <code>|</code> "<code class="grammar-literal">,</code>" <code>|</code> "<code class="grammar-literal">;</code>" <code>|</code> "<code class="grammar-literal">=</code>" <code>|</code> "<code class="grammar-literal">/</code>" <code>|</code> "<code class="grammar-literal">?</code>" <code>|</code> "<code class="grammar-literal">#</code>" <code>|</code> "<code class="grammar-literal">@</code>" <code>|</code> "<code class="grammar-literal">%</code>"<code>)</code></td>
385
+ </tr>
386
+ </tbody>
467
387
  </table>
388
+
data/lib/ebnf/native.rb CHANGED
@@ -289,7 +289,8 @@ module EBNF
289
289
  l, s = s[1..-1].split(m.rstrip, 2)
290
290
  [Unescape.unescape_string(l), s]
291
291
  when '[' # RANGE, O_RANGE
292
- l, s = s[1..-1].split(/(?<=[^\\])\]/, 2)
292
+ # Includes RANGE and O_RANGE which can't include a ']'
293
+ l, s = s[1..-1].split(']', 2)
293
294
  [[:range, Unescape.unescape_string(l)], s]
294
295
  when '#' # HEX
295
296
  s.match(/(#x\h+)(.*)$/)
data/lib/ebnf/writer.rb CHANGED
@@ -246,14 +246,14 @@ module EBNF
246
246
  format_ebnf_string(expr, expr.include?('"') ? "'" : '"')
247
247
  end
248
248
  parts = {
249
- alt: (@options[:html] ? "<code>|</code> " : "| "),
250
- diff: (@options[:html] ? "<code>-</code> " : "- "),
251
- star: (@options[:html] ? "<code>*</code> " : "*"),
252
- plus: (@options[:html] ? "<code>+</code> " : "+"),
253
- opt: (@options[:html] ? "<code>?</code> " : "?")
249
+ alt: (@options[:html] ? %(<code class="grammar-alt">|</code> ) : "| "),
250
+ diff: (@options[:html] ? %(<code class="grammar-diff">-</code> ) : "- "),
251
+ star: (@options[:html] ? %(<code class="grammar-star">*</code>) : "*"),
252
+ plus: (@options[:html] ? %(<code class="grammar-plus">+</code>) : "+"),
253
+ opt: (@options[:html] ? %(<code class="grammar-opt">?</code>) : "?")
254
254
  }
255
- lparen = (@options[:html] ? "<code>(</code> " : "(")
256
- rparen = (@options[:html] ? "<code>)</code> " : ")")
255
+ lparen = (@options[:html] ? %[<code class="grammar-paren">(</code>] : "(")
256
+ rparen = (@options[:html] ? %[<code class="grammar-paren">)</code>] : ")")
257
257
 
258
258
  case expr.first
259
259
  when :istr
@@ -323,8 +323,8 @@ module EBNF
323
323
 
324
324
  # Format a range
325
325
  def format_ebnf_range(string)
326
- lbrac = (@options[:html] ? "<code>[</code> " : "[")
327
- rbrac = (@options[:html] ? "<code>]</code> " : "]")
326
+ lbrac = (@options[:html] ? %(<code class="grammar-brac">[</code>) : "[")
327
+ rbrac = (@options[:html] ? %(<code class="grammar-brac">]</code>) : "]")
328
328
 
329
329
  buffer = lbrac
330
330
  s = StringScanner.new(string)
@@ -412,15 +412,15 @@ module EBNF
412
412
  end
413
413
  end
414
414
  parts = {
415
- alt: (@options[:html] ? "<code>/</code>" : "/ "),
416
- star: (@options[:html] ? "<code>*</code>" : "*"),
417
- plus: (@options[:html] ? "<code>+</code>" : "1*"),
418
- opt: (@options[:html] ? "<code>?</code>" : "?")
415
+ alt: (@options[:html] ? %(<code class="grammar-alt">/</code>) : "/ "),
416
+ star: (@options[:html] ? %(<code class="grammar-star">*</code>) : "*"),
417
+ plus: (@options[:html] ? %(<code class="grammar-plus">+</code>) : "1*"),
418
+ opt: (@options[:html] ? %(<code class="grammar-opt">?</code>) : "?")
419
419
  }
420
- lbrac = (@options[:html] ? "<code>[</code> " : "[")
421
- rbrac = (@options[:html] ? "<code>]</code> " : "]")
422
- lparen = (@options[:html] ? "<code>(</code> " : "(")
423
- rparen = (@options[:html] ? "<code>)</code> " : ")")
420
+ lbrac = (@options[:html] ? %(<code class="grammar-brac">[</code>) : "[")
421
+ rbrac = (@options[:html] ? %(<code class="grammar-brac">]</code>) : "]")
422
+ lparen = (@options[:html] ? %[<code class="grammar-paren">(</code>] : "(")
423
+ rparen = (@options[:html] ? %[<code class="grammar-paren">)</code>] : ")")
424
424
 
425
425
  case expr.first
426
426
  when :istr
@@ -597,11 +597,11 @@ module EBNF
597
597
  end
598
598
  end
599
599
  parts = {
600
- alt: (@options[:html] ? "<code>|</code> " : "| "),
601
- diff: (@options[:html] ? "<code>-</code> " : "- "),
600
+ alt: (@options[:html] ? %(<code class="grammar-alt">|</code> ) : "| "),
601
+ diff: (@options[:html] ? %(<code class="grammar-diff">-</code> ) : "- "),
602
602
  }
603
- lparen = (@options[:html] ? "<code>(</code> " : "(")
604
- rparen = (@options[:html] ? "<code>)</code> " : ")")
603
+ lparen = (@options[:html] ? %[<code class="grammar-paren">(</code>] : "(")
604
+ rparen = (@options[:html] ? %[<code class="grammar-paren">)</code>] : ")")
605
605
 
606
606
  case expr.first
607
607
  when :istr
@@ -709,6 +709,7 @@ module EBNF
709
709
  end
710
710
 
711
711
  ERB_DESC = %q(
712
+ <!-- Generated with ebnf version #{EBNF::VERSION}. See https://github.com/dryruby/ebnf. -->
712
713
  <table class="grammar">
713
714
  <tbody id="grammar-productions" class="<%= @format %>">
714
715
  <% for rule in @rules %>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ebnf
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.2
4
+ version: 2.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregg Kellogg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-20 00:00:00.000000000 Z
11
+ date: 2023-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sxp