ceml 0.7.13 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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