antlr3 1.2.3

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 (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