antlr3 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. data/ANTLR-LICENSE.txt +26 -0
  2. data/History.txt +66 -0
  3. data/README.txt +139 -0
  4. data/bin/antlr4ruby +33 -0
  5. data/java/RubyTarget.java +524 -0
  6. data/java/antlr-full-3.2.1.jar +0 -0
  7. data/lib/antlr3.rb +176 -0
  8. data/lib/antlr3/constants.rb +88 -0
  9. data/lib/antlr3/debug.rb +701 -0
  10. data/lib/antlr3/debug/event-hub.rb +210 -0
  11. data/lib/antlr3/debug/record-event-listener.rb +25 -0
  12. data/lib/antlr3/debug/rule-tracer.rb +55 -0
  13. data/lib/antlr3/debug/socket.rb +360 -0
  14. data/lib/antlr3/debug/trace-event-listener.rb +92 -0
  15. data/lib/antlr3/dfa.rb +247 -0
  16. data/lib/antlr3/dot.rb +174 -0
  17. data/lib/antlr3/error.rb +657 -0
  18. data/lib/antlr3/main.rb +561 -0
  19. data/lib/antlr3/modes/ast-builder.rb +41 -0
  20. data/lib/antlr3/modes/filter.rb +56 -0
  21. data/lib/antlr3/profile.rb +322 -0
  22. data/lib/antlr3/recognizers.rb +1280 -0
  23. data/lib/antlr3/streams.rb +985 -0
  24. data/lib/antlr3/streams/interactive.rb +91 -0
  25. data/lib/antlr3/streams/rewrite.rb +412 -0
  26. data/lib/antlr3/test/call-stack.rb +57 -0
  27. data/lib/antlr3/test/config.rb +23 -0
  28. data/lib/antlr3/test/core-extensions.rb +269 -0
  29. data/lib/antlr3/test/diff.rb +165 -0
  30. data/lib/antlr3/test/functional.rb +207 -0
  31. data/lib/antlr3/test/grammar.rb +371 -0
  32. data/lib/antlr3/token.rb +592 -0
  33. data/lib/antlr3/tree.rb +1415 -0
  34. data/lib/antlr3/tree/debug.rb +163 -0
  35. data/lib/antlr3/tree/visitor.rb +84 -0
  36. data/lib/antlr3/tree/wizard.rb +481 -0
  37. data/lib/antlr3/util.rb +149 -0
  38. data/lib/antlr3/version.rb +27 -0
  39. data/samples/ANTLRv3Grammar.g +621 -0
  40. data/samples/Cpp.g +749 -0
  41. data/templates/AST.stg +335 -0
  42. data/templates/ASTDbg.stg +40 -0
  43. data/templates/ASTParser.stg +153 -0
  44. data/templates/ASTTreeParser.stg +272 -0
  45. data/templates/Dbg.stg +192 -0
  46. data/templates/Ruby.stg +1514 -0
  47. data/test/functional/ast-output/auto-ast.rb +797 -0
  48. data/test/functional/ast-output/construction.rb +555 -0
  49. data/test/functional/ast-output/hetero-nodes.rb +753 -0
  50. data/test/functional/ast-output/rewrites.rb +1327 -0
  51. data/test/functional/ast-output/tree-rewrite.rb +1662 -0
  52. data/test/functional/debugging/debug-mode.rb +689 -0
  53. data/test/functional/debugging/profile-mode.rb +165 -0
  54. data/test/functional/debugging/rule-tracing.rb +74 -0
  55. data/test/functional/delegation/import.rb +379 -0
  56. data/test/functional/lexer/basic.rb +559 -0
  57. data/test/functional/lexer/filter-mode.rb +245 -0
  58. data/test/functional/lexer/nuances.rb +47 -0
  59. data/test/functional/lexer/properties.rb +104 -0
  60. data/test/functional/lexer/syn-pred.rb +32 -0
  61. data/test/functional/lexer/xml.rb +206 -0
  62. data/test/functional/main/main-scripts.rb +245 -0
  63. data/test/functional/parser/actions.rb +224 -0
  64. data/test/functional/parser/backtracking.rb +244 -0
  65. data/test/functional/parser/basic.rb +282 -0
  66. data/test/functional/parser/calc.rb +98 -0
  67. data/test/functional/parser/ll-star.rb +143 -0
  68. data/test/functional/parser/nuances.rb +165 -0
  69. data/test/functional/parser/predicates.rb +103 -0
  70. data/test/functional/parser/properties.rb +242 -0
  71. data/test/functional/parser/rule-methods.rb +132 -0
  72. data/test/functional/parser/scopes.rb +274 -0
  73. data/test/functional/token-rewrite/basic.rb +318 -0
  74. data/test/functional/token-rewrite/via-parser.rb +100 -0
  75. data/test/functional/tree-parser/basic.rb +750 -0
  76. data/test/unit/sample-input/file-stream-1 +2 -0
  77. data/test/unit/sample-input/teststreams.input2 +2 -0
  78. data/test/unit/test-dfa.rb +52 -0
  79. data/test/unit/test-exceptions.rb +44 -0
  80. data/test/unit/test-recognizers.rb +55 -0
  81. data/test/unit/test-scheme.rb +62 -0
  82. data/test/unit/test-streams.rb +459 -0
  83. data/test/unit/test-tree-wizard.rb +535 -0
  84. data/test/unit/test-trees.rb +854 -0
  85. metadata +205 -0
@@ -0,0 +1,1662 @@
1
+ #!/usr/bin/ruby
2
+ # encoding: utf-8
3
+
4
+ require 'antlr3/test/functional'
5
+
6
+
7
+ class TestASTRewritingTreeParsers < ANTLR3::Test::Functional
8
+ inline_grammar(<<-'END')
9
+ grammar FlatList;
10
+ options {
11
+ language=Ruby;
12
+ output=AST;
13
+ }
14
+ a : ID INT;
15
+ ID : 'a'..'z'+ ;
16
+ INT : '0'..'9'+;
17
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
18
+ END
19
+
20
+ inline_grammar(<<-'END')
21
+ tree grammar FlatListWalker;
22
+ options {
23
+ language=Ruby;
24
+ output=AST;
25
+ ASTLabelType=CommonTree;
26
+ tokenVocab=FlatList;
27
+ }
28
+
29
+ a : ID INT -> INT ID;
30
+ END
31
+
32
+ inline_grammar(<<-'END')
33
+ grammar SimpleTree;
34
+ options {
35
+ language=Ruby;
36
+ output=AST;
37
+ }
38
+ a : ID INT -> ^(ID INT);
39
+ ID : 'a'..'z'+ ;
40
+ INT : '0'..'9'+;
41
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
42
+ END
43
+
44
+ inline_grammar(<<-'END')
45
+ tree grammar SimpleTreeWalker;
46
+ options {
47
+ language=Ruby;
48
+ output=AST;
49
+ ASTLabelType=CommonTree;
50
+ tokenVocab=SimpleTree;
51
+ }
52
+ a : ^(ID INT) -> ^(INT ID);
53
+ END
54
+
55
+ inline_grammar(<<-END)
56
+ grammar CombinedRewriteAndAuto;
57
+ options {
58
+ language=Ruby;
59
+ output=AST;
60
+ }
61
+ a : ID INT -> ^(ID INT) | INT ;
62
+ ID : 'a'..'z'+ ;
63
+ INT : '0'..'9'+;
64
+ WS : (' '|'\\n') {$channel=HIDDEN;} ;
65
+ END
66
+
67
+ inline_grammar(<<-END)
68
+ tree grammar CombinedRewriteAndAutoTree;
69
+ options {
70
+ language=Ruby;
71
+ output=AST;
72
+ ASTLabelType=CommonTree;
73
+ tokenVocab=CombinedRewriteAndAuto;
74
+ }
75
+ a : ^(ID INT) -> ^(INT ID) | INT;
76
+ END
77
+
78
+ inline_grammar(<<-'END')
79
+ grammar AvoidDup;
80
+ options {
81
+ language=Ruby;
82
+ output=AST;
83
+ }
84
+ a : ID ;
85
+ ID : 'a'..'z'+ ;
86
+ INT : '0'..'9'+;
87
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
88
+ END
89
+
90
+ inline_grammar(<<-'END')
91
+ tree grammar AvoidDupWalker;
92
+ options {
93
+ language=Ruby;
94
+ output=AST;
95
+ ASTLabelType=CommonTree;
96
+ tokenVocab=AvoidDup;
97
+ }
98
+ a : ID -> ^(ID ID);
99
+ END
100
+
101
+ inline_grammar(<<-'END')
102
+ grammar Loop;
103
+ options {
104
+ language=Ruby;
105
+ output=AST;
106
+ }
107
+ a : ID+ INT+ -> (^(ID INT))+ ;
108
+ ID : 'a'..'z'+ ;
109
+ INT : '0'..'9'+;
110
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
111
+ END
112
+
113
+ inline_grammar(<<-'END')
114
+ tree grammar LoopWalker;
115
+ options {
116
+ language=Ruby;
117
+ output=AST;
118
+ ASTLabelType=CommonTree;
119
+ tokenVocab=Loop;
120
+ }
121
+ a : (^(ID INT))+ -> INT+ ID+;
122
+ END
123
+
124
+ inline_grammar(<<-'END')
125
+ grammar AutoDup;
126
+ options {
127
+ language=Ruby;
128
+ output=AST;
129
+ }
130
+ a : ID ;
131
+ ID : 'a'..'z'+ ;
132
+ INT : '0'..'9'+;
133
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
134
+ END
135
+
136
+ inline_grammar(<<-'END')
137
+ tree grammar AutoDupWalker;
138
+ options {
139
+ language=Ruby;
140
+ output=AST;
141
+ ASTLabelType=CommonTree;
142
+ tokenVocab=AutoDup;
143
+ }
144
+ a : ID;
145
+ END
146
+
147
+ inline_grammar(<<-'END')
148
+ grammar AutoDupRule;
149
+ options {
150
+ language=Ruby;
151
+ output=AST;
152
+ }
153
+ a : ID INT ;
154
+ ID : 'a'..'z'+ ;
155
+ INT : '0'..'9'+;
156
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
157
+ END
158
+
159
+ inline_grammar(<<-'END')
160
+ tree grammar AutoDupRuleWalker;
161
+ options {
162
+ language=Ruby;
163
+ output=AST;
164
+ ASTLabelType=CommonTree;
165
+ tokenVocab=AutoDupRule;
166
+ }
167
+ a : b c ;
168
+ b : ID ;
169
+ c : INT ;
170
+ END
171
+
172
+ inline_grammar(<<-'END')
173
+ grammar AutoWildcard;
174
+ options {language=Ruby;output=AST;}
175
+ a : ID INT ;
176
+ ID : 'a'..'z'+ ;
177
+ INT : '0'..'9'+;
178
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
179
+ END
180
+
181
+ inline_grammar(<<-'END')
182
+ tree grammar AutoWildcardWalker;
183
+ options {language=Ruby;output=AST; ASTLabelType=CommonTree; tokenVocab=AutoWildcard;}
184
+ a : ID .
185
+ ;
186
+ END
187
+
188
+ inline_grammar(<<-'END')
189
+ grammar AutoWildcard2;
190
+ options {language=Ruby;output=AST;}
191
+ a : ID INT -> ^(ID INT);
192
+ ID : 'a'..'z'+ ;
193
+ INT : '0'..'9'+;
194
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
195
+ END
196
+
197
+ inline_grammar(<<-'END')
198
+ tree grammar AutoWildcard2Walker;
199
+ options {language=Ruby;output=AST; ASTLabelType=CommonTree; tokenVocab=AutoWildcard2;}
200
+ a : ^(ID .)
201
+ ;
202
+ END
203
+
204
+ inline_grammar(<<-'END')
205
+ grammar AutoWildcardWithLabel;
206
+ options {language=Ruby;output=AST;}
207
+ a : ID INT ;
208
+ ID : 'a'..'z'+ ;
209
+ INT : '0'..'9'+;
210
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
211
+ END
212
+
213
+ inline_grammar(<<-'END')
214
+ tree grammar AutoWildcardWithLabelWalker;
215
+ options {language=Ruby;output=AST; ASTLabelType=CommonTree; tokenVocab=AutoWildcardWithLabel;}
216
+ a : ID c=.
217
+ ;
218
+ END
219
+
220
+ inline_grammar(<<-'END')
221
+ grammar AutoWildcardWithListLabel;
222
+ options {language=Ruby;output=AST;}
223
+ a : ID INT ;
224
+ ID : 'a'..'z'+ ;
225
+ INT : '0'..'9'+;
226
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
227
+ END
228
+
229
+ inline_grammar(<<-'END')
230
+ tree grammar AutoWildcardWithListLabelWalker;
231
+ options {language=Ruby;output=AST; ASTLabelType=CommonTree; tokenVocab=AutoWildcardWithListLabel;}
232
+ a : ID c+=.
233
+ ;
234
+ END
235
+
236
+ inline_grammar(<<-'END')
237
+ grammar AutoDupMultiple;
238
+ options {
239
+ language=Ruby;
240
+ output=AST;
241
+ }
242
+ a : ID ID INT;
243
+ ID : 'a'..'z'+ ;
244
+ INT : '0'..'9'+;
245
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
246
+ END
247
+
248
+ inline_grammar(<<-'END')
249
+ tree grammar AutoDupMultipleWalker;
250
+ options {
251
+ language=Ruby;
252
+ output=AST;
253
+ ASTLabelType=CommonTree;
254
+ tokenVocab=AutoDupMultiple;
255
+ }
256
+ a : ID ID INT
257
+ ;
258
+ END
259
+
260
+ inline_grammar(<<-'END')
261
+ grammar AutoDupTree;
262
+ options {
263
+ language=Ruby;
264
+ output=AST;
265
+ }
266
+ a : ID INT -> ^(ID INT);
267
+ ID : 'a'..'z'+ ;
268
+ INT : '0'..'9'+;
269
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
270
+ END
271
+
272
+ inline_grammar(<<-'END')
273
+ tree grammar AutoDupTreeWalker;
274
+ options {
275
+ language=Ruby;
276
+ output=AST;
277
+ ASTLabelType=CommonTree;
278
+ tokenVocab=AutoDupTree;
279
+ }
280
+ a : ^(ID INT)
281
+ ;
282
+ END
283
+
284
+ inline_grammar(<<-'END')
285
+ grammar AutoDupTreeWithLabels;
286
+ options {
287
+ language=Ruby;
288
+ output=AST;
289
+ }
290
+ a : ID INT -> ^(ID INT);
291
+ ID : 'a'..'z'+ ;
292
+ INT : '0'..'9'+;
293
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
294
+ END
295
+
296
+ inline_grammar(<<-'END')
297
+ tree grammar AutoDupTreeWithLabelsWalker;
298
+ options {
299
+ language=Ruby;
300
+ output=AST;
301
+ ASTLabelType=CommonTree;
302
+ tokenVocab=AutoDupTreeWithLabels;
303
+ }
304
+ a : ^(x=ID y=INT)
305
+ ;
306
+ END
307
+
308
+ inline_grammar(<<-'END')
309
+ grammar AutoDupTreeWithListLabels;
310
+ options {
311
+ language=Ruby;
312
+ output=AST;
313
+ }
314
+ a : ID INT -> ^(ID INT);
315
+ ID : 'a'..'z'+ ;
316
+ INT : '0'..'9'+;
317
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
318
+ END
319
+
320
+ inline_grammar(<<-'END')
321
+ tree grammar AutoDupTreeWithListLabelsWalker;
322
+ options {
323
+ language=Ruby;
324
+ output=AST;
325
+ ASTLabelType=CommonTree;
326
+ tokenVocab=AutoDupTreeWithListLabels;
327
+ }
328
+ a : ^(x+=ID y+=INT)
329
+ ;
330
+ END
331
+
332
+ inline_grammar(<<-'END')
333
+ grammar AutoDupTreeWithRuleRoot;
334
+ options {
335
+ language=Ruby;
336
+ output=AST;
337
+ }
338
+ a : ID INT -> ^(ID INT);
339
+ ID : 'a'..'z'+ ;
340
+ INT : '0'..'9'+;
341
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
342
+ END
343
+
344
+ inline_grammar(<<-'END')
345
+ tree grammar AutoDupTreeWithRuleRootWalker;
346
+ options {
347
+ language=Ruby;
348
+ output=AST;
349
+ ASTLabelType=CommonTree;
350
+ tokenVocab=AutoDupTreeWithRuleRoot;
351
+ }
352
+ a : ^(b INT) ;
353
+ b : ID ;
354
+ END
355
+
356
+ inline_grammar(<<-'END')
357
+ grammar AutoDupTreeWithRuleRootAndLabels;
358
+ options {
359
+ language=Ruby;
360
+ output=AST;
361
+ }
362
+ a : ID INT -> ^(ID INT);
363
+ ID : 'a'..'z'+ ;
364
+ INT : '0'..'9'+;
365
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
366
+ END
367
+
368
+ inline_grammar(<<-'END')
369
+ tree grammar AutoDupTreeWithRuleRootAndLabelsWalker;
370
+ options {
371
+ language=Ruby;
372
+ output=AST;
373
+ ASTLabelType=CommonTree;
374
+ tokenVocab=AutoDupTreeWithRuleRootAndLabels;
375
+ }
376
+ a : ^(x=b INT) ;
377
+ b : ID ;
378
+ END
379
+
380
+ inline_grammar(<<-'END')
381
+ grammar AutoDupTreeWithRuleRootAndListLabels;
382
+ options {
383
+ language=Ruby;
384
+ output=AST;
385
+ }
386
+ a : ID INT -> ^(ID INT);
387
+ ID : 'a'..'z'+ ;
388
+ INT : '0'..'9'+;
389
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
390
+ END
391
+
392
+ inline_grammar(<<-'END')
393
+ tree grammar AutoDupTreeWithRuleRootAndListLabelsWalker;
394
+ options {
395
+ language=Ruby;
396
+ output=AST;
397
+ ASTLabelType=CommonTree;
398
+ tokenVocab=AutoDupTreeWithRuleRootAndListLabels;
399
+ }
400
+ a : ^(x+=b y+=c) ;
401
+ b : ID ;
402
+ c : INT ;
403
+ END
404
+
405
+ inline_grammar(<<-'END')
406
+ grammar AutoDupNestedTree;
407
+ options {
408
+ language=Ruby;
409
+ output=AST;
410
+ }
411
+ a : x=ID y=ID INT -> ^($x ^($y INT));
412
+ ID : 'a'..'z'+ ;
413
+ INT : '0'..'9'+;
414
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
415
+ END
416
+
417
+ inline_grammar(<<-'END')
418
+ tree grammar AutoDupNestedTreeWalker;
419
+ options {
420
+ language=Ruby;
421
+ output=AST;
422
+ ASTLabelType=CommonTree;
423
+ tokenVocab=AutoDupNestedTree;
424
+ }
425
+ a : ^(ID ^(ID INT))
426
+ ;
427
+ END
428
+
429
+ inline_grammar(<<-'END')
430
+ grammar Delete;
431
+ options {
432
+ language=Ruby;
433
+ output=AST;
434
+ }
435
+ a : ID ;
436
+ ID : 'a'..'z'+ ;
437
+ INT : '0'..'9'+;
438
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
439
+ END
440
+
441
+ inline_grammar(<<-'END')
442
+ tree grammar DeleteWalker;
443
+ options {
444
+ language=Ruby;
445
+ output=AST;
446
+ ASTLabelType=CommonTree;
447
+ tokenVocab=Delete;
448
+ }
449
+ a : ID ->
450
+ ;
451
+ END
452
+
453
+ inline_grammar(<<-'END')
454
+ grammar SetMatchNoRewrite;
455
+ options {
456
+ language=Ruby;
457
+ output=AST;
458
+ }
459
+ a : ID INT ;
460
+ ID : 'a'..'z'+ ;
461
+ INT : '0'..'9'+;
462
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
463
+ END
464
+
465
+ inline_grammar(<<-'END')
466
+ tree grammar SetMatchNoRewriteWalker;
467
+ options {
468
+ language=Ruby;
469
+ output=AST;
470
+ ASTLabelType=CommonTree;
471
+ tokenVocab=SetMatchNoRewrite;
472
+ }
473
+ a : b INT;
474
+ b : ID | INT;
475
+ END
476
+
477
+ inline_grammar(<<-'END')
478
+ grammar SetOptionalMatchNoRewrite;
479
+ options {
480
+ language=Ruby;
481
+ output=AST;
482
+ }
483
+ a : ID INT ;
484
+ ID : 'a'..'z'+ ;
485
+ INT : '0'..'9'+;
486
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
487
+ END
488
+
489
+ inline_grammar(<<-'END')
490
+ tree grammar SetOptionalMatchNoRewriteWalker;
491
+ options {
492
+ language=Ruby;
493
+ output=AST;
494
+ ASTLabelType=CommonTree;
495
+ tokenVocab=SetOptionalMatchNoRewrite;
496
+ }
497
+ a : (ID|INT)? INT ;
498
+ END
499
+
500
+ inline_grammar(<<-'END')
501
+ grammar SetMatchNoRewriteLevel2;
502
+ options {
503
+ language=Ruby;
504
+ output=AST;
505
+ }
506
+ a : x=ID INT -> ^($x INT);
507
+ ID : 'a'..'z'+ ;
508
+ INT : '0'..'9'+;
509
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
510
+ END
511
+
512
+ inline_grammar(<<-'END')
513
+ tree grammar SetMatchNoRewriteLevel2Walker;
514
+ options {
515
+ language=Ruby;
516
+ output=AST;
517
+ ASTLabelType=CommonTree;
518
+ tokenVocab=SetMatchNoRewriteLevel2;
519
+ }
520
+ a : ^(ID (ID | INT) ) ;
521
+ END
522
+
523
+ inline_grammar(<<-'END')
524
+ grammar SetMatchNoRewriteLevel2Root;
525
+ options {
526
+ language=Ruby;
527
+ output=AST;
528
+ }
529
+ a : x=ID INT -> ^($x INT);
530
+ ID : 'a'..'z'+ ;
531
+ INT : '0'..'9'+;
532
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
533
+ END
534
+
535
+ inline_grammar(<<-'END')
536
+ tree grammar SetMatchNoRewriteLevel2RootWalker;
537
+ options {
538
+ language=Ruby;
539
+ output=AST;
540
+ ASTLabelType=CommonTree;
541
+ tokenVocab=SetMatchNoRewriteLevel2Root;
542
+ }
543
+ a : ^((ID | INT) INT) ;
544
+ END
545
+
546
+ inline_grammar(<<-END)
547
+ grammar RewriteModeCombinedRewriteAndAuto;
548
+ options {
549
+ language=Ruby;
550
+ output=AST;
551
+ }
552
+ a : ID INT -> ^(ID INT) | INT ;
553
+ ID : 'a'..'z'+ ;
554
+ INT : '0'..'9'+;
555
+ WS : (' '|'\\n') {$channel=HIDDEN;} ;
556
+ END
557
+
558
+ inline_grammar(<<-END)
559
+ tree grammar RewriteModeCombinedRewriteAndAutoTree;
560
+ options {
561
+ language=Ruby;
562
+ output=AST;
563
+ ASTLabelType=CommonTree;
564
+ tokenVocab=RewriteModeCombinedRewriteAndAuto;
565
+ rewrite=true;
566
+ }
567
+ a : ^(ID INT) -> ^(ID["ick"] INT)
568
+ | INT // leaves it alone, returning $a.start
569
+ ;
570
+ END
571
+
572
+ inline_grammar(<<-'END')
573
+ grammar RewriteModeFlatTree;
574
+ options {
575
+ language=Ruby;
576
+ output=AST;
577
+ }
578
+ a : ID INT -> ID INT | INT ;
579
+ ID : 'a'..'z'+ ;
580
+ INT : '0'..'9'+;
581
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
582
+ END
583
+
584
+ inline_grammar(<<-'END')
585
+ tree grammar RewriteModeFlatTreeWalker;
586
+ options {
587
+ language=Ruby;
588
+ output=AST;
589
+ ASTLabelType=CommonTree;
590
+ tokenVocab=RewriteModeFlatTree;
591
+ rewrite=true;
592
+ }
593
+ s : ID a ;
594
+ a : INT -> INT["1"]
595
+ ;
596
+ END
597
+
598
+ inline_grammar(<<-'END')
599
+ grammar RewriteModeChainRuleFlatTree;
600
+ options {language=Ruby; output=AST;}
601
+ a : ID INT -> ID INT | INT ;
602
+ ID : 'a'..'z'+ ;
603
+ INT : '0'..'9'+;
604
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
605
+ END
606
+
607
+ inline_grammar(<<-'END')
608
+ tree grammar RewriteModeChainRuleFlatTreeWalker;
609
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleFlatTree; rewrite=true;}
610
+ s : a ;
611
+ a : b ;
612
+ b : ID INT -> INT ID
613
+ ;
614
+ END
615
+
616
+ inline_grammar(<<-'END')
617
+ grammar RewriteModeChainRuleTree;
618
+ options {language=Ruby; output=AST;}
619
+ a : ID INT -> ^(ID INT) ;
620
+ ID : 'a'..'z'+ ;
621
+ INT : '0'..'9'+;
622
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
623
+ END
624
+
625
+ inline_grammar(<<-'END')
626
+ tree grammar RewriteModeChainRuleTreeWalker;
627
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree; rewrite=true;}
628
+ s : a ;
629
+ a : b ; // a.tree must become b.tree
630
+ b : ^(ID INT) -> INT
631
+ ;
632
+ END
633
+
634
+ inline_grammar(<<-'END')
635
+ grammar RewriteModeChainRuleTree2;
636
+ options {language=Ruby; output=AST;}
637
+ a : ID INT -> ^(ID INT) ;
638
+ ID : 'a'..'z'+ ;
639
+ INT : '0'..'9'+;
640
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
641
+ END
642
+
643
+ inline_grammar(<<-'END')
644
+ tree grammar RewriteModeChainRuleTree2Walker;
645
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree2; rewrite=true;}
646
+ tokens { X; }
647
+ s : a* b ; // only b contributes to tree, but it's after a*; s.tree = b.tree
648
+ a : X ;
649
+ b : ^(ID INT) -> INT
650
+ ;
651
+ END
652
+
653
+ inline_grammar(<<-'END')
654
+ grammar RewriteModeChainRuleTree3;
655
+ options {language=Ruby; output=AST;}
656
+ a : 'boo' ID INT -> 'boo' ^(ID INT) ;
657
+ ID : 'a'..'z'+ ;
658
+ INT : '0'..'9'+;
659
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
660
+ END
661
+
662
+ inline_grammar(<<-'END')
663
+ tree grammar RewriteModeChainRuleTree3Walker;
664
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree3; rewrite=true;}
665
+ tokens { X; }
666
+ s : 'boo' a* b ; // don't reset s.tree to b.tree due to 'boo'
667
+ a : X ;
668
+ b : ^(ID INT) -> INT
669
+ ;
670
+ END
671
+
672
+ inline_grammar(<<-'END')
673
+ grammar RewriteModeChainRuleTree4;
674
+ options {language=Ruby; output=AST;}
675
+ a : 'boo' ID INT -> ^('boo' ^(ID INT)) ;
676
+ ID : 'a'..'z'+ ;
677
+ INT : '0'..'9'+;
678
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
679
+ END
680
+
681
+ inline_grammar(<<-'END')
682
+ tree grammar RewriteModeChainRuleTree4Walker;
683
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree4; rewrite=true;}
684
+ tokens { X; }
685
+ s : ^('boo' a* b) ; // don't reset s.tree to b.tree due to 'boo'
686
+ a : X ;
687
+ b : ^(ID INT) -> INT
688
+ ;
689
+ END
690
+
691
+ inline_grammar(<<-'END')
692
+ grammar RewriteModeChainRuleTree5;
693
+ options {language=Ruby; output=AST;}
694
+ a : 'boo' ID INT -> ^('boo' ^(ID INT)) ;
695
+ ID : 'a'..'z'+ ;
696
+ INT : '0'..'9'+;
697
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
698
+ END
699
+
700
+ inline_grammar(<<-'END')
701
+ tree grammar RewriteModeChainRuleTree5Walker;
702
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree5; rewrite=true;}
703
+ tokens { X; }
704
+ s : ^(a b) ; // s.tree is a.tree
705
+ a : 'boo' ;
706
+ b : ^(ID INT) -> INT
707
+ ;
708
+ END
709
+
710
+ inline_grammar(<<-'END')
711
+ grammar RewriteOfRuleRef;
712
+ options {language=Ruby; output=AST;}
713
+ a : ID INT -> ID INT | INT ;
714
+ ID : 'a'..'z'+ ;
715
+ INT : '0'..'9'+;
716
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
717
+ END
718
+
719
+ inline_grammar(<<-'END')
720
+ tree grammar RewriteOfRuleRefWalker;
721
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRef; rewrite=true;}
722
+ s : a -> a ;
723
+ a : ID INT -> ID INT ;
724
+ END
725
+
726
+ inline_grammar(<<-'END')
727
+ grammar RewriteOfRuleRefRoot;
728
+ options {language=Ruby; output=AST;}
729
+ a : ID INT INT -> ^(INT ^(ID INT));
730
+ ID : 'a'..'z'+ ;
731
+ INT : '0'..'9'+;
732
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
733
+ END
734
+
735
+ inline_grammar(<<-'END')
736
+ tree grammar RewriteOfRuleRefRootWalker;
737
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefRoot; rewrite=true;}
738
+ s : ^(a ^(ID INT)) -> a ;
739
+ a : INT ;
740
+ END
741
+
742
+ inline_grammar(<<-'END')
743
+ grammar RewriteOfRuleRefRootLabeled;
744
+ options {language=Ruby; output=AST;}
745
+ a : ID INT INT -> ^(INT ^(ID INT));
746
+ ID : 'a'..'z'+ ;
747
+ INT : '0'..'9'+;
748
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
749
+ END
750
+
751
+ inline_grammar(<<-'END')
752
+ tree grammar RewriteOfRuleRefRootLabeledWalker;
753
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefRootLabeled; rewrite=true;}
754
+ s : ^(label=a ^(ID INT)) -> a ;
755
+ a : INT ;
756
+ END
757
+
758
+ inline_grammar(<<-'END')
759
+ grammar RewriteOfRuleRefRootListLabeled;
760
+ options {language=Ruby; output=AST;}
761
+ a : ID INT INT -> ^(INT ^(ID INT));
762
+ ID : 'a'..'z'+ ;
763
+ INT : '0'..'9'+;
764
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
765
+ END
766
+
767
+ inline_grammar(<<-'END')
768
+ tree grammar RewriteOfRuleRefRootListLabeledWalker;
769
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefRootListLabeled; rewrite=true;}
770
+ s : ^(label+=a ^(ID INT)) -> a ;
771
+ a : INT ;
772
+ END
773
+
774
+ inline_grammar(<<-'END')
775
+ grammar RewriteOfRuleRefChild;
776
+ options {language=Ruby; output=AST;}
777
+ a : ID INT -> ^(ID ^(INT INT));
778
+ ID : 'a'..'z'+ ;
779
+ INT : '0'..'9'+;
780
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
781
+ END
782
+
783
+ inline_grammar(<<-'END')
784
+ tree grammar RewriteOfRuleRefChildWalker;
785
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefChild; rewrite=true;}
786
+ s : ^(ID a) -> a ;
787
+ a : ^(INT INT) ;
788
+ END
789
+
790
+ inline_grammar(<<-'END')
791
+ grammar RewriteOfRuleRefLabel;
792
+ options {language=Ruby; output=AST;}
793
+ a : ID INT -> ^(ID ^(INT INT));
794
+ ID : 'a'..'z'+ ;
795
+ INT : '0'..'9'+;
796
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
797
+ END
798
+
799
+ inline_grammar(<<-'END')
800
+ tree grammar RewriteOfRuleRefLabelWalker;
801
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefLabel; rewrite=true;}
802
+ s : ^(ID label=a) -> a ;
803
+ a : ^(INT INT) ;
804
+ END
805
+
806
+ inline_grammar(<<-'END')
807
+ grammar RewriteOfRuleRefListLabel;
808
+ options {language=Ruby; output=AST;}
809
+ a : ID INT -> ^(ID ^(INT INT));
810
+ ID : 'a'..'z'+ ;
811
+ INT : '0'..'9'+;
812
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
813
+ END
814
+
815
+ inline_grammar(<<-'END')
816
+ tree grammar RewriteOfRuleRefListLabelWalker;
817
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefListLabel; rewrite=true;}
818
+ s : ^(ID label+=a) -> a ;
819
+ a : ^(INT INT) ;
820
+ END
821
+
822
+ inline_grammar(<<-'END')
823
+ grammar RewriteModeWithPredicatedRewrites;
824
+ options {
825
+ language=Ruby;
826
+ output=AST;
827
+ }
828
+ a : ID INT -> ^(ID["root"] ^(ID INT)) | INT -> ^(ID["root"] INT) ;
829
+ ID : 'a'..'z'+ ;
830
+ INT : '0'..'9'+;
831
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
832
+ END
833
+
834
+ inline_grammar(<<-'END')
835
+ tree grammar RewriteModeWithPredicatedRewritesWalker;
836
+ options {
837
+ language=Ruby;
838
+ output=AST;
839
+ ASTLabelType=CommonTree;
840
+ tokenVocab=RewriteModeWithPredicatedRewrites;
841
+ rewrite=true;
842
+ }
843
+ s : ^(ID a) {
844
+ # self.buf += $s.start.to_string_tree
845
+ };
846
+ a : ^(ID INT) -> {true}? ^(ID["ick"] INT)
847
+ -> INT
848
+ ;
849
+ END
850
+
851
+ inline_grammar(<<-'END')
852
+ grammar WildcardSingleNode;
853
+ options {
854
+ language=Ruby;
855
+ output=AST;
856
+ }
857
+ a : ID INT -> ^(ID["root"] INT);
858
+ ID : 'a'..'z'+ ;
859
+ INT : '0'..'9'+;
860
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
861
+ END
862
+
863
+ inline_grammar(<<-'END')
864
+ tree grammar WildcardSingleNodeWalker;
865
+ options {
866
+ language=Ruby;
867
+ output=AST;
868
+ ASTLabelType=CommonTree;
869
+ tokenVocab=WildcardSingleNode;
870
+ }
871
+ s : ^(ID c=.) -> $c
872
+ ;
873
+ END
874
+
875
+ inline_grammar(<<-'END')
876
+ grammar WildcardUnlabeledSingleNode;
877
+ options {language=Ruby; output=AST;}
878
+ a : ID INT -> ^(ID INT);
879
+ ID : 'a'..'z'+ ;
880
+ INT : '0'..'9'+;
881
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
882
+ END
883
+
884
+ inline_grammar(<<-'END')
885
+ tree grammar WildcardUnlabeledSingleNodeWalker;
886
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardUnlabeledSingleNode;}
887
+ s : ^(ID .) -> ID
888
+ ;
889
+ END
890
+
891
+ inline_grammar(<<-'END')
892
+ grammar WildcardListLabel;
893
+ options {language=Ruby; output=AST;}
894
+ a : INT INT INT ;
895
+ ID : 'a'..'z'+ ;
896
+ INT : '0'..'9'+;
897
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
898
+ END
899
+
900
+ inline_grammar(<<-'END')
901
+ tree grammar WildcardListLabelWalker;
902
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardListLabel;}
903
+ s : (c+=.)+ -> $c+
904
+ ;
905
+ END
906
+
907
+ inline_grammar(<<-'END')
908
+ grammar WildcardListLabel2;
909
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree;}
910
+ a : x=INT y=INT z=INT -> ^($x ^($y $z) ^($y $z));
911
+ ID : 'a'..'z'+ ;
912
+ INT : '0'..'9'+;
913
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
914
+ END
915
+
916
+ inline_grammar(<<-'END')
917
+ tree grammar WildcardListLabel2Walker;
918
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardListLabel2; rewrite=true;}
919
+ s : ^(INT (c+=.)+) -> $c+
920
+ ;
921
+ END
922
+
923
+ inline_grammar(<<-'END')
924
+ grammar WildcardGrabsSubtree;
925
+ options {language=Ruby; output=AST;}
926
+ a : ID x=INT y=INT z=INT -> ^(ID[\"root\"] ^($x $y $z));
927
+ ID : 'a'..'z'+ ;
928
+ INT : '0'..'9'+;
929
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
930
+ END
931
+
932
+ inline_grammar(<<-'END')
933
+ tree grammar WildcardGrabsSubtreeWalker;
934
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardGrabsSubtree;}
935
+ s : ^(ID c=.) -> $c
936
+ ;
937
+ END
938
+
939
+ inline_grammar(<<-'END')
940
+ grammar WildcardGrabsSubtree2;
941
+ options {language=Ruby; output=AST;}
942
+ a : ID x=INT y=INT z=INT -> ID ^($x $y $z);
943
+ ID : 'a'..'z'+ ;
944
+ INT : '0'..'9'+;
945
+ WS : (' '|'\n') {$channel=HIDDEN;} ;
946
+ END
947
+
948
+ inline_grammar(<<-'END')
949
+ tree grammar WildcardGrabsSubtree2Walker;
950
+ options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardGrabsSubtree2;}
951
+ s : ID c=. -> $c
952
+ ;
953
+ END
954
+
955
+ inline_grammar(<<-END)
956
+ grammar CombinedRewriteAndAuto;
957
+ options {
958
+ language=Ruby;
959
+ output=AST;
960
+ }
961
+ a : ID INT -> ^(ID INT) | INT ;
962
+ ID : 'a'..'z'+ ;
963
+ INT : '0'..'9'+;
964
+ WS : (' '|'\\n') {$channel=HIDDEN;} ;
965
+ END
966
+
967
+ inline_grammar(<<-END)
968
+ tree grammar CombinedRewriteAndAutoWalker;
969
+ options {
970
+ language=Ruby;
971
+ output=AST;
972
+ ASTLabelType=CommonTree;
973
+ tokenVocab=CombinedRewriteAndAuto;
974
+ }
975
+ a : ^(ID INT) -> ^(INT ID) | INT;
976
+ END
977
+
978
+ inline_grammar(<<-END)
979
+ grammar RewriteModeCombinedRewriteAndAuto;
980
+ options {
981
+ language=Ruby;
982
+ output=AST;
983
+ }
984
+ a : ID INT -> ^(ID INT) | INT ;
985
+ ID : 'a'..'z'+ ;
986
+ INT : '0'..'9'+;
987
+ WS : (' '|'\\n') {$channel=HIDDEN;} ;
988
+ END
989
+
990
+ inline_grammar(<<-END)
991
+ tree grammar RewriteModeCombinedRewriteAndAutoWalker;
992
+ options {
993
+ language=Ruby;
994
+ output=AST;
995
+ ASTLabelType=CommonTree;
996
+ tokenVocab=RewriteModeCombinedRewriteAndAuto;
997
+ rewrite=true;
998
+ }
999
+ a : ^(ID INT) -> ^(ID["ick"] INT)
1000
+ | INT // leaves it alone, returning $a.start
1001
+ ;
1002
+ END
1003
+
1004
+ example "flat list" do
1005
+ lexer = FlatList::Lexer.new( "abc 34" )
1006
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1007
+ parser = FlatList::Parser.new( tokens )
1008
+
1009
+ result = parser.a
1010
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1011
+ nodes.token_stream = tokens
1012
+ walker = FlatListWalker::TreeParser.new( nodes )
1013
+ result = walker.a
1014
+ stree = result.tree.nil? ? '' : result.tree.inspect
1015
+ stree.should == "34 abc"
1016
+ end
1017
+
1018
+ example "simple tree" do
1019
+ lexer = SimpleTree::Lexer.new( "abc 34" )
1020
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1021
+ parser = SimpleTree::Parser.new( tokens )
1022
+
1023
+ result = parser.a
1024
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1025
+ nodes.token_stream = tokens
1026
+ walker = SimpleTreeWalker::TreeParser.new( nodes )
1027
+ result = walker.a
1028
+ stree = result.tree.nil? ? '' : result.tree.inspect
1029
+ stree.should == "(34 abc)"
1030
+ end
1031
+
1032
+ example "combined rewrite and auto" do
1033
+ lexer = CombinedRewriteAndAuto::Lexer.new( "abc 34" )
1034
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1035
+ parser = CombinedRewriteAndAuto::Parser.new( tokens )
1036
+
1037
+ result = parser.a
1038
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1039
+ nodes.token_stream = tokens
1040
+ walker = CombinedRewriteAndAutoWalker::TreeParser.new( nodes )
1041
+ result = walker.a.tree
1042
+ result.inspect.should == '(34 abc)'
1043
+ lexer = CombinedRewriteAndAuto::Lexer.new( "34" )
1044
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1045
+ parser = CombinedRewriteAndAuto::Parser.new( tokens )
1046
+
1047
+ result = parser.a
1048
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1049
+ nodes.token_stream = tokens
1050
+ walker = CombinedRewriteAndAutoWalker::TreeParser.new( nodes )
1051
+ result = walker.a.tree
1052
+ result.inspect.should == '34'
1053
+ end
1054
+
1055
+ example "avoid dup" do
1056
+ lexer = AvoidDup::Lexer.new( "abc" )
1057
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1058
+ parser = AvoidDup::Parser.new( tokens )
1059
+
1060
+ result = parser.a
1061
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1062
+ nodes.token_stream = tokens
1063
+ walker = AvoidDupWalker::TreeParser.new( nodes )
1064
+ result = walker.a
1065
+ stree = result.tree.nil? ? '' : result.tree.inspect
1066
+ stree.should == "(abc abc)"
1067
+ end
1068
+
1069
+ example "loop" do
1070
+ lexer = Loop::Lexer.new( "a b c 3 4 5" )
1071
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1072
+ parser = Loop::Parser.new( tokens )
1073
+
1074
+ result = parser.a
1075
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1076
+ nodes.token_stream = tokens
1077
+ walker = LoopWalker::TreeParser.new( nodes )
1078
+ result = walker.a
1079
+ stree = result.tree.nil? ? '' : result.tree.inspect
1080
+ stree.should == "3 4 5 a b c"
1081
+ end
1082
+
1083
+ example "auto dup" do
1084
+ lexer = AutoDup::Lexer.new( "abc" )
1085
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1086
+ parser = AutoDup::Parser.new( tokens )
1087
+
1088
+ result = parser.a
1089
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1090
+ nodes.token_stream = tokens
1091
+ walker = AutoDupWalker::TreeParser.new( nodes )
1092
+ result = walker.a
1093
+ stree = result.tree.nil? ? '' : result.tree.inspect
1094
+ stree.should == "abc"
1095
+ end
1096
+
1097
+ example "auto dup rule" do
1098
+ lexer = AutoDupRule::Lexer.new( "a 1" )
1099
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1100
+ parser = AutoDupRule::Parser.new( tokens )
1101
+
1102
+ result = parser.a
1103
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1104
+ nodes.token_stream = tokens
1105
+ walker = AutoDupRuleWalker::TreeParser.new( nodes )
1106
+ result = walker.a
1107
+ stree = result.tree.nil? ? '' : result.tree.inspect
1108
+ stree.should == "a 1"
1109
+ end
1110
+
1111
+ example "auto wildcard" do
1112
+ lexer = AutoWildcard::Lexer.new( "abc 34" )
1113
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1114
+ parser = AutoWildcard::Parser.new( tokens )
1115
+
1116
+ result = parser.a
1117
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1118
+ nodes.token_stream = tokens
1119
+ walker = AutoWildcardWalker::TreeParser.new( nodes )
1120
+ result = walker.a
1121
+ stree = result.tree.nil? ? '' : result.tree.inspect
1122
+ stree.should == "abc 34"
1123
+ end
1124
+
1125
+ example "auto wildcard2" do
1126
+ lexer = AutoWildcard2::Lexer.new( "abc 34" )
1127
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1128
+ parser = AutoWildcard2::Parser.new( tokens )
1129
+
1130
+ result = parser.a
1131
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1132
+ nodes.token_stream = tokens
1133
+ walker = AutoWildcard2Walker::TreeParser.new( nodes )
1134
+ result = walker.a
1135
+ stree = result.tree.nil? ? '' : result.tree.inspect
1136
+ stree.should == "(abc 34)"
1137
+ end
1138
+
1139
+ example "auto wildcard with label" do
1140
+ lexer = AutoWildcardWithLabel::Lexer.new( "abc 34" )
1141
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1142
+ parser = AutoWildcardWithLabel::Parser.new( tokens )
1143
+
1144
+ result = parser.a
1145
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1146
+ nodes.token_stream = tokens
1147
+ walker = AutoWildcardWithLabelWalker::TreeParser.new( nodes )
1148
+ result = walker.a
1149
+ stree = result.tree.nil? ? '' : result.tree.inspect
1150
+ stree.should == "abc 34"
1151
+ end
1152
+
1153
+ example "auto wildcard with list label" do
1154
+ lexer = AutoWildcardWithListLabel::Lexer.new( "abc 34" )
1155
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1156
+ parser = AutoWildcardWithListLabel::Parser.new( tokens )
1157
+
1158
+ result = parser.a
1159
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1160
+ nodes.token_stream = tokens
1161
+ walker = AutoWildcardWithListLabelWalker::TreeParser.new( nodes )
1162
+ result = walker.a
1163
+ stree = result.tree.nil? ? '' : result.tree.inspect
1164
+ stree.should == "abc 34"
1165
+ end
1166
+
1167
+ example "auto dup multiple" do
1168
+ lexer = AutoDupMultiple::Lexer.new( "a b 3" )
1169
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1170
+ parser = AutoDupMultiple::Parser.new( tokens )
1171
+
1172
+ result = parser.a
1173
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1174
+ nodes.token_stream = tokens
1175
+ walker = AutoDupMultipleWalker::TreeParser.new( nodes )
1176
+ result = walker.a
1177
+ stree = result.tree.nil? ? '' : result.tree.inspect
1178
+ stree.should == "a b 3"
1179
+ end
1180
+
1181
+ example "auto dup tree" do
1182
+ lexer = AutoDupTree::Lexer.new( "a 3" )
1183
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1184
+ parser = AutoDupTree::Parser.new( tokens )
1185
+
1186
+ result = parser.a
1187
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1188
+ nodes.token_stream = tokens
1189
+ walker = AutoDupTreeWalker::TreeParser.new( nodes )
1190
+ result = walker.a
1191
+ stree = result.tree.nil? ? '' : result.tree.inspect
1192
+ stree.should == "(a 3)"
1193
+ end
1194
+
1195
+ example "auto dup tree with labels" do
1196
+ lexer = AutoDupTreeWithLabels::Lexer.new( "a 3" )
1197
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1198
+ parser = AutoDupTreeWithLabels::Parser.new( tokens )
1199
+
1200
+ result = parser.a
1201
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1202
+ nodes.token_stream = tokens
1203
+ walker = AutoDupTreeWithLabelsWalker::TreeParser.new( nodes )
1204
+ result = walker.a
1205
+ stree = result.tree.nil? ? '' : result.tree.inspect
1206
+ stree.should == "(a 3)"
1207
+ end
1208
+
1209
+ example "auto dup tree with list labels" do
1210
+ lexer = AutoDupTreeWithListLabels::Lexer.new( "a 3" )
1211
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1212
+ parser = AutoDupTreeWithListLabels::Parser.new( tokens )
1213
+
1214
+ result = parser.a
1215
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1216
+ nodes.token_stream = tokens
1217
+ walker = AutoDupTreeWithListLabelsWalker::TreeParser.new( nodes )
1218
+ result = walker.a
1219
+ stree = result.tree.nil? ? '' : result.tree.inspect
1220
+ stree.should == "(a 3)"
1221
+ end
1222
+
1223
+ example "auto dup tree with rule root" do
1224
+ lexer = AutoDupTreeWithRuleRoot::Lexer.new( "a 3" )
1225
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1226
+ parser = AutoDupTreeWithRuleRoot::Parser.new( tokens )
1227
+
1228
+ result = parser.a
1229
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1230
+ nodes.token_stream = tokens
1231
+ walker = AutoDupTreeWithRuleRootWalker::TreeParser.new( nodes )
1232
+ result = walker.a
1233
+ stree = result.tree.nil? ? '' : result.tree.inspect
1234
+ stree.should == "(a 3)"
1235
+ end
1236
+
1237
+ example "auto dup tree with rule root and labels" do
1238
+ lexer = AutoDupTreeWithRuleRootAndLabels::Lexer.new( "a 3" )
1239
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1240
+ parser = AutoDupTreeWithRuleRootAndLabels::Parser.new( tokens )
1241
+
1242
+ result = parser.a
1243
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1244
+ nodes.token_stream = tokens
1245
+ walker = AutoDupTreeWithRuleRootAndLabelsWalker::TreeParser.new( nodes )
1246
+ result = walker.a
1247
+ stree = result.tree.nil? ? '' : result.tree.inspect
1248
+ stree.should == "(a 3)"
1249
+ end
1250
+
1251
+ example "auto dup tree with rule root and list labels" do
1252
+ lexer = AutoDupTreeWithRuleRootAndListLabels::Lexer.new( "a 3" )
1253
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1254
+ parser = AutoDupTreeWithRuleRootAndListLabels::Parser.new( tokens )
1255
+
1256
+ result = parser.a
1257
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1258
+ nodes.token_stream = tokens
1259
+ walker = AutoDupTreeWithRuleRootAndListLabelsWalker::TreeParser.new( nodes )
1260
+ result = walker.a
1261
+ stree = result.tree.nil? ? '' : result.tree.inspect
1262
+ stree.should == "(a 3)"
1263
+ end
1264
+
1265
+ example "auto dup nested tree" do
1266
+ lexer = AutoDupNestedTree::Lexer.new( "a b 3" )
1267
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1268
+ parser = AutoDupNestedTree::Parser.new( tokens )
1269
+
1270
+ result = parser.a
1271
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1272
+ nodes.token_stream = tokens
1273
+ walker = AutoDupNestedTreeWalker::TreeParser.new( nodes )
1274
+ result = walker.a
1275
+ stree = result.tree.nil? ? '' : result.tree.inspect
1276
+ stree.should == "(a (b 3))"
1277
+ end
1278
+
1279
+ example "delete" do
1280
+ lexer = Delete::Lexer.new( "abc" )
1281
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1282
+ parser = Delete::Parser.new( tokens )
1283
+
1284
+ result = parser.a
1285
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1286
+ nodes.token_stream = tokens
1287
+ walker = DeleteWalker::TreeParser.new( nodes )
1288
+ result = walker.a
1289
+ stree = result.tree.nil? ? '' : result.tree.inspect
1290
+ stree.should == ""
1291
+ end
1292
+
1293
+ example "set match no rewrite" do
1294
+ lexer = SetMatchNoRewrite::Lexer.new( "abc 34" )
1295
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1296
+ parser = SetMatchNoRewrite::Parser.new( tokens )
1297
+
1298
+ result = parser.a
1299
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1300
+ nodes.token_stream = tokens
1301
+ walker = SetMatchNoRewriteWalker::TreeParser.new( nodes )
1302
+ result = walker.a
1303
+ stree = result.tree.nil? ? '' : result.tree.inspect
1304
+ stree.should == "abc 34"
1305
+ end
1306
+
1307
+ example "set optional match no rewrite" do
1308
+ lexer = SetOptionalMatchNoRewrite::Lexer.new( "abc 34" )
1309
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1310
+ parser = SetOptionalMatchNoRewrite::Parser.new( tokens )
1311
+
1312
+ result = parser.a
1313
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1314
+ nodes.token_stream = tokens
1315
+ walker = SetOptionalMatchNoRewriteWalker::TreeParser.new( nodes )
1316
+ result = walker.a
1317
+ stree = result.tree.nil? ? '' : result.tree.inspect
1318
+ stree.should == "abc 34"
1319
+ end
1320
+
1321
+ example "set match no rewrite level2" do
1322
+ lexer = SetMatchNoRewriteLevel2::Lexer.new( "abc 34" )
1323
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1324
+ parser = SetMatchNoRewriteLevel2::Parser.new( tokens )
1325
+
1326
+ result = parser.a
1327
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1328
+ nodes.token_stream = tokens
1329
+ walker = SetMatchNoRewriteLevel2Walker::TreeParser.new( nodes )
1330
+ result = walker.a
1331
+ stree = result.tree.nil? ? '' : result.tree.inspect
1332
+ stree.should == "(abc 34)"
1333
+ end
1334
+
1335
+ example "set match no rewrite level2 root" do
1336
+ lexer = SetMatchNoRewriteLevel2Root::Lexer.new( "abc 34" )
1337
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1338
+ parser = SetMatchNoRewriteLevel2Root::Parser.new( tokens )
1339
+
1340
+ result = parser.a
1341
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1342
+ nodes.token_stream = tokens
1343
+ walker = SetMatchNoRewriteLevel2RootWalker::TreeParser.new( nodes )
1344
+ result = walker.a
1345
+ stree = result.tree.nil? ? '' : result.tree.inspect
1346
+ stree.should == "(abc 34)"
1347
+ end
1348
+
1349
+ example "rewrite mode combined rewrite and auto" do
1350
+
1351
+ parser_test = proc do |input, expected_output|
1352
+ lexer = RewriteModeCombinedRewriteAndAuto::Lexer.new( input )
1353
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1354
+ parser = RewriteModeCombinedRewriteAndAuto::Parser.new( tokens )
1355
+ result = parser.a
1356
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1357
+ nodes.token_stream = tokens
1358
+ walker = RewriteModeCombinedRewriteAndAutoWalker::TreeParser.new( nodes )
1359
+ result = walker.a
1360
+ stree = result.tree.nil? ? '' : result.tree.inspect
1361
+ stree.should == expected_output
1362
+ end
1363
+
1364
+ parser_test[ 'abc 34', '(ick 34)' ]
1365
+ parser_test[ '34', '34' ]
1366
+ end
1367
+
1368
+ example "rewrite mode flat tree" do
1369
+ lexer = RewriteModeFlatTree::Lexer.new( "abc 34" )
1370
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1371
+ parser = RewriteModeFlatTree::Parser.new( tokens )
1372
+
1373
+ result = parser.a
1374
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1375
+ nodes.token_stream = tokens
1376
+ walker = RewriteModeFlatTreeWalker::TreeParser.new( nodes )
1377
+ result = walker.s
1378
+ stree = result.tree.nil? ? '' : result.tree.inspect
1379
+ stree.should == "abc 1"
1380
+ end
1381
+
1382
+ example "rewrite mode chain rule flat tree" do
1383
+ lexer = RewriteModeChainRuleFlatTree::Lexer.new( "abc 34" )
1384
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1385
+ parser = RewriteModeChainRuleFlatTree::Parser.new( tokens )
1386
+
1387
+ result = parser.a
1388
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1389
+ nodes.token_stream = tokens
1390
+ walker = RewriteModeChainRuleFlatTreeWalker::TreeParser.new( nodes )
1391
+ result = walker.s
1392
+ stree = result.tree.nil? ? '' : result.tree.inspect
1393
+ stree.should == "34 abc"
1394
+ end
1395
+
1396
+ example "rewrite mode chain rule tree" do
1397
+ lexer = RewriteModeChainRuleTree::Lexer.new( "abc 34" )
1398
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1399
+ parser = RewriteModeChainRuleTree::Parser.new( tokens )
1400
+
1401
+ result = parser.a
1402
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1403
+ nodes.token_stream = tokens
1404
+ walker = RewriteModeChainRuleTreeWalker::TreeParser.new( nodes )
1405
+ result = walker.s
1406
+ stree = result.tree.nil? ? '' : result.tree.inspect
1407
+ stree.should == "34"
1408
+ end
1409
+
1410
+ example "rewrite mode chain rule tree2" do
1411
+ lexer = RewriteModeChainRuleTree2::Lexer.new( "abc 34" )
1412
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1413
+ parser = RewriteModeChainRuleTree2::Parser.new( tokens )
1414
+
1415
+ result = parser.a
1416
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1417
+ nodes.token_stream = tokens
1418
+ walker = RewriteModeChainRuleTree2Walker::TreeParser.new( nodes )
1419
+ result = walker.s
1420
+ stree = result.tree.nil? ? '' : result.tree.inspect
1421
+ stree.should == "34"
1422
+ end
1423
+
1424
+ example "rewrite mode chain rule tree3" do
1425
+ lexer = RewriteModeChainRuleTree3::Lexer.new( "boo abc 34" )
1426
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1427
+ parser = RewriteModeChainRuleTree3::Parser.new( tokens )
1428
+
1429
+ result = parser.a
1430
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1431
+ nodes.token_stream = tokens
1432
+ walker = RewriteModeChainRuleTree3Walker::TreeParser.new( nodes )
1433
+ result = walker.s
1434
+ stree = result.tree.nil? ? '' : result.tree.inspect
1435
+ stree.should == "boo 34"
1436
+ end
1437
+
1438
+ example "rewrite mode chain rule tree4" do
1439
+ lexer = RewriteModeChainRuleTree4::Lexer.new( "boo abc 34" )
1440
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1441
+ parser = RewriteModeChainRuleTree4::Parser.new( tokens )
1442
+
1443
+ result = parser.a
1444
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1445
+ nodes.token_stream = tokens
1446
+ walker = RewriteModeChainRuleTree4Walker::TreeParser.new( nodes )
1447
+ result = walker.s
1448
+ stree = result.tree.nil? ? '' : result.tree.inspect
1449
+ stree.should == "(boo 34)"
1450
+ end
1451
+
1452
+ example "rewrite mode chain rule tree5" do
1453
+ lexer = RewriteModeChainRuleTree5::Lexer.new( "boo abc 34" )
1454
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1455
+ parser = RewriteModeChainRuleTree5::Parser.new( tokens )
1456
+
1457
+ result = parser.a
1458
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1459
+ nodes.token_stream = tokens
1460
+ walker = RewriteModeChainRuleTree5Walker::TreeParser.new( nodes )
1461
+ result = walker.s
1462
+ stree = result.tree.nil? ? '' : result.tree.inspect
1463
+ stree.should == "(boo 34)"
1464
+ end
1465
+
1466
+ example "rewrite of rule ref" do
1467
+ lexer = RewriteOfRuleRef::Lexer.new( "abc 34" )
1468
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1469
+ parser = RewriteOfRuleRef::Parser.new( tokens )
1470
+
1471
+ result = parser.a
1472
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1473
+ nodes.token_stream = tokens
1474
+ walker = RewriteOfRuleRefWalker::TreeParser.new( nodes )
1475
+ result = walker.s
1476
+ stree = result.tree.nil? ? '' : result.tree.inspect
1477
+ stree.should == "abc 34"
1478
+ end
1479
+
1480
+ example "rewrite of rule ref root" do
1481
+ lexer = RewriteOfRuleRefRoot::Lexer.new( "abc 12 34" )
1482
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1483
+ parser = RewriteOfRuleRefRoot::Parser.new( tokens )
1484
+
1485
+ result = parser.a
1486
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1487
+ nodes.token_stream = tokens
1488
+ walker = RewriteOfRuleRefRootWalker::TreeParser.new( nodes )
1489
+ result = walker.s
1490
+ stree = result.tree.nil? ? '' : result.tree.inspect
1491
+ stree.should == "(12 (abc 34))"
1492
+ end
1493
+
1494
+ example "rewrite of rule ref root labeled" do
1495
+ lexer = RewriteOfRuleRefRootLabeled::Lexer.new( "abc 12 34" )
1496
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1497
+ parser = RewriteOfRuleRefRootLabeled::Parser.new( tokens )
1498
+
1499
+ result = parser.a
1500
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1501
+ nodes.token_stream = tokens
1502
+ walker = RewriteOfRuleRefRootLabeledWalker::TreeParser.new( nodes )
1503
+ result = walker.s
1504
+ stree = result.tree.nil? ? '' : result.tree.inspect
1505
+ stree.should == "(12 (abc 34))"
1506
+ end
1507
+
1508
+ example "rewrite of rule ref root list labeled" do
1509
+ lexer = RewriteOfRuleRefRootListLabeled::Lexer.new( "abc 12 34" )
1510
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1511
+ parser = RewriteOfRuleRefRootListLabeled::Parser.new( tokens )
1512
+
1513
+ result = parser.a
1514
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1515
+ nodes.token_stream = tokens
1516
+ walker = RewriteOfRuleRefRootListLabeledWalker::TreeParser.new( nodes )
1517
+ result = walker.s
1518
+ stree = result.tree.nil? ? '' : result.tree.inspect
1519
+ stree.should == "(12 (abc 34))"
1520
+ end
1521
+
1522
+ example "rewrite of rule ref child" do
1523
+ lexer = RewriteOfRuleRefChild::Lexer.new( "abc 34" )
1524
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1525
+ parser = RewriteOfRuleRefChild::Parser.new( tokens )
1526
+
1527
+ result = parser.a
1528
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1529
+ nodes.token_stream = tokens
1530
+ walker = RewriteOfRuleRefChildWalker::TreeParser.new( nodes )
1531
+ result = walker.s
1532
+ stree = result.tree.nil? ? '' : result.tree.inspect
1533
+ stree.should == "(34 34)"
1534
+ end
1535
+
1536
+ example "rewrite of rule ref label" do
1537
+ lexer = RewriteOfRuleRefLabel::Lexer.new( "abc 34" )
1538
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1539
+ parser = RewriteOfRuleRefLabel::Parser.new( tokens )
1540
+
1541
+ result = parser.a
1542
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1543
+ nodes.token_stream = tokens
1544
+ walker = RewriteOfRuleRefLabelWalker::TreeParser.new( nodes )
1545
+ result = walker.s
1546
+ stree = result.tree.nil? ? '' : result.tree.inspect
1547
+ stree.should == "(34 34)"
1548
+ end
1549
+
1550
+ example "rewrite of rule ref list label" do
1551
+ lexer = RewriteOfRuleRefListLabel::Lexer.new( "abc 34" )
1552
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1553
+ parser = RewriteOfRuleRefListLabel::Parser.new( tokens )
1554
+
1555
+ result = parser.a
1556
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1557
+ nodes.token_stream = tokens
1558
+ walker = RewriteOfRuleRefListLabelWalker::TreeParser.new( nodes )
1559
+ result = walker.s
1560
+ stree = result.tree.nil? ? '' : result.tree.inspect
1561
+ stree.should == "(34 34)"
1562
+ end
1563
+
1564
+ example "rewrite mode with predicated rewrites" do
1565
+ lexer = RewriteModeWithPredicatedRewrites::Lexer.new( "abc 34" )
1566
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1567
+ parser = RewriteModeWithPredicatedRewrites::Parser.new( tokens )
1568
+
1569
+ result = parser.a
1570
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1571
+ nodes.token_stream = tokens
1572
+ walker = RewriteModeWithPredicatedRewritesWalker::TreeParser.new( nodes )
1573
+ result = walker.s
1574
+ stree = result.tree.nil? ? '' : result.tree.inspect
1575
+ stree.should == "(root (ick 34))"
1576
+ end
1577
+
1578
+ example "wildcard single node" do
1579
+ lexer = WildcardSingleNode::Lexer.new( "abc 34" )
1580
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1581
+ parser = WildcardSingleNode::Parser.new( tokens )
1582
+
1583
+ result = parser.a
1584
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1585
+ nodes.token_stream = tokens
1586
+ walker = WildcardSingleNodeWalker::TreeParser.new( nodes )
1587
+ result = walker.s
1588
+ stree = result.tree.nil? ? '' : result.tree.inspect
1589
+ stree.should == "34"
1590
+ end
1591
+
1592
+ example "wildcard unlabeled single node" do
1593
+ lexer = WildcardUnlabeledSingleNode::Lexer.new( "abc 34" )
1594
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1595
+ parser = WildcardUnlabeledSingleNode::Parser.new( tokens )
1596
+
1597
+ result = parser.a
1598
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1599
+ nodes.token_stream = tokens
1600
+ walker = WildcardUnlabeledSingleNodeWalker::TreeParser.new( nodes )
1601
+ result = walker.s
1602
+ stree = result.tree.nil? ? '' : result.tree.inspect
1603
+ stree.should == "abc"
1604
+ end
1605
+
1606
+ example "wildcard grabs subtree" do
1607
+ lexer = WildcardGrabsSubtree::Lexer.new( "abc 1 2 3" )
1608
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1609
+ parser = WildcardGrabsSubtree::Parser.new( tokens )
1610
+
1611
+ result = parser.a
1612
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1613
+ nodes.token_stream = tokens
1614
+ walker = WildcardGrabsSubtreeWalker::TreeParser.new( nodes )
1615
+ result = walker.s
1616
+ stree = result.tree.nil? ? '' : result.tree.inspect
1617
+ stree.should == "(1 2 3)"
1618
+ end
1619
+
1620
+ example "wildcard grabs subtree2" do
1621
+ lexer = WildcardGrabsSubtree2::Lexer.new( "abc 1 2 3" )
1622
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1623
+ parser = WildcardGrabsSubtree2::Parser.new( tokens )
1624
+
1625
+ result = parser.a
1626
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1627
+ nodes.token_stream = tokens
1628
+ walker = WildcardGrabsSubtree2Walker::TreeParser.new( nodes )
1629
+ result = walker.s
1630
+ stree = result.tree.nil? ? '' : result.tree.inspect
1631
+ stree.should == "(1 2 3)"
1632
+ end
1633
+
1634
+ example "wildcard list label" do
1635
+ lexer = WildcardListLabel::Lexer.new( "1 2 3" )
1636
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1637
+ parser = WildcardListLabel::Parser.new( tokens )
1638
+
1639
+ result = parser.a
1640
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1641
+ nodes.token_stream = tokens
1642
+ walker = WildcardListLabelWalker::TreeParser.new( nodes )
1643
+ result = walker.s
1644
+ stree = result.tree.nil? ? '' : result.tree.inspect
1645
+ stree.should == "1 2 3"
1646
+ end
1647
+
1648
+ example "wildcard list label2" do
1649
+ lexer = WildcardListLabel2::Lexer.new( "1 2 3" )
1650
+ tokens = ANTLR3::CommonTokenStream.new( lexer )
1651
+ parser = WildcardListLabel2::Parser.new( tokens )
1652
+
1653
+ result = parser.a
1654
+ nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1655
+ nodes.token_stream = tokens
1656
+ walker = WildcardListLabel2Walker::TreeParser.new( nodes )
1657
+ result = walker.s
1658
+ stree = result.tree.nil? ? '' : result.tree.inspect
1659
+ stree.should == "(2 3) (2 3)"
1660
+ end
1661
+
1662
+ end