ceml 0.7.13 → 0.8.0

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.
Files changed (55) hide show
  1. data/Makefile +1 -1
  2. data/VERSION +1 -1
  3. data/ceml.gemspec +62 -50
  4. data/guide/guide.html +69 -14
  5. data/guide/guide.md +74 -15
  6. data/guide/guide.pdf +0 -0
  7. data/lib/ceml/driver.rb +0 -181
  8. data/lib/ceml/lang/basic_instruction.rb +49 -0
  9. data/lib/ceml/{casting_statement.rb → lang/casting_statement.rb} +19 -9
  10. data/lib/ceml/{instruction_statements.rb → lang/instruction_statements.rb} +5 -16
  11. data/lib/ceml/{script.rb → lang/script.rb} +53 -43
  12. data/lib/ceml/lang/tt/casting.rb +432 -0
  13. data/lib/ceml/lang/tt/casting.treetop +29 -0
  14. data/lib/ceml/lang/tt/instructions.rb +1130 -0
  15. data/lib/ceml/lang/tt/instructions.treetop +86 -0
  16. data/lib/ceml/lang/tt/lexer.rb +1804 -0
  17. data/lib/ceml/{tt → lang/tt}/lexer.treetop +70 -7
  18. data/lib/ceml/lang/tt/scripts.rb +647 -0
  19. data/lib/ceml/{tt → lang/tt}/scripts.treetop +2 -2
  20. data/lib/ceml/lang.rb +10 -0
  21. data/lib/ceml/models/audition.rb +65 -0
  22. data/lib/ceml/models/bundle.rb +64 -0
  23. data/lib/ceml/models/cast.rb +108 -0
  24. data/lib/ceml/models/castable.rb +81 -0
  25. data/lib/ceml/{incident.rb → models/incident.rb} +63 -15
  26. data/lib/ceml/models/incident_model.rb +100 -0
  27. data/lib/ceml/models/incident_role_slot.rb +16 -0
  28. data/lib/ceml/models/player.rb +80 -0
  29. data/lib/ceml/models/queue.rb +12 -0
  30. data/lib/ceml/models/waiting_room.rb +40 -0
  31. data/lib/ceml/models.rb +16 -0
  32. data/lib/ceml/processor.rb +162 -0
  33. data/lib/ceml.rb +7 -14
  34. data/test/askchain.ceml +6 -0
  35. data/test/compliment.ceml +4 -0
  36. data/test/dialogues/accept.ceml +24 -0
  37. data/test/dialogues/basic_seed.ceml +26 -0
  38. data/test/dialogues/jordan.ceml +121 -0
  39. data/test/helper.rb +44 -39
  40. data/test/jane.ceml +48 -0
  41. data/test/{test_casting.rb → lang/test_casting.rb} +5 -0
  42. data/test/lang/test_instructions.rb +42 -0
  43. data/test/{test_scripts.rb → lang/test_scripts.rb} +3 -2
  44. data/test/sync.ceml +6 -0
  45. data/test/test_castable.rb +20 -0
  46. data/test/test_dialogues.rb +58 -0
  47. data/test/test_incident.rb +64 -127
  48. metadata +54 -30
  49. data/.gitignore +0 -23
  50. data/lib/ceml/confluence.rb +0 -63
  51. data/lib/ceml/role.rb +0 -61
  52. data/lib/ceml/tt/casting.treetop +0 -65
  53. data/lib/ceml/tt/instructions.treetop +0 -91
  54. data/test/test_instructions.rb +0 -27
  55. data/test/test_release.rb +0 -78
@@ -0,0 +1,1804 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ module CEML
5
+ module Lexer
6
+ include Treetop::Runtime
7
+
8
+ def root
9
+ @root ||= :text
10
+ end
11
+
12
+ module Text0
13
+ end
14
+
15
+ def _nt_text
16
+ start_index = index
17
+ if node_cache[:text].has_key?(index)
18
+ cached = node_cache[:text][index]
19
+ if cached
20
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
21
+ @index = cached.interval.end
22
+ end
23
+ return cached
24
+ end
25
+
26
+ s0, i0 = [], index
27
+ loop do
28
+ i1, s1 = index, []
29
+ i2 = index
30
+ r3 = _nt_eol
31
+ if r3
32
+ r2 = nil
33
+ else
34
+ @index = i2
35
+ r2 = instantiate_node(SyntaxNode,input, index...index)
36
+ end
37
+ s1 << r2
38
+ if r2
39
+ if index < input_length
40
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
41
+ @index += 1
42
+ else
43
+ terminal_parse_failure("any character")
44
+ r4 = nil
45
+ end
46
+ s1 << r4
47
+ end
48
+ if s1.last
49
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
50
+ r1.extend(Text0)
51
+ else
52
+ @index = i1
53
+ r1 = nil
54
+ end
55
+ if r1
56
+ s0 << r1
57
+ else
58
+ break
59
+ end
60
+ end
61
+ if s0.empty?
62
+ @index = i0
63
+ r0 = nil
64
+ else
65
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
66
+ end
67
+
68
+ node_cache[:text][start_index] = r0
69
+
70
+ r0
71
+ end
72
+
73
+ module Nl0
74
+ def eol
75
+ elements[2]
76
+ end
77
+ end
78
+
79
+ def _nt_nl
80
+ start_index = index
81
+ if node_cache[:nl].has_key?(index)
82
+ cached = node_cache[:nl][index]
83
+ if cached
84
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
85
+ @index = cached.interval.end
86
+ end
87
+ return cached
88
+ end
89
+
90
+ s0, i0 = [], index
91
+ loop do
92
+ i1, s1 = index, []
93
+ r3 = _nt_ws
94
+ if r3
95
+ r2 = r3
96
+ else
97
+ r2 = instantiate_node(SyntaxNode,input, index...index)
98
+ end
99
+ s1 << r2
100
+ if r2
101
+ r5 = _nt_comment
102
+ if r5
103
+ r4 = r5
104
+ else
105
+ r4 = instantiate_node(SyntaxNode,input, index...index)
106
+ end
107
+ s1 << r4
108
+ if r4
109
+ r6 = _nt_eol
110
+ s1 << r6
111
+ end
112
+ end
113
+ if s1.last
114
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
115
+ r1.extend(Nl0)
116
+ else
117
+ @index = i1
118
+ r1 = nil
119
+ end
120
+ if r1
121
+ s0 << r1
122
+ else
123
+ break
124
+ end
125
+ end
126
+ if s0.empty?
127
+ @index = i0
128
+ r0 = nil
129
+ else
130
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
131
+ end
132
+
133
+ node_cache[:nl][start_index] = r0
134
+
135
+ r0
136
+ end
137
+
138
+ def _nt_ws
139
+ start_index = index
140
+ if node_cache[:ws].has_key?(index)
141
+ cached = node_cache[:ws][index]
142
+ if cached
143
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
144
+ @index = cached.interval.end
145
+ end
146
+ return cached
147
+ end
148
+
149
+ s0, i0 = [], index
150
+ loop do
151
+ if has_terminal?('\G[ \\t\\f]', true, index)
152
+ r1 = true
153
+ @index += 1
154
+ else
155
+ r1 = nil
156
+ end
157
+ if r1
158
+ s0 << r1
159
+ else
160
+ break
161
+ end
162
+ end
163
+ if s0.empty?
164
+ @index = i0
165
+ r0 = nil
166
+ else
167
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
168
+ end
169
+
170
+ node_cache[:ws][start_index] = r0
171
+
172
+ r0
173
+ end
174
+
175
+ module Linebreak0
176
+ end
177
+
178
+ def _nt_linebreak
179
+ start_index = index
180
+ if node_cache[:linebreak].has_key?(index)
181
+ cached = node_cache[:linebreak][index]
182
+ if cached
183
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
184
+ @index = cached.interval.end
185
+ end
186
+ return cached
187
+ end
188
+
189
+ i0 = index
190
+ i1, s1 = index, []
191
+ if has_terminal?("\r", false, index)
192
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
193
+ @index += 1
194
+ else
195
+ terminal_parse_failure("\r")
196
+ r2 = nil
197
+ end
198
+ s1 << r2
199
+ if r2
200
+ if has_terminal?("\n", false, index)
201
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
202
+ @index += 1
203
+ else
204
+ terminal_parse_failure("\n")
205
+ r4 = nil
206
+ end
207
+ if r4
208
+ r3 = r4
209
+ else
210
+ r3 = instantiate_node(SyntaxNode,input, index...index)
211
+ end
212
+ s1 << r3
213
+ end
214
+ if s1.last
215
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
216
+ r1.extend(Linebreak0)
217
+ else
218
+ @index = i1
219
+ r1 = nil
220
+ end
221
+ if r1
222
+ r0 = r1
223
+ else
224
+ if has_terminal?("\n", false, index)
225
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
226
+ @index += 1
227
+ else
228
+ terminal_parse_failure("\n")
229
+ r5 = nil
230
+ end
231
+ if r5
232
+ r0 = r5
233
+ else
234
+ @index = i0
235
+ r0 = nil
236
+ end
237
+ end
238
+
239
+ node_cache[:linebreak][start_index] = r0
240
+
241
+ r0
242
+ end
243
+
244
+ module Eol0
245
+ def linebreak
246
+ elements[0]
247
+ end
248
+
249
+ end
250
+
251
+ def _nt_eol
252
+ start_index = index
253
+ if node_cache[:eol].has_key?(index)
254
+ cached = node_cache[:eol][index]
255
+ if cached
256
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
257
+ @index = cached.interval.end
258
+ end
259
+ return cached
260
+ end
261
+
262
+ i0, s0 = index, []
263
+ r1 = _nt_linebreak
264
+ s0 << r1
265
+ if r1
266
+ i2 = index
267
+ r3 = _nt_ws
268
+ if r3
269
+ r2 = nil
270
+ else
271
+ @index = i2
272
+ r2 = instantiate_node(SyntaxNode,input, index...index)
273
+ end
274
+ s0 << r2
275
+ end
276
+ if s0.last
277
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
278
+ r0.extend(Eol0)
279
+ else
280
+ @index = i0
281
+ r0 = nil
282
+ end
283
+
284
+ node_cache[:eol][start_index] = r0
285
+
286
+ r0
287
+ end
288
+
289
+ module Comment0
290
+ def text
291
+ elements[1]
292
+ end
293
+ end
294
+
295
+ def _nt_comment
296
+ start_index = index
297
+ if node_cache[:comment].has_key?(index)
298
+ cached = node_cache[:comment][index]
299
+ if cached
300
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
301
+ @index = cached.interval.end
302
+ end
303
+ return cached
304
+ end
305
+
306
+ i0, s0 = index, []
307
+ if has_terminal?('//', false, index)
308
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 2))
309
+ @index += 2
310
+ else
311
+ terminal_parse_failure('//')
312
+ r1 = nil
313
+ end
314
+ s0 << r1
315
+ if r1
316
+ r2 = _nt_text
317
+ s0 << r2
318
+ end
319
+ if s0.last
320
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
321
+ r0.extend(Comment0)
322
+ else
323
+ @index = i0
324
+ r0 = nil
325
+ end
326
+
327
+ node_cache[:comment][start_index] = r0
328
+
329
+ r0
330
+ end
331
+
332
+ module Number0
333
+ end
334
+
335
+ module Number1
336
+ def value
337
+ text_value.to_i
338
+ end
339
+ end
340
+
341
+ def _nt_number
342
+ start_index = index
343
+ if node_cache[:number].has_key?(index)
344
+ cached = node_cache[:number][index]
345
+ if cached
346
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
347
+ @index = cached.interval.end
348
+ end
349
+ return cached
350
+ end
351
+
352
+ i0 = index
353
+ i1, s1 = index, []
354
+ s2, i2 = [], index
355
+ loop do
356
+ if has_terminal?('\G[1-9]', true, index)
357
+ r3 = true
358
+ @index += 1
359
+ else
360
+ r3 = nil
361
+ end
362
+ if r3
363
+ s2 << r3
364
+ else
365
+ break
366
+ end
367
+ end
368
+ if s2.empty?
369
+ @index = i2
370
+ r2 = nil
371
+ else
372
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
373
+ end
374
+ s1 << r2
375
+ if r2
376
+ s4, i4 = [], index
377
+ loop do
378
+ if has_terminal?('\G[0-9]', true, index)
379
+ r5 = true
380
+ @index += 1
381
+ else
382
+ r5 = nil
383
+ end
384
+ if r5
385
+ s4 << r5
386
+ else
387
+ break
388
+ end
389
+ end
390
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
391
+ s1 << r4
392
+ end
393
+ if s1.last
394
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
395
+ r1.extend(Number0)
396
+ else
397
+ @index = i1
398
+ r1 = nil
399
+ end
400
+ if r1
401
+ r0 = r1
402
+ r0.extend(Number1)
403
+ else
404
+ if has_terminal?('0', false, index)
405
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
406
+ @index += 1
407
+ else
408
+ terminal_parse_failure('0')
409
+ r6 = nil
410
+ end
411
+ if r6
412
+ r0 = r6
413
+ r0.extend(Number1)
414
+ else
415
+ @index = i0
416
+ r0 = nil
417
+ end
418
+ end
419
+
420
+ node_cache[:number][start_index] = r0
421
+
422
+ r0
423
+ end
424
+
425
+ module And0
426
+ end
427
+
428
+ module And1
429
+ def ws1
430
+ elements[1]
431
+ end
432
+
433
+ def ws2
434
+ elements[3]
435
+ end
436
+ end
437
+
438
+ module And2
439
+ end
440
+
441
+ def _nt_and
442
+ start_index = index
443
+ if node_cache[:and].has_key?(index)
444
+ cached = node_cache[:and][index]
445
+ if cached
446
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
447
+ @index = cached.interval.end
448
+ end
449
+ return cached
450
+ end
451
+
452
+ i0 = index
453
+ i1, s1 = index, []
454
+ i3, s3 = index, []
455
+ r5 = _nt_ws
456
+ if r5
457
+ r4 = r5
458
+ else
459
+ r4 = instantiate_node(SyntaxNode,input, index...index)
460
+ end
461
+ s3 << r4
462
+ if r4
463
+ if has_terminal?(',', false, index)
464
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
465
+ @index += 1
466
+ else
467
+ terminal_parse_failure(',')
468
+ r6 = nil
469
+ end
470
+ s3 << r6
471
+ end
472
+ if s3.last
473
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
474
+ r3.extend(And0)
475
+ else
476
+ @index = i3
477
+ r3 = nil
478
+ end
479
+ if r3
480
+ r2 = r3
481
+ else
482
+ r2 = instantiate_node(SyntaxNode,input, index...index)
483
+ end
484
+ s1 << r2
485
+ if r2
486
+ r7 = _nt_ws
487
+ s1 << r7
488
+ if r7
489
+ if has_terminal?('and', false, index)
490
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 3))
491
+ @index += 3
492
+ else
493
+ terminal_parse_failure('and')
494
+ r8 = nil
495
+ end
496
+ s1 << r8
497
+ if r8
498
+ r9 = _nt_ws
499
+ s1 << r9
500
+ end
501
+ end
502
+ end
503
+ if s1.last
504
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
505
+ r1.extend(And1)
506
+ else
507
+ @index = i1
508
+ r1 = nil
509
+ end
510
+ if r1
511
+ r0 = r1
512
+ else
513
+ i10, s10 = index, []
514
+ r12 = _nt_ws
515
+ if r12
516
+ r11 = r12
517
+ else
518
+ r11 = instantiate_node(SyntaxNode,input, index...index)
519
+ end
520
+ s10 << r11
521
+ if r11
522
+ if has_terminal?(',', false, index)
523
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
524
+ @index += 1
525
+ else
526
+ terminal_parse_failure(',')
527
+ r13 = nil
528
+ end
529
+ s10 << r13
530
+ if r13
531
+ r15 = _nt_ws
532
+ if r15
533
+ r14 = r15
534
+ else
535
+ r14 = instantiate_node(SyntaxNode,input, index...index)
536
+ end
537
+ s10 << r14
538
+ end
539
+ end
540
+ if s10.last
541
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
542
+ r10.extend(And2)
543
+ else
544
+ @index = i10
545
+ r10 = nil
546
+ end
547
+ if r10
548
+ r0 = r10
549
+ else
550
+ @index = i0
551
+ r0 = nil
552
+ end
553
+ end
554
+
555
+ node_cache[:and][start_index] = r0
556
+
557
+ r0
558
+ end
559
+
560
+ def _nt_reserved_word
561
+ start_index = index
562
+ if node_cache[:reserved_word].has_key?(index)
563
+ cached = node_cache[:reserved_word][index]
564
+ if cached
565
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
566
+ @index = cached.interval.end
567
+ end
568
+ return cached
569
+ end
570
+
571
+ i0 = index
572
+ if has_terminal?('and', false, index)
573
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 3))
574
+ @index += 3
575
+ else
576
+ terminal_parse_failure('and')
577
+ r1 = nil
578
+ end
579
+ if r1
580
+ r0 = r1
581
+ else
582
+ if has_terminal?('within', false, index)
583
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 6))
584
+ @index += 6
585
+ else
586
+ terminal_parse_failure('within')
587
+ r2 = nil
588
+ end
589
+ if r2
590
+ r0 = r2
591
+ else
592
+ if has_terminal?('over', false, index)
593
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 4))
594
+ @index += 4
595
+ else
596
+ terminal_parse_failure('over')
597
+ r3 = nil
598
+ end
599
+ if r3
600
+ r0 = r3
601
+ else
602
+ @index = i0
603
+ r0 = nil
604
+ end
605
+ end
606
+ end
607
+
608
+ node_cache[:reserved_word][start_index] = r0
609
+
610
+ r0
611
+ end
612
+
613
+ module Id0
614
+ def reserved_word
615
+ elements[0]
616
+ end
617
+
618
+ def ws
619
+ elements[1]
620
+ end
621
+ end
622
+
623
+ module Id1
624
+ end
625
+
626
+ def _nt_id
627
+ start_index = index
628
+ if node_cache[:id].has_key?(index)
629
+ cached = node_cache[:id][index]
630
+ if cached
631
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
632
+ @index = cached.interval.end
633
+ end
634
+ return cached
635
+ end
636
+
637
+ i0, s0 = index, []
638
+ i1 = index
639
+ i2, s2 = index, []
640
+ r3 = _nt_reserved_word
641
+ s2 << r3
642
+ if r3
643
+ r4 = _nt_ws
644
+ s2 << r4
645
+ end
646
+ if s2.last
647
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
648
+ r2.extend(Id0)
649
+ else
650
+ @index = i2
651
+ r2 = nil
652
+ end
653
+ if r2
654
+ r1 = nil
655
+ else
656
+ @index = i1
657
+ r1 = instantiate_node(SyntaxNode,input, index...index)
658
+ end
659
+ s0 << r1
660
+ if r1
661
+ if has_terminal?('\G[a-zA-Z_]', true, index)
662
+ r5 = true
663
+ @index += 1
664
+ else
665
+ r5 = nil
666
+ end
667
+ s0 << r5
668
+ if r5
669
+ s6, i6 = [], index
670
+ loop do
671
+ if has_terminal?('\G[a-zA-Z_0-9=]', true, index)
672
+ r7 = true
673
+ @index += 1
674
+ else
675
+ r7 = nil
676
+ end
677
+ if r7
678
+ s6 << r7
679
+ else
680
+ break
681
+ end
682
+ end
683
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
684
+ s0 << r6
685
+ end
686
+ end
687
+ if s0.last
688
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
689
+ r0.extend(Id1)
690
+ else
691
+ @index = i0
692
+ r0 = nil
693
+ end
694
+
695
+ node_cache[:id][start_index] = r0
696
+
697
+ r0
698
+ end
699
+
700
+ module Duration0
701
+ def number
702
+ elements[0]
703
+ end
704
+
705
+ def time_unit
706
+ elements[2]
707
+ end
708
+ end
709
+
710
+ module Duration1
711
+ def seconds
712
+ CEML.dur(number.text_value.to_f, time_unit.text_value)
713
+ end
714
+ end
715
+
716
+ def _nt_duration
717
+ start_index = index
718
+ if node_cache[:duration].has_key?(index)
719
+ cached = node_cache[:duration][index]
720
+ if cached
721
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
722
+ @index = cached.interval.end
723
+ end
724
+ return cached
725
+ end
726
+
727
+ i0, s0 = index, []
728
+ r1 = _nt_number
729
+ s0 << r1
730
+ if r1
731
+ r3 = _nt_ws
732
+ if r3
733
+ r2 = r3
734
+ else
735
+ r2 = instantiate_node(SyntaxNode,input, index...index)
736
+ end
737
+ s0 << r2
738
+ if r2
739
+ i4 = index
740
+ if has_terminal?('seconds', false, index)
741
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 7))
742
+ @index += 7
743
+ else
744
+ terminal_parse_failure('seconds')
745
+ r5 = nil
746
+ end
747
+ if r5
748
+ r4 = r5
749
+ else
750
+ if has_terminal?('second', false, index)
751
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 6))
752
+ @index += 6
753
+ else
754
+ terminal_parse_failure('second')
755
+ r6 = nil
756
+ end
757
+ if r6
758
+ r4 = r6
759
+ else
760
+ if has_terminal?('s', false, index)
761
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
762
+ @index += 1
763
+ else
764
+ terminal_parse_failure('s')
765
+ r7 = nil
766
+ end
767
+ if r7
768
+ r4 = r7
769
+ else
770
+ if has_terminal?('minutes', false, index)
771
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 7))
772
+ @index += 7
773
+ else
774
+ terminal_parse_failure('minutes')
775
+ r8 = nil
776
+ end
777
+ if r8
778
+ r4 = r8
779
+ else
780
+ if has_terminal?('minute', false, index)
781
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 6))
782
+ @index += 6
783
+ else
784
+ terminal_parse_failure('minute')
785
+ r9 = nil
786
+ end
787
+ if r9
788
+ r4 = r9
789
+ else
790
+ if has_terminal?('min', false, index)
791
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 3))
792
+ @index += 3
793
+ else
794
+ terminal_parse_failure('min')
795
+ r10 = nil
796
+ end
797
+ if r10
798
+ r4 = r10
799
+ else
800
+ if has_terminal?('hours', false, index)
801
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 5))
802
+ @index += 5
803
+ else
804
+ terminal_parse_failure('hours')
805
+ r11 = nil
806
+ end
807
+ if r11
808
+ r4 = r11
809
+ else
810
+ if has_terminal?('hour', false, index)
811
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 4))
812
+ @index += 4
813
+ else
814
+ terminal_parse_failure('hour')
815
+ r12 = nil
816
+ end
817
+ if r12
818
+ r4 = r12
819
+ else
820
+ if has_terminal?('hr', false, index)
821
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 2))
822
+ @index += 2
823
+ else
824
+ terminal_parse_failure('hr')
825
+ r13 = nil
826
+ end
827
+ if r13
828
+ r4 = r13
829
+ else
830
+ if has_terminal?('h', false, index)
831
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
832
+ @index += 1
833
+ else
834
+ terminal_parse_failure('h')
835
+ r14 = nil
836
+ end
837
+ if r14
838
+ r4 = r14
839
+ else
840
+ @index = i4
841
+ r4 = nil
842
+ end
843
+ end
844
+ end
845
+ end
846
+ end
847
+ end
848
+ end
849
+ end
850
+ end
851
+ end
852
+ s0 << r4
853
+ end
854
+ end
855
+ if s0.last
856
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
857
+ r0.extend(Duration0)
858
+ r0.extend(Duration1)
859
+ else
860
+ @index = i0
861
+ r0 = nil
862
+ end
863
+
864
+ node_cache[:duration][start_index] = r0
865
+
866
+ r0
867
+ end
868
+
869
+ module Distance0
870
+ def number
871
+ elements[0]
872
+ end
873
+
874
+ def distance_unit
875
+ elements[2]
876
+ end
877
+ end
878
+
879
+ module Distance1
880
+ def meters
881
+ number.text_value.to_f * case distance_unit.text_value
882
+ when /^mi/; 1600; when /^k/; 1000; when /^m/; 1;
883
+ when /^f/; 0.35; when /^b/; 200; else 1; end
884
+ end
885
+ end
886
+
887
+ def _nt_distance
888
+ start_index = index
889
+ if node_cache[:distance].has_key?(index)
890
+ cached = node_cache[:distance][index]
891
+ if cached
892
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
893
+ @index = cached.interval.end
894
+ end
895
+ return cached
896
+ end
897
+
898
+ i0, s0 = index, []
899
+ r1 = _nt_number
900
+ s0 << r1
901
+ if r1
902
+ r3 = _nt_ws
903
+ if r3
904
+ r2 = r3
905
+ else
906
+ r2 = instantiate_node(SyntaxNode,input, index...index)
907
+ end
908
+ s0 << r2
909
+ if r2
910
+ i4 = index
911
+ if has_terminal?('miles', false, index)
912
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 5))
913
+ @index += 5
914
+ else
915
+ terminal_parse_failure('miles')
916
+ r5 = nil
917
+ end
918
+ if r5
919
+ r4 = r5
920
+ else
921
+ if has_terminal?('mile', false, index)
922
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 4))
923
+ @index += 4
924
+ else
925
+ terminal_parse_failure('mile')
926
+ r6 = nil
927
+ end
928
+ if r6
929
+ r4 = r6
930
+ else
931
+ if has_terminal?('mi', false, index)
932
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
933
+ @index += 2
934
+ else
935
+ terminal_parse_failure('mi')
936
+ r7 = nil
937
+ end
938
+ if r7
939
+ r4 = r7
940
+ else
941
+ if has_terminal?('km', false, index)
942
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 2))
943
+ @index += 2
944
+ else
945
+ terminal_parse_failure('km')
946
+ r8 = nil
947
+ end
948
+ if r8
949
+ r4 = r8
950
+ else
951
+ if has_terminal?('kilometers', false, index)
952
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 10))
953
+ @index += 10
954
+ else
955
+ terminal_parse_failure('kilometers')
956
+ r9 = nil
957
+ end
958
+ if r9
959
+ r4 = r9
960
+ else
961
+ if has_terminal?('k', false, index)
962
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
963
+ @index += 1
964
+ else
965
+ terminal_parse_failure('k')
966
+ r10 = nil
967
+ end
968
+ if r10
969
+ r4 = r10
970
+ else
971
+ if has_terminal?('meters', false, index)
972
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 6))
973
+ @index += 6
974
+ else
975
+ terminal_parse_failure('meters')
976
+ r11 = nil
977
+ end
978
+ if r11
979
+ r4 = r11
980
+ else
981
+ if has_terminal?('m', false, index)
982
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
983
+ @index += 1
984
+ else
985
+ terminal_parse_failure('m')
986
+ r12 = nil
987
+ end
988
+ if r12
989
+ r4 = r12
990
+ else
991
+ if has_terminal?('ft', false, index)
992
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 2))
993
+ @index += 2
994
+ else
995
+ terminal_parse_failure('ft')
996
+ r13 = nil
997
+ end
998
+ if r13
999
+ r4 = r13
1000
+ else
1001
+ if has_terminal?('feet', false, index)
1002
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 4))
1003
+ @index += 4
1004
+ else
1005
+ terminal_parse_failure('feet')
1006
+ r14 = nil
1007
+ end
1008
+ if r14
1009
+ r4 = r14
1010
+ else
1011
+ if has_terminal?('f', false, index)
1012
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
1013
+ @index += 1
1014
+ else
1015
+ terminal_parse_failure('f')
1016
+ r15 = nil
1017
+ end
1018
+ if r15
1019
+ r4 = r15
1020
+ else
1021
+ if has_terminal?('blocks', false, index)
1022
+ r16 = instantiate_node(SyntaxNode,input, index...(index + 6))
1023
+ @index += 6
1024
+ else
1025
+ terminal_parse_failure('blocks')
1026
+ r16 = nil
1027
+ end
1028
+ if r16
1029
+ r4 = r16
1030
+ else
1031
+ if has_terminal?('block', false, index)
1032
+ r17 = instantiate_node(SyntaxNode,input, index...(index + 5))
1033
+ @index += 5
1034
+ else
1035
+ terminal_parse_failure('block')
1036
+ r17 = nil
1037
+ end
1038
+ if r17
1039
+ r4 = r17
1040
+ else
1041
+ @index = i4
1042
+ r4 = nil
1043
+ end
1044
+ end
1045
+ end
1046
+ end
1047
+ end
1048
+ end
1049
+ end
1050
+ end
1051
+ end
1052
+ end
1053
+ end
1054
+ end
1055
+ end
1056
+ s0 << r4
1057
+ end
1058
+ end
1059
+ if s0.last
1060
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1061
+ r0.extend(Distance0)
1062
+ r0.extend(Distance1)
1063
+ else
1064
+ @index = i0
1065
+ r0 = nil
1066
+ end
1067
+
1068
+ node_cache[:distance][start_index] = r0
1069
+
1070
+ r0
1071
+ end
1072
+
1073
+ module Range0
1074
+ def min
1075
+ elements[0]
1076
+ end
1077
+
1078
+ def max
1079
+ elements[2]
1080
+ end
1081
+ end
1082
+
1083
+ module Range1
1084
+ def floor
1085
+ elements[0]
1086
+ end
1087
+
1088
+ end
1089
+
1090
+ module Range2
1091
+ def value
1092
+ case text_value
1093
+ when 'an', 'a', 'one', 'the' then (1..1)
1094
+ when 'some', 'all' then (1..10000)
1095
+ when 'several' then (3..10000)
1096
+ when 'many' then (5..10000)
1097
+ when /^\d+\+$/ then (floor.value..10000)
1098
+ when /^\d+\-\d+$/ then (min.value..max.value)
1099
+ when /^\d+$/ then (floor.value..floor.value)
1100
+ else raise 'hell'
1101
+ end
1102
+ end
1103
+ end
1104
+
1105
+ def _nt_range
1106
+ start_index = index
1107
+ if node_cache[:range].has_key?(index)
1108
+ cached = node_cache[:range][index]
1109
+ if cached
1110
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1111
+ @index = cached.interval.end
1112
+ end
1113
+ return cached
1114
+ end
1115
+
1116
+ i0 = index
1117
+ i1, s1 = index, []
1118
+ r2 = _nt_number
1119
+ s1 << r2
1120
+ if r2
1121
+ if has_terminal?('-', false, index)
1122
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1123
+ @index += 1
1124
+ else
1125
+ terminal_parse_failure('-')
1126
+ r3 = nil
1127
+ end
1128
+ s1 << r3
1129
+ if r3
1130
+ r4 = _nt_number
1131
+ s1 << r4
1132
+ end
1133
+ end
1134
+ if s1.last
1135
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1136
+ r1.extend(Range0)
1137
+ else
1138
+ @index = i1
1139
+ r1 = nil
1140
+ end
1141
+ if r1
1142
+ r0 = r1
1143
+ r0.extend(Range2)
1144
+ else
1145
+ i5, s5 = index, []
1146
+ r6 = _nt_number
1147
+ s5 << r6
1148
+ if r6
1149
+ if has_terminal?('+', false, index)
1150
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
1151
+ @index += 1
1152
+ else
1153
+ terminal_parse_failure('+')
1154
+ r8 = nil
1155
+ end
1156
+ if r8
1157
+ r7 = r8
1158
+ else
1159
+ r7 = instantiate_node(SyntaxNode,input, index...index)
1160
+ end
1161
+ s5 << r7
1162
+ end
1163
+ if s5.last
1164
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1165
+ r5.extend(Range1)
1166
+ else
1167
+ @index = i5
1168
+ r5 = nil
1169
+ end
1170
+ if r5
1171
+ r0 = r5
1172
+ r0.extend(Range2)
1173
+ else
1174
+ if has_terminal?('an', false, index)
1175
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 2))
1176
+ @index += 2
1177
+ else
1178
+ terminal_parse_failure('an')
1179
+ r9 = nil
1180
+ end
1181
+ if r9
1182
+ r0 = r9
1183
+ r0.extend(Range2)
1184
+ else
1185
+ if has_terminal?('a', false, index)
1186
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
1187
+ @index += 1
1188
+ else
1189
+ terminal_parse_failure('a')
1190
+ r10 = nil
1191
+ end
1192
+ if r10
1193
+ r0 = r10
1194
+ r0.extend(Range2)
1195
+ else
1196
+ if has_terminal?('one', false, index)
1197
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 3))
1198
+ @index += 3
1199
+ else
1200
+ terminal_parse_failure('one')
1201
+ r11 = nil
1202
+ end
1203
+ if r11
1204
+ r0 = r11
1205
+ r0.extend(Range2)
1206
+ else
1207
+ if has_terminal?('the', false, index)
1208
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 3))
1209
+ @index += 3
1210
+ else
1211
+ terminal_parse_failure('the')
1212
+ r12 = nil
1213
+ end
1214
+ if r12
1215
+ r0 = r12
1216
+ r0.extend(Range2)
1217
+ else
1218
+ if has_terminal?('some', false, index)
1219
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 4))
1220
+ @index += 4
1221
+ else
1222
+ terminal_parse_failure('some')
1223
+ r13 = nil
1224
+ end
1225
+ if r13
1226
+ r0 = r13
1227
+ r0.extend(Range2)
1228
+ else
1229
+ if has_terminal?('several', false, index)
1230
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 7))
1231
+ @index += 7
1232
+ else
1233
+ terminal_parse_failure('several')
1234
+ r14 = nil
1235
+ end
1236
+ if r14
1237
+ r0 = r14
1238
+ r0.extend(Range2)
1239
+ else
1240
+ if has_terminal?('many', false, index)
1241
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 4))
1242
+ @index += 4
1243
+ else
1244
+ terminal_parse_failure('many')
1245
+ r15 = nil
1246
+ end
1247
+ if r15
1248
+ r0 = r15
1249
+ r0.extend(Range2)
1250
+ else
1251
+ if has_terminal?('all', false, index)
1252
+ r16 = instantiate_node(SyntaxNode,input, index...(index + 3))
1253
+ @index += 3
1254
+ else
1255
+ terminal_parse_failure('all')
1256
+ r16 = nil
1257
+ end
1258
+ if r16
1259
+ r0 = r16
1260
+ r0.extend(Range2)
1261
+ else
1262
+ @index = i0
1263
+ r0 = nil
1264
+ end
1265
+ end
1266
+ end
1267
+ end
1268
+ end
1269
+ end
1270
+ end
1271
+ end
1272
+ end
1273
+ end
1274
+
1275
+ node_cache[:range][start_index] = r0
1276
+
1277
+ r0
1278
+ end
1279
+
1280
+ module Rolemap0
1281
+ def and
1282
+ elements[0]
1283
+ end
1284
+
1285
+ def mapped_role
1286
+ elements[1]
1287
+ end
1288
+ end
1289
+
1290
+ module Rolemap1
1291
+ def mapped_role
1292
+ elements[0]
1293
+ end
1294
+
1295
+ def more
1296
+ elements[1]
1297
+ end
1298
+ end
1299
+
1300
+ module Rolemap2
1301
+ def all; [mapped_role] + more.elements.map(&:mapped_role); end
1302
+ def value; all.map(&:value); end
1303
+ end
1304
+
1305
+ def _nt_rolemap
1306
+ start_index = index
1307
+ if node_cache[:rolemap].has_key?(index)
1308
+ cached = node_cache[:rolemap][index]
1309
+ if cached
1310
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1311
+ @index = cached.interval.end
1312
+ end
1313
+ return cached
1314
+ end
1315
+
1316
+ i0, s0 = index, []
1317
+ r1 = _nt_mapped_role
1318
+ s0 << r1
1319
+ if r1
1320
+ s2, i2 = [], index
1321
+ loop do
1322
+ i3, s3 = index, []
1323
+ r4 = _nt_and
1324
+ s3 << r4
1325
+ if r4
1326
+ r5 = _nt_mapped_role
1327
+ s3 << r5
1328
+ end
1329
+ if s3.last
1330
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1331
+ r3.extend(Rolemap0)
1332
+ else
1333
+ @index = i3
1334
+ r3 = nil
1335
+ end
1336
+ if r3
1337
+ s2 << r3
1338
+ else
1339
+ break
1340
+ end
1341
+ end
1342
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1343
+ s0 << r2
1344
+ end
1345
+ if s0.last
1346
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1347
+ r0.extend(Rolemap1)
1348
+ r0.extend(Rolemap2)
1349
+ else
1350
+ @index = i0
1351
+ r0 = nil
1352
+ end
1353
+
1354
+ node_cache[:rolemap][start_index] = r0
1355
+
1356
+ r0
1357
+ end
1358
+
1359
+ module MappedRole0
1360
+ def rolename
1361
+ elements[0]
1362
+ end
1363
+
1364
+ def ws1
1365
+ elements[1]
1366
+ end
1367
+
1368
+ def ws2
1369
+ elements[3]
1370
+ end
1371
+
1372
+ def target_role
1373
+ elements[4]
1374
+ end
1375
+ end
1376
+
1377
+ module MappedRole1
1378
+ def rolename
1379
+ elements[0]
1380
+ end
1381
+
1382
+ end
1383
+
1384
+ module MappedRole2
1385
+ def value
1386
+ {
1387
+ :from => rolename.text_value,
1388
+ :to => respond_to?(:target_role) && target_role.text_value || '*'
1389
+ }
1390
+ end
1391
+ end
1392
+
1393
+ def _nt_mapped_role
1394
+ start_index = index
1395
+ if node_cache[:mapped_role].has_key?(index)
1396
+ cached = node_cache[:mapped_role][index]
1397
+ if cached
1398
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1399
+ @index = cached.interval.end
1400
+ end
1401
+ return cached
1402
+ end
1403
+
1404
+ i0 = index
1405
+ i1, s1 = index, []
1406
+ r2 = _nt_rolename
1407
+ s1 << r2
1408
+ if r2
1409
+ r3 = _nt_ws
1410
+ s1 << r3
1411
+ if r3
1412
+ if has_terminal?('as', false, index)
1413
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
1414
+ @index += 2
1415
+ else
1416
+ terminal_parse_failure('as')
1417
+ r4 = nil
1418
+ end
1419
+ s1 << r4
1420
+ if r4
1421
+ r5 = _nt_ws
1422
+ s1 << r5
1423
+ if r5
1424
+ r6 = _nt_rolename
1425
+ s1 << r6
1426
+ end
1427
+ end
1428
+ end
1429
+ end
1430
+ if s1.last
1431
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1432
+ r1.extend(MappedRole0)
1433
+ else
1434
+ @index = i1
1435
+ r1 = nil
1436
+ end
1437
+ if r1
1438
+ r0 = r1
1439
+ r0.extend(MappedRole2)
1440
+ else
1441
+ i7, s7 = index, []
1442
+ r8 = _nt_rolename
1443
+ s7 << r8
1444
+ if r8
1445
+ if has_terminal?('', false, index)
1446
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 0))
1447
+ @index += 0
1448
+ else
1449
+ terminal_parse_failure('')
1450
+ r9 = nil
1451
+ end
1452
+ s7 << r9
1453
+ end
1454
+ if s7.last
1455
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
1456
+ r7.extend(MappedRole1)
1457
+ else
1458
+ @index = i7
1459
+ r7 = nil
1460
+ end
1461
+ if r7
1462
+ r0 = r7
1463
+ r0.extend(MappedRole2)
1464
+ else
1465
+ @index = i0
1466
+ r0 = nil
1467
+ end
1468
+ end
1469
+
1470
+ node_cache[:mapped_role][start_index] = r0
1471
+
1472
+ r0
1473
+ end
1474
+
1475
+ module Roles0
1476
+ def and
1477
+ elements[0]
1478
+ end
1479
+
1480
+ def role
1481
+ elements[1]
1482
+ end
1483
+ end
1484
+
1485
+ module Roles1
1486
+ def role
1487
+ elements[0]
1488
+ end
1489
+
1490
+ def more
1491
+ elements[1]
1492
+ end
1493
+ end
1494
+
1495
+ module Roles2
1496
+ def list
1497
+ [role] + more.elements.map{ |e| e.role }
1498
+ end
1499
+
1500
+ def names; list.map{ |r| r.name.to_sym }; end
1501
+ def [](x); list.detect{ |r| r.name.to_sym == x }; end
1502
+ def min; list.map(&:min).inject(0, &:+); end
1503
+ def max; list.map(&:max).inject(0, &:+); end
1504
+ end
1505
+
1506
+ def _nt_roles
1507
+ start_index = index
1508
+ if node_cache[:roles].has_key?(index)
1509
+ cached = node_cache[:roles][index]
1510
+ if cached
1511
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1512
+ @index = cached.interval.end
1513
+ end
1514
+ return cached
1515
+ end
1516
+
1517
+ i0, s0 = index, []
1518
+ r1 = _nt_role
1519
+ s0 << r1
1520
+ if r1
1521
+ s2, i2 = [], index
1522
+ loop do
1523
+ i3, s3 = index, []
1524
+ r4 = _nt_and
1525
+ s3 << r4
1526
+ if r4
1527
+ r5 = _nt_role
1528
+ s3 << r5
1529
+ end
1530
+ if s3.last
1531
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1532
+ r3.extend(Roles0)
1533
+ else
1534
+ @index = i3
1535
+ r3 = nil
1536
+ end
1537
+ if r3
1538
+ s2 << r3
1539
+ else
1540
+ break
1541
+ end
1542
+ end
1543
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1544
+ s0 << r2
1545
+ end
1546
+ if s0.last
1547
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1548
+ r0.extend(Roles1)
1549
+ r0.extend(Roles2)
1550
+ else
1551
+ @index = i0
1552
+ r0 = nil
1553
+ end
1554
+
1555
+ node_cache[:roles][start_index] = r0
1556
+
1557
+ r0
1558
+ end
1559
+
1560
+ def _nt_qualifier
1561
+ start_index = index
1562
+ if node_cache[:qualifier].has_key?(index)
1563
+ cached = node_cache[:qualifier][index]
1564
+ if cached
1565
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1566
+ @index = cached.interval.end
1567
+ end
1568
+ return cached
1569
+ end
1570
+
1571
+ r0 = _nt_id
1572
+
1573
+ node_cache[:qualifier][start_index] = r0
1574
+
1575
+ r0
1576
+ end
1577
+
1578
+ def _nt_rolename
1579
+ start_index = index
1580
+ if node_cache[:rolename].has_key?(index)
1581
+ cached = node_cache[:rolename][index]
1582
+ if cached
1583
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1584
+ @index = cached.interval.end
1585
+ end
1586
+ return cached
1587
+ end
1588
+
1589
+ r0 = _nt_id
1590
+
1591
+ node_cache[:rolename][start_index] = r0
1592
+
1593
+ r0
1594
+ end
1595
+
1596
+ module Role0
1597
+ def rolename
1598
+ elements[0]
1599
+ end
1600
+
1601
+ end
1602
+
1603
+ module Role1
1604
+ def range
1605
+ elements[0]
1606
+ end
1607
+
1608
+ def ws1
1609
+ elements[1]
1610
+ end
1611
+
1612
+ def qualifier
1613
+ elements[2]
1614
+ end
1615
+
1616
+ def ws2
1617
+ elements[3]
1618
+ end
1619
+
1620
+ def rolename
1621
+ elements[4]
1622
+ end
1623
+ end
1624
+
1625
+ module Role2
1626
+ def range
1627
+ elements[0]
1628
+ end
1629
+
1630
+ def ws
1631
+ elements[1]
1632
+ end
1633
+
1634
+ def rolename
1635
+ elements[2]
1636
+ end
1637
+ end
1638
+
1639
+ module Role3
1640
+ def qualifier
1641
+ elements[0]
1642
+ end
1643
+
1644
+ def ws
1645
+ elements[1]
1646
+ end
1647
+
1648
+ def rolename
1649
+ elements[2]
1650
+ end
1651
+ end
1652
+
1653
+ module Role4
1654
+ def name; if respond_to? :rolename then rolename.text_value else text_value end; end
1655
+ def min
1656
+ return range.value.min if respond_to? :range
1657
+ name =~ /s$/ ? 2 : 1
1658
+ end
1659
+ def max
1660
+ return range.value.max if respond_to? :range
1661
+ name =~ /s$/ ? 10000 : 1
1662
+ end
1663
+ def qualifiers
1664
+ return [qualifier.text_value] if respond_to? :qualifier
1665
+ return []
1666
+ end
1667
+ end
1668
+
1669
+ def _nt_role
1670
+ start_index = index
1671
+ if node_cache[:role].has_key?(index)
1672
+ cached = node_cache[:role][index]
1673
+ if cached
1674
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1675
+ @index = cached.interval.end
1676
+ end
1677
+ return cached
1678
+ end
1679
+
1680
+ i0 = index
1681
+ i1, s1 = index, []
1682
+ r2 = _nt_rolename
1683
+ s1 << r2
1684
+ if r2
1685
+ i3 = index
1686
+ r4 = _nt_and
1687
+ if r4
1688
+ @index = i3
1689
+ r3 = instantiate_node(SyntaxNode,input, index...index)
1690
+ else
1691
+ r3 = nil
1692
+ end
1693
+ s1 << r3
1694
+ end
1695
+ if s1.last
1696
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1697
+ r1.extend(Role0)
1698
+ else
1699
+ @index = i1
1700
+ r1 = nil
1701
+ end
1702
+ if r1
1703
+ r0 = r1
1704
+ r0.extend(Role4)
1705
+ else
1706
+ i5, s5 = index, []
1707
+ r6 = _nt_range
1708
+ s5 << r6
1709
+ if r6
1710
+ r7 = _nt_ws
1711
+ s5 << r7
1712
+ if r7
1713
+ r8 = _nt_qualifier
1714
+ s5 << r8
1715
+ if r8
1716
+ r9 = _nt_ws
1717
+ s5 << r9
1718
+ if r9
1719
+ r10 = _nt_rolename
1720
+ s5 << r10
1721
+ end
1722
+ end
1723
+ end
1724
+ end
1725
+ if s5.last
1726
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1727
+ r5.extend(Role1)
1728
+ else
1729
+ @index = i5
1730
+ r5 = nil
1731
+ end
1732
+ if r5
1733
+ r0 = r5
1734
+ r0.extend(Role4)
1735
+ else
1736
+ i11, s11 = index, []
1737
+ r12 = _nt_range
1738
+ s11 << r12
1739
+ if r12
1740
+ r13 = _nt_ws
1741
+ s11 << r13
1742
+ if r13
1743
+ r14 = _nt_rolename
1744
+ s11 << r14
1745
+ end
1746
+ end
1747
+ if s11.last
1748
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
1749
+ r11.extend(Role2)
1750
+ else
1751
+ @index = i11
1752
+ r11 = nil
1753
+ end
1754
+ if r11
1755
+ r0 = r11
1756
+ r0.extend(Role4)
1757
+ else
1758
+ i15, s15 = index, []
1759
+ r16 = _nt_qualifier
1760
+ s15 << r16
1761
+ if r16
1762
+ r17 = _nt_ws
1763
+ s15 << r17
1764
+ if r17
1765
+ r18 = _nt_rolename
1766
+ s15 << r18
1767
+ end
1768
+ end
1769
+ if s15.last
1770
+ r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
1771
+ r15.extend(Role3)
1772
+ else
1773
+ @index = i15
1774
+ r15 = nil
1775
+ end
1776
+ if r15
1777
+ r0 = r15
1778
+ r0.extend(Role4)
1779
+ else
1780
+ r19 = _nt_rolename
1781
+ if r19
1782
+ r0 = r19
1783
+ r0.extend(Role4)
1784
+ else
1785
+ @index = i0
1786
+ r0 = nil
1787
+ end
1788
+ end
1789
+ end
1790
+ end
1791
+ end
1792
+
1793
+ node_cache[:role][start_index] = r0
1794
+
1795
+ r0
1796
+ end
1797
+
1798
+ end
1799
+
1800
+ class LexerParser < Treetop::Runtime::CompiledParser
1801
+ include Lexer
1802
+ end
1803
+
1804
+ end