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,1130 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ module CEML
5
+ module Instructions
6
+ include Treetop::Runtime
7
+
8
+ def root
9
+ @root ||= :basic_statement
10
+ end
11
+
12
+ include Lexer
13
+
14
+ def _nt_basic_statement
15
+ start_index = index
16
+ if node_cache[:basic_statement].has_key?(index)
17
+ cached = node_cache[:basic_statement][index]
18
+ if cached
19
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
20
+ @index = cached.interval.end
21
+ end
22
+ return cached
23
+ end
24
+
25
+ i0 = index
26
+ r1 = _nt_ask_stmt
27
+ if r1
28
+ r0 = r1
29
+ else
30
+ r2 = _nt_tell_stmt
31
+ if r2
32
+ r0 = r2
33
+ else
34
+ r3 = _nt_assign_stmt
35
+ if r3
36
+ r0 = r3
37
+ else
38
+ r4 = _nt_record_stmt
39
+ if r4
40
+ r0 = r4
41
+ else
42
+ r5 = _nt_set_stmt
43
+ if r5
44
+ r0 = r5
45
+ else
46
+ r6 = _nt_pick_stmt
47
+ if r6
48
+ r0 = r6
49
+ else
50
+ r7 = _nt_seed_stmt
51
+ if r7
52
+ r0 = r7
53
+ else
54
+ r8 = _nt_sync_stmt
55
+ if r8
56
+ r0 = r8
57
+ else
58
+ r9 = _nt_replace_stmt
59
+ if r9
60
+ r0 = r9
61
+ else
62
+ r10 = _nt_release_stmt
63
+ if r10
64
+ r0 = r10
65
+ else
66
+ @index = i0
67
+ r0 = nil
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ node_cache[:basic_statement][start_index] = r0
80
+
81
+ r0
82
+ end
83
+
84
+ module InstructionStmt0
85
+ def later
86
+ elements[0]
87
+ end
88
+
89
+ def basic_statement
90
+ elements[1]
91
+ end
92
+ end
93
+
94
+ module InstructionStmt1
95
+ def delay
96
+ later.duration.seconds if respond_to? :later and not later.empty?
97
+ end
98
+
99
+ def bytecode
100
+ if delay
101
+ [[[role], :start_delay, delay], [[role], :complete_delay]] + elements[1].bytecode
102
+ else
103
+ elements[1].bytecode
104
+ end
105
+ end
106
+ end
107
+
108
+ def _nt_instruction_stmt
109
+ start_index = index
110
+ if node_cache[:instruction_stmt].has_key?(index)
111
+ cached = node_cache[:instruction_stmt][index]
112
+ if cached
113
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
114
+ @index = cached.interval.end
115
+ end
116
+ return cached
117
+ end
118
+
119
+ i0, s0 = index, []
120
+ r2 = _nt_later
121
+ if r2
122
+ r1 = r2
123
+ else
124
+ r1 = instantiate_node(SyntaxNode,input, index...index)
125
+ end
126
+ s0 << r1
127
+ if r1
128
+ r3 = _nt_basic_statement
129
+ s0 << r3
130
+ end
131
+ if s0.last
132
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
133
+ r0.extend(InstructionStmt0)
134
+ r0.extend(InstructionStmt1)
135
+ else
136
+ @index = i0
137
+ r0 = nil
138
+ end
139
+
140
+ node_cache[:instruction_stmt][start_index] = r0
141
+
142
+ r0
143
+ end
144
+
145
+ module Later0
146
+ def duration
147
+ elements[0]
148
+ end
149
+
150
+ def ws1
151
+ elements[1]
152
+ end
153
+
154
+ def ws2
155
+ elements[4]
156
+ end
157
+ end
158
+
159
+ def _nt_later
160
+ start_index = index
161
+ if node_cache[:later].has_key?(index)
162
+ cached = node_cache[:later][index]
163
+ if cached
164
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
165
+ @index = cached.interval.end
166
+ end
167
+ return cached
168
+ end
169
+
170
+ i0, s0 = index, []
171
+ r1 = _nt_duration
172
+ s0 << r1
173
+ if r1
174
+ r2 = _nt_ws
175
+ s0 << r2
176
+ if r2
177
+ if has_terminal?('later', false, index)
178
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 5))
179
+ @index += 5
180
+ else
181
+ terminal_parse_failure('later')
182
+ r3 = nil
183
+ end
184
+ s0 << r3
185
+ if r3
186
+ if has_terminal?(',', false, index)
187
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
188
+ @index += 1
189
+ else
190
+ terminal_parse_failure(',')
191
+ r5 = nil
192
+ end
193
+ if r5
194
+ r4 = r5
195
+ else
196
+ r4 = instantiate_node(SyntaxNode,input, index...index)
197
+ end
198
+ s0 << r4
199
+ if r4
200
+ r6 = _nt_ws
201
+ s0 << r6
202
+ end
203
+ end
204
+ end
205
+ end
206
+ if s0.last
207
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
208
+ r0.extend(Later0)
209
+ else
210
+ @index = i0
211
+ r0 = nil
212
+ end
213
+
214
+ node_cache[:later][start_index] = r0
215
+
216
+ r0
217
+ end
218
+
219
+ module SeedStmt0
220
+ def ws1
221
+ elements[1]
222
+ end
223
+
224
+ def varname
225
+ elements[2]
226
+ end
227
+
228
+ def ws2
229
+ elements[3]
230
+ end
231
+
232
+ def ws3
233
+ elements[5]
234
+ end
235
+
236
+ def rolemap
237
+ elements[6]
238
+ end
239
+ end
240
+
241
+ module SeedStmt1
242
+ def roles
243
+ rolemap.value.map do |x| x[:from].to_sym end
244
+ end
245
+ def bytecode
246
+ [[roles, :seed, {:target => varname.text_value, :rolemap => rolemap.value}]]
247
+ end
248
+ end
249
+
250
+ def _nt_seed_stmt
251
+ start_index = index
252
+ if node_cache[:seed_stmt].has_key?(index)
253
+ cached = node_cache[:seed_stmt][index]
254
+ if cached
255
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
256
+ @index = cached.interval.end
257
+ end
258
+ return cached
259
+ end
260
+
261
+ i0, s0 = index, []
262
+ if has_terminal?('seed', false, index)
263
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
264
+ @index += 4
265
+ else
266
+ terminal_parse_failure('seed')
267
+ r1 = nil
268
+ end
269
+ s0 << r1
270
+ if r1
271
+ r2 = _nt_ws
272
+ s0 << r2
273
+ if r2
274
+ r3 = _nt_id
275
+ s0 << r3
276
+ if r3
277
+ r4 = _nt_ws
278
+ s0 << r4
279
+ if r4
280
+ if has_terminal?('with', false, index)
281
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 4))
282
+ @index += 4
283
+ else
284
+ terminal_parse_failure('with')
285
+ r5 = nil
286
+ end
287
+ s0 << r5
288
+ if r5
289
+ r6 = _nt_ws
290
+ s0 << r6
291
+ if r6
292
+ r7 = _nt_rolemap
293
+ s0 << r7
294
+ end
295
+ end
296
+ end
297
+ end
298
+ end
299
+ end
300
+ if s0.last
301
+ r0 = instantiate_node(BasicInstruction,input, i0...index, s0)
302
+ r0.extend(SeedStmt0)
303
+ r0.extend(SeedStmt1)
304
+ else
305
+ @index = i0
306
+ r0 = nil
307
+ end
308
+
309
+ node_cache[:seed_stmt][start_index] = r0
310
+
311
+ r0
312
+ end
313
+
314
+ module RecordStmt0
315
+ def ws1
316
+ elements[1]
317
+ end
318
+
319
+ def id
320
+ elements[2]
321
+ end
322
+
323
+ def ws2
324
+ elements[3]
325
+ end
326
+
327
+ def varname
328
+ elements[4]
329
+ end
330
+ end
331
+
332
+ def _nt_record_stmt
333
+ start_index = index
334
+ if node_cache[:record_stmt].has_key?(index)
335
+ cached = node_cache[:record_stmt][index]
336
+ if cached
337
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
338
+ @index = cached.interval.end
339
+ end
340
+ return cached
341
+ end
342
+
343
+ i0, s0 = index, []
344
+ if has_terminal?('record', false, index)
345
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 6))
346
+ @index += 6
347
+ else
348
+ terminal_parse_failure('record')
349
+ r1 = nil
350
+ end
351
+ s0 << r1
352
+ if r1
353
+ r2 = _nt_ws
354
+ s0 << r2
355
+ if r2
356
+ r3 = _nt_id
357
+ s0 << r3
358
+ if r3
359
+ r4 = _nt_ws
360
+ s0 << r4
361
+ if r4
362
+ r5 = _nt_id
363
+ s0 << r5
364
+ end
365
+ end
366
+ end
367
+ end
368
+ if s0.last
369
+ r0 = instantiate_node(BasicInstruction,input, i0...index, s0)
370
+ r0.extend(RecordStmt0)
371
+ else
372
+ @index = i0
373
+ r0 = nil
374
+ end
375
+
376
+ node_cache[:record_stmt][start_index] = r0
377
+
378
+ r0
379
+ end
380
+
381
+ module TellStmt0
382
+ def ws
383
+ elements[1]
384
+ end
385
+
386
+ def id
387
+ elements[2]
388
+ end
389
+
390
+ def text
391
+ elements[5]
392
+ end
393
+ end
394
+
395
+ def _nt_tell_stmt
396
+ start_index = index
397
+ if node_cache[:tell_stmt].has_key?(index)
398
+ cached = node_cache[:tell_stmt][index]
399
+ if cached
400
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
401
+ @index = cached.interval.end
402
+ end
403
+ return cached
404
+ end
405
+
406
+ i0, s0 = index, []
407
+ if has_terminal?('tell', false, index)
408
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
409
+ @index += 4
410
+ else
411
+ terminal_parse_failure('tell')
412
+ r1 = nil
413
+ end
414
+ s0 << r1
415
+ if r1
416
+ r2 = _nt_ws
417
+ s0 << r2
418
+ if r2
419
+ r3 = _nt_id
420
+ s0 << r3
421
+ if r3
422
+ if has_terminal?(':', false, index)
423
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
424
+ @index += 1
425
+ else
426
+ terminal_parse_failure(':')
427
+ r4 = nil
428
+ end
429
+ s0 << r4
430
+ if r4
431
+ r6 = _nt_ws
432
+ if r6
433
+ r5 = r6
434
+ else
435
+ r5 = instantiate_node(SyntaxNode,input, index...index)
436
+ end
437
+ s0 << r5
438
+ if r5
439
+ r7 = _nt_text
440
+ s0 << r7
441
+ end
442
+ end
443
+ end
444
+ end
445
+ end
446
+ if s0.last
447
+ r0 = instantiate_node(BasicInstruction,input, i0...index, s0)
448
+ r0.extend(TellStmt0)
449
+ else
450
+ @index = i0
451
+ r0 = nil
452
+ end
453
+
454
+ node_cache[:tell_stmt][start_index] = r0
455
+
456
+ r0
457
+ end
458
+
459
+ module AssignStmt0
460
+ def ws
461
+ elements[1]
462
+ end
463
+
464
+ def id
465
+ elements[2]
466
+ end
467
+
468
+ def text
469
+ elements[5]
470
+ end
471
+ end
472
+
473
+ def _nt_assign_stmt
474
+ start_index = index
475
+ if node_cache[:assign_stmt].has_key?(index)
476
+ cached = node_cache[:assign_stmt][index]
477
+ if cached
478
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
479
+ @index = cached.interval.end
480
+ end
481
+ return cached
482
+ end
483
+
484
+ i0, s0 = index, []
485
+ if has_terminal?('assign', false, index)
486
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 6))
487
+ @index += 6
488
+ else
489
+ terminal_parse_failure('assign')
490
+ r1 = nil
491
+ end
492
+ s0 << r1
493
+ if r1
494
+ r2 = _nt_ws
495
+ s0 << r2
496
+ if r2
497
+ r3 = _nt_id
498
+ s0 << r3
499
+ if r3
500
+ if has_terminal?(':', false, index)
501
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
502
+ @index += 1
503
+ else
504
+ terminal_parse_failure(':')
505
+ r4 = nil
506
+ end
507
+ s0 << r4
508
+ if r4
509
+ r6 = _nt_ws
510
+ if r6
511
+ r5 = r6
512
+ else
513
+ r5 = instantiate_node(SyntaxNode,input, index...index)
514
+ end
515
+ s0 << r5
516
+ if r5
517
+ r7 = _nt_text
518
+ s0 << r7
519
+ end
520
+ end
521
+ end
522
+ end
523
+ end
524
+ if s0.last
525
+ r0 = instantiate_node(BasicInstruction,input, i0...index, s0)
526
+ r0.extend(AssignStmt0)
527
+ else
528
+ @index = i0
529
+ r0 = nil
530
+ end
531
+
532
+ node_cache[:assign_stmt][start_index] = r0
533
+
534
+ r0
535
+ end
536
+
537
+ module AskStmt0
538
+ def ws1
539
+ elements[0]
540
+ end
541
+
542
+ def ws2
543
+ elements[2]
544
+ end
545
+
546
+ def varname
547
+ elements[3]
548
+ end
549
+ end
550
+
551
+ module AskStmt1
552
+ def ws
553
+ elements[1]
554
+ end
555
+
556
+ def id
557
+ elements[2]
558
+ end
559
+
560
+ def about
561
+ elements[3]
562
+ end
563
+
564
+ def text
565
+ elements[6]
566
+ end
567
+ end
568
+
569
+ def _nt_ask_stmt
570
+ start_index = index
571
+ if node_cache[:ask_stmt].has_key?(index)
572
+ cached = node_cache[:ask_stmt][index]
573
+ if cached
574
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
575
+ @index = cached.interval.end
576
+ end
577
+ return cached
578
+ end
579
+
580
+ i0, s0 = index, []
581
+ if has_terminal?('ask', false, index)
582
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 3))
583
+ @index += 3
584
+ else
585
+ terminal_parse_failure('ask')
586
+ r1 = nil
587
+ end
588
+ s0 << r1
589
+ if r1
590
+ r2 = _nt_ws
591
+ s0 << r2
592
+ if r2
593
+ r3 = _nt_id
594
+ s0 << r3
595
+ if r3
596
+ i5, s5 = index, []
597
+ r6 = _nt_ws
598
+ s5 << r6
599
+ if r6
600
+ if has_terminal?('re', false, index)
601
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
602
+ @index += 2
603
+ else
604
+ terminal_parse_failure('re')
605
+ r7 = nil
606
+ end
607
+ s5 << r7
608
+ if r7
609
+ r8 = _nt_ws
610
+ s5 << r8
611
+ if r8
612
+ r9 = _nt_id
613
+ s5 << r9
614
+ end
615
+ end
616
+ end
617
+ if s5.last
618
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
619
+ r5.extend(AskStmt0)
620
+ else
621
+ @index = i5
622
+ r5 = nil
623
+ end
624
+ if r5
625
+ r4 = r5
626
+ else
627
+ r4 = instantiate_node(SyntaxNode,input, index...index)
628
+ end
629
+ s0 << r4
630
+ if r4
631
+ if has_terminal?(':', false, index)
632
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
633
+ @index += 1
634
+ else
635
+ terminal_parse_failure(':')
636
+ r10 = nil
637
+ end
638
+ s0 << r10
639
+ if r10
640
+ r12 = _nt_ws
641
+ if r12
642
+ r11 = r12
643
+ else
644
+ r11 = instantiate_node(SyntaxNode,input, index...index)
645
+ end
646
+ s0 << r11
647
+ if r11
648
+ r13 = _nt_text
649
+ s0 << r13
650
+ end
651
+ end
652
+ end
653
+ end
654
+ end
655
+ end
656
+ if s0.last
657
+ r0 = instantiate_node(BasicInstruction,input, i0...index, s0)
658
+ r0.extend(AskStmt1)
659
+ else
660
+ @index = i0
661
+ r0 = nil
662
+ end
663
+
664
+ node_cache[:ask_stmt][start_index] = r0
665
+
666
+ r0
667
+ end
668
+
669
+ module SetStmt0
670
+ def ws1
671
+ elements[1]
672
+ end
673
+
674
+ def id
675
+ elements[2]
676
+ end
677
+
678
+ def ws2
679
+ elements[3]
680
+ end
681
+
682
+ def varname
683
+ elements[4]
684
+ end
685
+
686
+ def text
687
+ elements[7]
688
+ end
689
+ end
690
+
691
+ def _nt_set_stmt
692
+ start_index = index
693
+ if node_cache[:set_stmt].has_key?(index)
694
+ cached = node_cache[:set_stmt][index]
695
+ if cached
696
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
697
+ @index = cached.interval.end
698
+ end
699
+ return cached
700
+ end
701
+
702
+ i0, s0 = index, []
703
+ if has_terminal?('set', false, index)
704
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 3))
705
+ @index += 3
706
+ else
707
+ terminal_parse_failure('set')
708
+ r1 = nil
709
+ end
710
+ s0 << r1
711
+ if r1
712
+ r2 = _nt_ws
713
+ s0 << r2
714
+ if r2
715
+ r3 = _nt_id
716
+ s0 << r3
717
+ if r3
718
+ r4 = _nt_ws
719
+ s0 << r4
720
+ if r4
721
+ r5 = _nt_id
722
+ s0 << r5
723
+ if r5
724
+ if has_terminal?(':', false, index)
725
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
726
+ @index += 1
727
+ else
728
+ terminal_parse_failure(':')
729
+ r6 = nil
730
+ end
731
+ s0 << r6
732
+ if r6
733
+ r8 = _nt_ws
734
+ if r8
735
+ r7 = r8
736
+ else
737
+ r7 = instantiate_node(SyntaxNode,input, index...index)
738
+ end
739
+ s0 << r7
740
+ if r7
741
+ r9 = _nt_text
742
+ s0 << r9
743
+ end
744
+ end
745
+ end
746
+ end
747
+ end
748
+ end
749
+ end
750
+ if s0.last
751
+ r0 = instantiate_node(BasicInstruction,input, i0...index, s0)
752
+ r0.extend(SetStmt0)
753
+ else
754
+ @index = i0
755
+ r0 = nil
756
+ end
757
+
758
+ node_cache[:set_stmt][start_index] = r0
759
+
760
+ r0
761
+ end
762
+
763
+ module PickStmt0
764
+ def ws1
765
+ elements[1]
766
+ end
767
+
768
+ def id
769
+ elements[2]
770
+ end
771
+
772
+ def ws2
773
+ elements[3]
774
+ end
775
+
776
+ def varname
777
+ elements[4]
778
+ end
779
+
780
+ def text
781
+ elements[7]
782
+ end
783
+ end
784
+
785
+ def _nt_pick_stmt
786
+ start_index = index
787
+ if node_cache[:pick_stmt].has_key?(index)
788
+ cached = node_cache[:pick_stmt][index]
789
+ if cached
790
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
791
+ @index = cached.interval.end
792
+ end
793
+ return cached
794
+ end
795
+
796
+ i0, s0 = index, []
797
+ if has_terminal?('pick', false, index)
798
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
799
+ @index += 4
800
+ else
801
+ terminal_parse_failure('pick')
802
+ r1 = nil
803
+ end
804
+ s0 << r1
805
+ if r1
806
+ r2 = _nt_ws
807
+ s0 << r2
808
+ if r2
809
+ r3 = _nt_id
810
+ s0 << r3
811
+ if r3
812
+ r4 = _nt_ws
813
+ s0 << r4
814
+ if r4
815
+ r5 = _nt_id
816
+ s0 << r5
817
+ if r5
818
+ if has_terminal?(':', false, index)
819
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
820
+ @index += 1
821
+ else
822
+ terminal_parse_failure(':')
823
+ r6 = nil
824
+ end
825
+ s0 << r6
826
+ if r6
827
+ r8 = _nt_ws
828
+ if r8
829
+ r7 = r8
830
+ else
831
+ r7 = instantiate_node(SyntaxNode,input, index...index)
832
+ end
833
+ s0 << r7
834
+ if r7
835
+ r9 = _nt_text
836
+ s0 << r9
837
+ end
838
+ end
839
+ end
840
+ end
841
+ end
842
+ end
843
+ end
844
+ if s0.last
845
+ r0 = instantiate_node(BasicInstruction,input, i0...index, s0)
846
+ r0.extend(PickStmt0)
847
+ else
848
+ @index = i0
849
+ r0 = nil
850
+ end
851
+
852
+ node_cache[:pick_stmt][start_index] = r0
853
+
854
+ r0
855
+ end
856
+
857
+ module SyncStmt0
858
+ def ws
859
+ elements[1]
860
+ end
861
+
862
+ def id
863
+ elements[2]
864
+ end
865
+ end
866
+
867
+ def _nt_sync_stmt
868
+ start_index = index
869
+ if node_cache[:sync_stmt].has_key?(index)
870
+ cached = node_cache[:sync_stmt][index]
871
+ if cached
872
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
873
+ @index = cached.interval.end
874
+ end
875
+ return cached
876
+ end
877
+
878
+ i0, s0 = index, []
879
+ if has_terminal?('sync', false, index)
880
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
881
+ @index += 4
882
+ else
883
+ terminal_parse_failure('sync')
884
+ r1 = nil
885
+ end
886
+ s0 << r1
887
+ if r1
888
+ r2 = _nt_ws
889
+ s0 << r2
890
+ if r2
891
+ r3 = _nt_id
892
+ s0 << r3
893
+ end
894
+ end
895
+ if s0.last
896
+ r0 = instantiate_node(BasicInstruction,input, i0...index, s0)
897
+ r0.extend(SyncStmt0)
898
+ else
899
+ @index = i0
900
+ r0 = nil
901
+ end
902
+
903
+ node_cache[:sync_stmt][start_index] = r0
904
+
905
+ r0
906
+ end
907
+
908
+ module ReleaseStmt0
909
+ def ws
910
+ elements[1]
911
+ end
912
+
913
+ def id
914
+ elements[2]
915
+ end
916
+
917
+ def condition
918
+ elements[3]
919
+ end
920
+ end
921
+
922
+ def _nt_release_stmt
923
+ start_index = index
924
+ if node_cache[:release_stmt].has_key?(index)
925
+ cached = node_cache[:release_stmt][index]
926
+ if cached
927
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
928
+ @index = cached.interval.end
929
+ end
930
+ return cached
931
+ end
932
+
933
+ i0, s0 = index, []
934
+ if has_terminal?('release', false, index)
935
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
936
+ @index += 7
937
+ else
938
+ terminal_parse_failure('release')
939
+ r1 = nil
940
+ end
941
+ s0 << r1
942
+ if r1
943
+ r2 = _nt_ws
944
+ s0 << r2
945
+ if r2
946
+ r3 = _nt_id
947
+ s0 << r3
948
+ if r3
949
+ r5 = _nt_condition
950
+ if r5
951
+ r4 = r5
952
+ else
953
+ r4 = instantiate_node(SyntaxNode,input, index...index)
954
+ end
955
+ s0 << r4
956
+ end
957
+ end
958
+ end
959
+ if s0.last
960
+ r0 = instantiate_node(BasicInstruction,input, i0...index, s0)
961
+ r0.extend(ReleaseStmt0)
962
+ else
963
+ @index = i0
964
+ r0 = nil
965
+ end
966
+
967
+ node_cache[:release_stmt][start_index] = r0
968
+
969
+ r0
970
+ end
971
+
972
+ module ReplaceStmt0
973
+ def ws
974
+ elements[1]
975
+ end
976
+
977
+ def id
978
+ elements[2]
979
+ end
980
+
981
+ def condition
982
+ elements[3]
983
+ end
984
+ end
985
+
986
+ def _nt_replace_stmt
987
+ start_index = index
988
+ if node_cache[:replace_stmt].has_key?(index)
989
+ cached = node_cache[:replace_stmt][index]
990
+ if cached
991
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
992
+ @index = cached.interval.end
993
+ end
994
+ return cached
995
+ end
996
+
997
+ i0, s0 = index, []
998
+ if has_terminal?('replace', false, index)
999
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
1000
+ @index += 7
1001
+ else
1002
+ terminal_parse_failure('replace')
1003
+ r1 = nil
1004
+ end
1005
+ s0 << r1
1006
+ if r1
1007
+ r2 = _nt_ws
1008
+ s0 << r2
1009
+ if r2
1010
+ r3 = _nt_id
1011
+ s0 << r3
1012
+ if r3
1013
+ r5 = _nt_condition
1014
+ if r5
1015
+ r4 = r5
1016
+ else
1017
+ r4 = instantiate_node(SyntaxNode,input, index...index)
1018
+ end
1019
+ s0 << r4
1020
+ end
1021
+ end
1022
+ end
1023
+ if s0.last
1024
+ r0 = instantiate_node(BasicInstruction,input, i0...index, s0)
1025
+ r0.extend(ReplaceStmt0)
1026
+ else
1027
+ @index = i0
1028
+ r0 = nil
1029
+ end
1030
+
1031
+ node_cache[:replace_stmt][start_index] = r0
1032
+
1033
+ r0
1034
+ end
1035
+
1036
+ module Condition0
1037
+ def ws1
1038
+ elements[0]
1039
+ end
1040
+
1041
+ def type
1042
+ elements[1]
1043
+ end
1044
+
1045
+ def ws2
1046
+ elements[2]
1047
+ end
1048
+
1049
+ def thing
1050
+ elements[3]
1051
+ end
1052
+ end
1053
+
1054
+ module Condition1
1055
+ def value
1056
+ [type.text_value.to_sym, thing.text_value.to_sym]
1057
+ end
1058
+ end
1059
+
1060
+ def _nt_condition
1061
+ start_index = index
1062
+ if node_cache[:condition].has_key?(index)
1063
+ cached = node_cache[:condition][index]
1064
+ if cached
1065
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1066
+ @index = cached.interval.end
1067
+ end
1068
+ return cached
1069
+ end
1070
+
1071
+ i0, s0 = index, []
1072
+ r1 = _nt_ws
1073
+ s0 << r1
1074
+ if r1
1075
+ i2 = index
1076
+ if has_terminal?('if', false, index)
1077
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 2))
1078
+ @index += 2
1079
+ else
1080
+ terminal_parse_failure('if')
1081
+ r3 = nil
1082
+ end
1083
+ if r3
1084
+ r2 = r3
1085
+ else
1086
+ if has_terminal?('unless', false, index)
1087
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 6))
1088
+ @index += 6
1089
+ else
1090
+ terminal_parse_failure('unless')
1091
+ r4 = nil
1092
+ end
1093
+ if r4
1094
+ r2 = r4
1095
+ else
1096
+ @index = i2
1097
+ r2 = nil
1098
+ end
1099
+ end
1100
+ s0 << r2
1101
+ if r2
1102
+ r5 = _nt_ws
1103
+ s0 << r5
1104
+ if r5
1105
+ r6 = _nt_id
1106
+ s0 << r6
1107
+ end
1108
+ end
1109
+ end
1110
+ if s0.last
1111
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1112
+ r0.extend(Condition0)
1113
+ r0.extend(Condition1)
1114
+ else
1115
+ @index = i0
1116
+ r0 = nil
1117
+ end
1118
+
1119
+ node_cache[:condition][start_index] = r0
1120
+
1121
+ r0
1122
+ end
1123
+
1124
+ end
1125
+
1126
+ class InstructionsParser < Treetop::Runtime::CompiledParser
1127
+ include Instructions
1128
+ end
1129
+
1130
+ end