jnunemaker-siren 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,8 @@
1
+ *.rbc
2
+ *.sw?
3
+ .DS_Store
4
+ coverage
5
+ rdoc
6
+ pkg
7
+
8
+
@@ -0,0 +1,4 @@
1
+ === 0.1.1 / 2009-06-22
2
+ * 1 tweak
3
+ * gemified and added jeweler (jnunemaker)
4
+
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2009 James Coglan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ 'Software'), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,9 @@
1
+ = siren
2
+
3
+ == Description
4
+
5
+ JSON parser that understands cross-references and casts to typed Ruby objects. Implements JSONQuery against JSON trees and Ruby object graphs.
6
+
7
+ == Install
8
+
9
+ sudo gem install jnunemaker-siren -s http://gems.github.com
@@ -0,0 +1,64 @@
1
+ # -*- ruby -*-
2
+ require 'rubygems'
3
+ require 'rake'
4
+
5
+ begin
6
+ require 'jeweler'
7
+ Jeweler::Tasks.new do |gem|
8
+ gem.name = "siren"
9
+ gem.summary = %Q{JSON parser that understands cross-references and casts to typed Ruby objects. Implements JSONQuery against JSON trees and Ruby object graphs.}
10
+ gem.email = "jcoglan@googlemail.com"
11
+ gem.homepage = "http://github.com/jnunemaker/siren"
12
+ gem.authors = ["James Coglan"]
13
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
14
+ end
15
+
16
+ rescue LoadError
17
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
18
+ end
19
+
20
+ require 'rake/testtask'
21
+ Rake::TestTask.new(:test) do |test|
22
+ test.libs << 'lib' << 'test'
23
+ test.pattern = 'test/**/test_*.rb'
24
+ test.verbose = true
25
+ end
26
+
27
+ begin
28
+ require 'rcov/rcovtask'
29
+ Rcov::RcovTask.new do |test|
30
+ test.libs << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+ rescue LoadError
35
+ task :rcov do
36
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
37
+ end
38
+ end
39
+
40
+
41
+ task :default => :test
42
+
43
+ require 'rake/rdoctask'
44
+ Rake::RDocTask.new do |rdoc|
45
+ if File.exist?('VERSION.yml')
46
+ config = YAML.load(File.read('VERSION.yml'))
47
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
48
+ else
49
+ version = ""
50
+ end
51
+
52
+ rdoc.rdoc_dir = 'rdoc'
53
+ rdoc.title = "siren #{version}"
54
+ rdoc.rdoc_files.include('README*')
55
+ rdoc.rdoc_files.include('lib/**/*.rb')
56
+ end
57
+
58
+ task :tt do
59
+ %w(json json_query).each do |grammar|
60
+ `tt lib/#{grammar}.tt`
61
+ end
62
+ end
63
+
64
+ # vim: syntax=Ruby
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.1
@@ -0,0 +1,1037 @@
1
+ module Json
2
+ include Treetop::Runtime
3
+
4
+ def root
5
+ @root || :value
6
+ end
7
+
8
+ module Value0
9
+ def space
10
+ elements[0]
11
+ end
12
+
13
+ def data
14
+ elements[1]
15
+ end
16
+
17
+ def space
18
+ elements[2]
19
+ end
20
+ end
21
+
22
+ module Value1
23
+ def value
24
+ data.value
25
+ end
26
+ end
27
+
28
+ def _nt_value
29
+ start_index = index
30
+ if node_cache[:value].has_key?(index)
31
+ cached = node_cache[:value][index]
32
+ @index = cached.interval.end if cached
33
+ return cached
34
+ end
35
+
36
+ i0, s0 = index, []
37
+ r1 = _nt_space
38
+ s0 << r1
39
+ if r1
40
+ i2 = index
41
+ r3 = _nt_object
42
+ if r3
43
+ r2 = r3
44
+ else
45
+ r4 = _nt_array
46
+ if r4
47
+ r2 = r4
48
+ else
49
+ r5 = _nt_string
50
+ if r5
51
+ r2 = r5
52
+ else
53
+ r6 = _nt_number
54
+ if r6
55
+ r2 = r6
56
+ else
57
+ r7 = _nt_true
58
+ if r7
59
+ r2 = r7
60
+ else
61
+ r8 = _nt_false
62
+ if r8
63
+ r2 = r8
64
+ else
65
+ r9 = _nt_null
66
+ if r9
67
+ r2 = r9
68
+ else
69
+ self.index = i2
70
+ r2 = nil
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ s0 << r2
79
+ if r2
80
+ r10 = _nt_space
81
+ s0 << r10
82
+ end
83
+ end
84
+ if s0.last
85
+ r0 = (SyntaxNode).new(input, i0...index, s0)
86
+ r0.extend(Value0)
87
+ r0.extend(Value1)
88
+ else
89
+ self.index = i0
90
+ r0 = nil
91
+ end
92
+
93
+ node_cache[:value][start_index] = r0
94
+
95
+ return r0
96
+ end
97
+
98
+ module Object0
99
+ def key_value_pair
100
+ elements[1]
101
+ end
102
+ end
103
+
104
+ module Object1
105
+ def first
106
+ elements[0]
107
+ end
108
+
109
+ def others
110
+ elements[1]
111
+ end
112
+ end
113
+
114
+ module Object2
115
+ def space
116
+ elements[1]
117
+ end
118
+
119
+ def list
120
+ elements[2]
121
+ end
122
+
123
+ end
124
+
125
+ module Object3
126
+ def value
127
+ pairs = [list.first] + list.others.elements.map { |e| e.key_value_pair }
128
+ pairs.inject({}) do |hash, pair|
129
+ hash[pair.string.value] = pair.value.value
130
+ hash
131
+ end
132
+ rescue
133
+ {}
134
+ end
135
+ end
136
+
137
+ def _nt_object
138
+ start_index = index
139
+ if node_cache[:object].has_key?(index)
140
+ cached = node_cache[:object][index]
141
+ @index = cached.interval.end if cached
142
+ return cached
143
+ end
144
+
145
+ i0, s0 = index, []
146
+ if input.index("{", index) == index
147
+ r1 = (SyntaxNode).new(input, index...(index + 1))
148
+ @index += 1
149
+ else
150
+ terminal_parse_failure("{")
151
+ r1 = nil
152
+ end
153
+ s0 << r1
154
+ if r1
155
+ r2 = _nt_space
156
+ s0 << r2
157
+ if r2
158
+ i4, s4 = index, []
159
+ r5 = _nt_key_value_pair
160
+ s4 << r5
161
+ if r5
162
+ s6, i6 = [], index
163
+ loop do
164
+ i7, s7 = index, []
165
+ if input.index(",", index) == index
166
+ r8 = (SyntaxNode).new(input, index...(index + 1))
167
+ @index += 1
168
+ else
169
+ terminal_parse_failure(",")
170
+ r8 = nil
171
+ end
172
+ s7 << r8
173
+ if r8
174
+ r9 = _nt_key_value_pair
175
+ s7 << r9
176
+ end
177
+ if s7.last
178
+ r7 = (SyntaxNode).new(input, i7...index, s7)
179
+ r7.extend(Object0)
180
+ else
181
+ self.index = i7
182
+ r7 = nil
183
+ end
184
+ if r7
185
+ s6 << r7
186
+ else
187
+ break
188
+ end
189
+ end
190
+ r6 = SyntaxNode.new(input, i6...index, s6)
191
+ s4 << r6
192
+ end
193
+ if s4.last
194
+ r4 = (SyntaxNode).new(input, i4...index, s4)
195
+ r4.extend(Object1)
196
+ else
197
+ self.index = i4
198
+ r4 = nil
199
+ end
200
+ if r4
201
+ r3 = r4
202
+ else
203
+ r3 = SyntaxNode.new(input, index...index)
204
+ end
205
+ s0 << r3
206
+ if r3
207
+ if input.index("}", index) == index
208
+ r10 = (SyntaxNode).new(input, index...(index + 1))
209
+ @index += 1
210
+ else
211
+ terminal_parse_failure("}")
212
+ r10 = nil
213
+ end
214
+ s0 << r10
215
+ end
216
+ end
217
+ end
218
+ if s0.last
219
+ r0 = (SyntaxNode).new(input, i0...index, s0)
220
+ r0.extend(Object2)
221
+ r0.extend(Object3)
222
+ else
223
+ self.index = i0
224
+ r0 = nil
225
+ end
226
+
227
+ node_cache[:object][start_index] = r0
228
+
229
+ return r0
230
+ end
231
+
232
+ module KeyValuePair0
233
+ def space
234
+ elements[0]
235
+ end
236
+
237
+ def string
238
+ elements[1]
239
+ end
240
+
241
+ def space
242
+ elements[2]
243
+ end
244
+
245
+ def value
246
+ elements[4]
247
+ end
248
+ end
249
+
250
+ def _nt_key_value_pair
251
+ start_index = index
252
+ if node_cache[:key_value_pair].has_key?(index)
253
+ cached = node_cache[:key_value_pair][index]
254
+ @index = cached.interval.end if cached
255
+ return cached
256
+ end
257
+
258
+ i0, s0 = index, []
259
+ r1 = _nt_space
260
+ s0 << r1
261
+ if r1
262
+ r2 = _nt_string
263
+ s0 << r2
264
+ if r2
265
+ r3 = _nt_space
266
+ s0 << r3
267
+ if r3
268
+ if input.index(":", index) == index
269
+ r4 = (SyntaxNode).new(input, index...(index + 1))
270
+ @index += 1
271
+ else
272
+ terminal_parse_failure(":")
273
+ r4 = nil
274
+ end
275
+ s0 << r4
276
+ if r4
277
+ r5 = _nt_value
278
+ s0 << r5
279
+ end
280
+ end
281
+ end
282
+ end
283
+ if s0.last
284
+ r0 = (SyntaxNode).new(input, i0...index, s0)
285
+ r0.extend(KeyValuePair0)
286
+ else
287
+ self.index = i0
288
+ r0 = nil
289
+ end
290
+
291
+ node_cache[:key_value_pair][start_index] = r0
292
+
293
+ return r0
294
+ end
295
+
296
+ module Array0
297
+ def value
298
+ elements[1]
299
+ end
300
+ end
301
+
302
+ module Array1
303
+ def first
304
+ elements[0]
305
+ end
306
+
307
+ def others
308
+ elements[1]
309
+ end
310
+ end
311
+
312
+ module Array2
313
+ def space
314
+ elements[1]
315
+ end
316
+
317
+ def list
318
+ elements[2]
319
+ end
320
+
321
+ end
322
+
323
+ module Array3
324
+ def value
325
+ [list.first.value] + list.others.elements.map { |v| v.value.value }
326
+ rescue
327
+ []
328
+ end
329
+ end
330
+
331
+ def _nt_array
332
+ start_index = index
333
+ if node_cache[:array].has_key?(index)
334
+ cached = node_cache[:array][index]
335
+ @index = cached.interval.end if cached
336
+ return cached
337
+ end
338
+
339
+ i0, s0 = index, []
340
+ if input.index("[", index) == index
341
+ r1 = (SyntaxNode).new(input, index...(index + 1))
342
+ @index += 1
343
+ else
344
+ terminal_parse_failure("[")
345
+ r1 = nil
346
+ end
347
+ s0 << r1
348
+ if r1
349
+ r2 = _nt_space
350
+ s0 << r2
351
+ if r2
352
+ i4, s4 = index, []
353
+ r5 = _nt_value
354
+ s4 << r5
355
+ if r5
356
+ s6, i6 = [], index
357
+ loop do
358
+ i7, s7 = index, []
359
+ if input.index(",", index) == index
360
+ r8 = (SyntaxNode).new(input, index...(index + 1))
361
+ @index += 1
362
+ else
363
+ terminal_parse_failure(",")
364
+ r8 = nil
365
+ end
366
+ s7 << r8
367
+ if r8
368
+ r9 = _nt_value
369
+ s7 << r9
370
+ end
371
+ if s7.last
372
+ r7 = (SyntaxNode).new(input, i7...index, s7)
373
+ r7.extend(Array0)
374
+ else
375
+ self.index = i7
376
+ r7 = nil
377
+ end
378
+ if r7
379
+ s6 << r7
380
+ else
381
+ break
382
+ end
383
+ end
384
+ r6 = SyntaxNode.new(input, i6...index, s6)
385
+ s4 << r6
386
+ end
387
+ if s4.last
388
+ r4 = (SyntaxNode).new(input, i4...index, s4)
389
+ r4.extend(Array1)
390
+ else
391
+ self.index = i4
392
+ r4 = nil
393
+ end
394
+ if r4
395
+ r3 = r4
396
+ else
397
+ r3 = SyntaxNode.new(input, index...index)
398
+ end
399
+ s0 << r3
400
+ if r3
401
+ if input.index("]", index) == index
402
+ r10 = (SyntaxNode).new(input, index...(index + 1))
403
+ @index += 1
404
+ else
405
+ terminal_parse_failure("]")
406
+ r10 = nil
407
+ end
408
+ s0 << r10
409
+ end
410
+ end
411
+ end
412
+ if s0.last
413
+ r0 = (SyntaxNode).new(input, i0...index, s0)
414
+ r0.extend(Array2)
415
+ r0.extend(Array3)
416
+ else
417
+ self.index = i0
418
+ r0 = nil
419
+ end
420
+
421
+ node_cache[:array][start_index] = r0
422
+
423
+ return r0
424
+ end
425
+
426
+ module String0
427
+ def hex
428
+ elements[1]
429
+ end
430
+
431
+ def hex
432
+ elements[2]
433
+ end
434
+
435
+ def hex
436
+ elements[3]
437
+ end
438
+
439
+ def hex
440
+ elements[4]
441
+ end
442
+ end
443
+
444
+ module String1
445
+ end
446
+
447
+ module String2
448
+ end
449
+
450
+ module String3
451
+ def value
452
+ eval(text_value)
453
+ end
454
+ end
455
+
456
+ def _nt_string
457
+ start_index = index
458
+ if node_cache[:string].has_key?(index)
459
+ cached = node_cache[:string][index]
460
+ @index = cached.interval.end if cached
461
+ return cached
462
+ end
463
+
464
+ i0, s0 = index, []
465
+ if input.index('"', index) == index
466
+ r1 = (SyntaxNode).new(input, index...(index + 1))
467
+ @index += 1
468
+ else
469
+ terminal_parse_failure('"')
470
+ r1 = nil
471
+ end
472
+ s0 << r1
473
+ if r1
474
+ s2, i2 = [], index
475
+ loop do
476
+ i3 = index
477
+ i4, s4 = index, []
478
+ if input.index('\\', index) == index
479
+ r5 = (SyntaxNode).new(input, index...(index + 1))
480
+ @index += 1
481
+ else
482
+ terminal_parse_failure('\\')
483
+ r5 = nil
484
+ end
485
+ s4 << r5
486
+ if r5
487
+ i6 = index
488
+ if input.index('"', index) == index
489
+ r7 = (SyntaxNode).new(input, index...(index + 1))
490
+ @index += 1
491
+ else
492
+ terminal_parse_failure('"')
493
+ r7 = nil
494
+ end
495
+ if r7
496
+ r6 = r7
497
+ else
498
+ if input.index('\\', index) == index
499
+ r8 = (SyntaxNode).new(input, index...(index + 1))
500
+ @index += 1
501
+ else
502
+ terminal_parse_failure('\\')
503
+ r8 = nil
504
+ end
505
+ if r8
506
+ r6 = r8
507
+ else
508
+ if input.index('/', index) == index
509
+ r9 = (SyntaxNode).new(input, index...(index + 1))
510
+ @index += 1
511
+ else
512
+ terminal_parse_failure('/')
513
+ r9 = nil
514
+ end
515
+ if r9
516
+ r6 = r9
517
+ else
518
+ if input.index('b', index) == index
519
+ r10 = (SyntaxNode).new(input, index...(index + 1))
520
+ @index += 1
521
+ else
522
+ terminal_parse_failure('b')
523
+ r10 = nil
524
+ end
525
+ if r10
526
+ r6 = r10
527
+ else
528
+ if input.index('f', index) == index
529
+ r11 = (SyntaxNode).new(input, index...(index + 1))
530
+ @index += 1
531
+ else
532
+ terminal_parse_failure('f')
533
+ r11 = nil
534
+ end
535
+ if r11
536
+ r6 = r11
537
+ else
538
+ if input.index('n', index) == index
539
+ r12 = (SyntaxNode).new(input, index...(index + 1))
540
+ @index += 1
541
+ else
542
+ terminal_parse_failure('n')
543
+ r12 = nil
544
+ end
545
+ if r12
546
+ r6 = r12
547
+ else
548
+ if input.index('r', index) == index
549
+ r13 = (SyntaxNode).new(input, index...(index + 1))
550
+ @index += 1
551
+ else
552
+ terminal_parse_failure('r')
553
+ r13 = nil
554
+ end
555
+ if r13
556
+ r6 = r13
557
+ else
558
+ if input.index('t', index) == index
559
+ r14 = (SyntaxNode).new(input, index...(index + 1))
560
+ @index += 1
561
+ else
562
+ terminal_parse_failure('t')
563
+ r14 = nil
564
+ end
565
+ if r14
566
+ r6 = r14
567
+ else
568
+ i15, s15 = index, []
569
+ if input.index('u', index) == index
570
+ r16 = (SyntaxNode).new(input, index...(index + 1))
571
+ @index += 1
572
+ else
573
+ terminal_parse_failure('u')
574
+ r16 = nil
575
+ end
576
+ s15 << r16
577
+ if r16
578
+ r17 = _nt_hex
579
+ s15 << r17
580
+ if r17
581
+ r18 = _nt_hex
582
+ s15 << r18
583
+ if r18
584
+ r19 = _nt_hex
585
+ s15 << r19
586
+ if r19
587
+ r20 = _nt_hex
588
+ s15 << r20
589
+ end
590
+ end
591
+ end
592
+ end
593
+ if s15.last
594
+ r15 = (SyntaxNode).new(input, i15...index, s15)
595
+ r15.extend(String0)
596
+ else
597
+ self.index = i15
598
+ r15 = nil
599
+ end
600
+ if r15
601
+ r6 = r15
602
+ else
603
+ self.index = i6
604
+ r6 = nil
605
+ end
606
+ end
607
+ end
608
+ end
609
+ end
610
+ end
611
+ end
612
+ end
613
+ end
614
+ s4 << r6
615
+ end
616
+ if s4.last
617
+ r4 = (SyntaxNode).new(input, i4...index, s4)
618
+ r4.extend(String1)
619
+ else
620
+ self.index = i4
621
+ r4 = nil
622
+ end
623
+ if r4
624
+ r3 = r4
625
+ else
626
+ if input.index(Regexp.new('[^\\"\\\\]'), index) == index
627
+ r21 = (SyntaxNode).new(input, index...(index + 1))
628
+ @index += 1
629
+ else
630
+ r21 = nil
631
+ end
632
+ if r21
633
+ r3 = r21
634
+ else
635
+ self.index = i3
636
+ r3 = nil
637
+ end
638
+ end
639
+ if r3
640
+ s2 << r3
641
+ else
642
+ break
643
+ end
644
+ end
645
+ r2 = SyntaxNode.new(input, i2...index, s2)
646
+ s0 << r2
647
+ if r2
648
+ if input.index('"', index) == index
649
+ r22 = (SyntaxNode).new(input, index...(index + 1))
650
+ @index += 1
651
+ else
652
+ terminal_parse_failure('"')
653
+ r22 = nil
654
+ end
655
+ s0 << r22
656
+ end
657
+ end
658
+ if s0.last
659
+ r0 = (SyntaxNode).new(input, i0...index, s0)
660
+ r0.extend(String2)
661
+ r0.extend(String3)
662
+ else
663
+ self.index = i0
664
+ r0 = nil
665
+ end
666
+
667
+ node_cache[:string][start_index] = r0
668
+
669
+ return r0
670
+ end
671
+
672
+ module Number0
673
+ end
674
+
675
+ module Number1
676
+ end
677
+
678
+ module Number2
679
+ end
680
+
681
+ module Number3
682
+ end
683
+
684
+ module Number4
685
+ def value
686
+ eval(text_value)
687
+ end
688
+ end
689
+
690
+ def _nt_number
691
+ start_index = index
692
+ if node_cache[:number].has_key?(index)
693
+ cached = node_cache[:number][index]
694
+ @index = cached.interval.end if cached
695
+ return cached
696
+ end
697
+
698
+ i0, s0 = index, []
699
+ if input.index("-", index) == index
700
+ r2 = (SyntaxNode).new(input, index...(index + 1))
701
+ @index += 1
702
+ else
703
+ terminal_parse_failure("-")
704
+ r2 = nil
705
+ end
706
+ if r2
707
+ r1 = r2
708
+ else
709
+ r1 = SyntaxNode.new(input, index...index)
710
+ end
711
+ s0 << r1
712
+ if r1
713
+ i3 = index
714
+ if input.index("0", index) == index
715
+ r4 = (SyntaxNode).new(input, index...(index + 1))
716
+ @index += 1
717
+ else
718
+ terminal_parse_failure("0")
719
+ r4 = nil
720
+ end
721
+ if r4
722
+ r3 = r4
723
+ else
724
+ i5, s5 = index, []
725
+ if input.index(Regexp.new('[1-9]'), index) == index
726
+ r6 = (SyntaxNode).new(input, index...(index + 1))
727
+ @index += 1
728
+ else
729
+ r6 = nil
730
+ end
731
+ s5 << r6
732
+ if r6
733
+ s7, i7 = [], index
734
+ loop do
735
+ r8 = _nt_digit
736
+ if r8
737
+ s7 << r8
738
+ else
739
+ break
740
+ end
741
+ end
742
+ r7 = SyntaxNode.new(input, i7...index, s7)
743
+ s5 << r7
744
+ end
745
+ if s5.last
746
+ r5 = (SyntaxNode).new(input, i5...index, s5)
747
+ r5.extend(Number0)
748
+ else
749
+ self.index = i5
750
+ r5 = nil
751
+ end
752
+ if r5
753
+ r3 = r5
754
+ else
755
+ self.index = i3
756
+ r3 = nil
757
+ end
758
+ end
759
+ s0 << r3
760
+ if r3
761
+ i10, s10 = index, []
762
+ if input.index(".", index) == index
763
+ r11 = (SyntaxNode).new(input, index...(index + 1))
764
+ @index += 1
765
+ else
766
+ terminal_parse_failure(".")
767
+ r11 = nil
768
+ end
769
+ s10 << r11
770
+ if r11
771
+ s12, i12 = [], index
772
+ loop do
773
+ r13 = _nt_digit
774
+ if r13
775
+ s12 << r13
776
+ else
777
+ break
778
+ end
779
+ end
780
+ if s12.empty?
781
+ self.index = i12
782
+ r12 = nil
783
+ else
784
+ r12 = SyntaxNode.new(input, i12...index, s12)
785
+ end
786
+ s10 << r12
787
+ end
788
+ if s10.last
789
+ r10 = (SyntaxNode).new(input, i10...index, s10)
790
+ r10.extend(Number1)
791
+ else
792
+ self.index = i10
793
+ r10 = nil
794
+ end
795
+ if r10
796
+ r9 = r10
797
+ else
798
+ r9 = SyntaxNode.new(input, index...index)
799
+ end
800
+ s0 << r9
801
+ if r9
802
+ i15, s15 = index, []
803
+ if input.index(Regexp.new('[eE]'), index) == index
804
+ r16 = (SyntaxNode).new(input, index...(index + 1))
805
+ @index += 1
806
+ else
807
+ r16 = nil
808
+ end
809
+ s15 << r16
810
+ if r16
811
+ if input.index(Regexp.new('[+-]'), index) == index
812
+ r18 = (SyntaxNode).new(input, index...(index + 1))
813
+ @index += 1
814
+ else
815
+ r18 = nil
816
+ end
817
+ if r18
818
+ r17 = r18
819
+ else
820
+ r17 = SyntaxNode.new(input, index...index)
821
+ end
822
+ s15 << r17
823
+ if r17
824
+ s19, i19 = [], index
825
+ loop do
826
+ r20 = _nt_digit
827
+ if r20
828
+ s19 << r20
829
+ else
830
+ break
831
+ end
832
+ end
833
+ if s19.empty?
834
+ self.index = i19
835
+ r19 = nil
836
+ else
837
+ r19 = SyntaxNode.new(input, i19...index, s19)
838
+ end
839
+ s15 << r19
840
+ end
841
+ end
842
+ if s15.last
843
+ r15 = (SyntaxNode).new(input, i15...index, s15)
844
+ r15.extend(Number2)
845
+ else
846
+ self.index = i15
847
+ r15 = nil
848
+ end
849
+ if r15
850
+ r14 = r15
851
+ else
852
+ r14 = SyntaxNode.new(input, index...index)
853
+ end
854
+ s0 << r14
855
+ end
856
+ end
857
+ end
858
+ if s0.last
859
+ r0 = (SyntaxNode).new(input, i0...index, s0)
860
+ r0.extend(Number3)
861
+ r0.extend(Number4)
862
+ else
863
+ self.index = i0
864
+ r0 = nil
865
+ end
866
+
867
+ node_cache[:number][start_index] = r0
868
+
869
+ return r0
870
+ end
871
+
872
+ def _nt_digit
873
+ start_index = index
874
+ if node_cache[:digit].has_key?(index)
875
+ cached = node_cache[:digit][index]
876
+ @index = cached.interval.end if cached
877
+ return cached
878
+ end
879
+
880
+ if input.index(Regexp.new('[0-9]'), index) == index
881
+ r0 = (SyntaxNode).new(input, index...(index + 1))
882
+ @index += 1
883
+ else
884
+ r0 = nil
885
+ end
886
+
887
+ node_cache[:digit][start_index] = r0
888
+
889
+ return r0
890
+ end
891
+
892
+ def _nt_hex
893
+ start_index = index
894
+ if node_cache[:hex].has_key?(index)
895
+ cached = node_cache[:hex][index]
896
+ @index = cached.interval.end if cached
897
+ return cached
898
+ end
899
+
900
+ i0 = index
901
+ if input.index(Regexp.new('[a-f]'), index) == index
902
+ r1 = (SyntaxNode).new(input, index...(index + 1))
903
+ @index += 1
904
+ else
905
+ r1 = nil
906
+ end
907
+ if r1
908
+ r0 = r1
909
+ else
910
+ r2 = _nt_digit
911
+ if r2
912
+ r0 = r2
913
+ else
914
+ self.index = i0
915
+ r0 = nil
916
+ end
917
+ end
918
+
919
+ node_cache[:hex][start_index] = r0
920
+
921
+ return r0
922
+ end
923
+
924
+ module True0
925
+ def value; true; end
926
+ end
927
+
928
+ def _nt_true
929
+ start_index = index
930
+ if node_cache[:true].has_key?(index)
931
+ cached = node_cache[:true][index]
932
+ @index = cached.interval.end if cached
933
+ return cached
934
+ end
935
+
936
+ if input.index("true", index) == index
937
+ r0 = (SyntaxNode).new(input, index...(index + 4))
938
+ r0.extend(True0)
939
+ @index += 4
940
+ else
941
+ terminal_parse_failure("true")
942
+ r0 = nil
943
+ end
944
+
945
+ node_cache[:true][start_index] = r0
946
+
947
+ return r0
948
+ end
949
+
950
+ module False0
951
+ def value; false; end
952
+ end
953
+
954
+ def _nt_false
955
+ start_index = index
956
+ if node_cache[:false].has_key?(index)
957
+ cached = node_cache[:false][index]
958
+ @index = cached.interval.end if cached
959
+ return cached
960
+ end
961
+
962
+ if input.index("false", index) == index
963
+ r0 = (SyntaxNode).new(input, index...(index + 5))
964
+ r0.extend(False0)
965
+ @index += 5
966
+ else
967
+ terminal_parse_failure("false")
968
+ r0 = nil
969
+ end
970
+
971
+ node_cache[:false][start_index] = r0
972
+
973
+ return r0
974
+ end
975
+
976
+ module Null0
977
+ def value; nil; end
978
+ end
979
+
980
+ def _nt_null
981
+ start_index = index
982
+ if node_cache[:null].has_key?(index)
983
+ cached = node_cache[:null][index]
984
+ @index = cached.interval.end if cached
985
+ return cached
986
+ end
987
+
988
+ if input.index("null", index) == index
989
+ r0 = (SyntaxNode).new(input, index...(index + 4))
990
+ r0.extend(Null0)
991
+ @index += 4
992
+ else
993
+ terminal_parse_failure("null")
994
+ r0 = nil
995
+ end
996
+
997
+ node_cache[:null][start_index] = r0
998
+
999
+ return r0
1000
+ end
1001
+
1002
+ def _nt_space
1003
+ start_index = index
1004
+ if node_cache[:space].has_key?(index)
1005
+ cached = node_cache[:space][index]
1006
+ @index = cached.interval.end if cached
1007
+ return cached
1008
+ end
1009
+
1010
+ s0, i0 = [], index
1011
+ loop do
1012
+ if input.index(Regexp.new('[\\s\\n\\t]'), index) == index
1013
+ r1 = (SyntaxNode).new(input, index...(index + 1))
1014
+ @index += 1
1015
+ else
1016
+ r1 = nil
1017
+ end
1018
+ if r1
1019
+ s0 << r1
1020
+ else
1021
+ break
1022
+ end
1023
+ end
1024
+ r0 = SyntaxNode.new(input, i0...index, s0)
1025
+
1026
+ node_cache[:space][start_index] = r0
1027
+
1028
+ return r0
1029
+ end
1030
+
1031
+ end
1032
+
1033
+ class JsonParser < Treetop::Runtime::CompiledParser
1034
+ include Json
1035
+ end
1036
+
1037
+