1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#!/usr/bin/ruby
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# encoding: utf-8
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequire 'antlr3/test/functional'
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestASTRewritingTreeParsers < ANTLR3::Test::Functional
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar FlatList;
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      language=Ruby;
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      output=AST;
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT;
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar FlatListWalker;
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      language=Ruby;
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      output=AST;
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ASTLabelType=CommonTree;
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      tokenVocab=FlatList;
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> INT ID;
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar SimpleTree;
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT);
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar SimpleTreeWalker;
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=SimpleTree;
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(ID INT) -> ^(INT ID);
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-END )
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar CombinedRewriteAndAuto;
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT) | INT ;
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\\n') {$channel=HIDDEN;} ;
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-END )
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar CombinedRewriteAndAutoTree;
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=CombinedRewriteAndAuto;
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(ID INT) -> ^(INT ID) | INT;
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AvoidDup;
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID ;
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AvoidDupWalker;
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=AvoidDup;
97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID -> ^(ID ID);
99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar Loop;
103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID+ INT+ -> (^(ID INT))+ ;
108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar LoopWalker;
115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=Loop;
120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : (^(ID INT))+ -> INT+ ID+;
122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoDup;
126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID ;
131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoDupWalker;
138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=AutoDup;
143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID;
145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoDupRule;
149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT ;
154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoDupRuleWalker;
161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=AutoDupRule;
166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : b c ;
168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    b : ID ;
169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    c : INT ;
170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoWildcard;
174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby;output=AST;}
175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT ;
176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoWildcardWalker;
183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby;output=AST; ASTLabelType=CommonTree; tokenVocab=AutoWildcard;}
184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID . 
185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoWildcard2;
190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby;output=AST;}
191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT);
192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoWildcard2Walker;
199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby;output=AST; ASTLabelType=CommonTree; tokenVocab=AutoWildcard2;}
200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(ID .) 
201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoWildcardWithLabel;
206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby;output=AST;}
207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT ;
208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoWildcardWithLabelWalker;
215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby;output=AST; ASTLabelType=CommonTree; tokenVocab=AutoWildcardWithLabel;}
216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID c=. 
217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoWildcardWithListLabel;
222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby;output=AST;}
223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT ;
224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoWildcardWithListLabelWalker;
231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby;output=AST; ASTLabelType=CommonTree; tokenVocab=AutoWildcardWithListLabel;}
232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID c+=. 
233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoDupMultiple;
238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID ID INT;
243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoDupMultipleWalker;
250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=AutoDupMultiple;
255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID ID INT
257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoDupTree;
262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT);
267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoDupTreeWalker;
274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=AutoDupTree;
279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(ID INT)
281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoDupTreeWithLabels;
286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT);
291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoDupTreeWithLabelsWalker;
298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=AutoDupTreeWithLabels;
303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(x=ID y=INT)
305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoDupTreeWithListLabels;
310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT);
315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoDupTreeWithListLabelsWalker;
322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=AutoDupTreeWithListLabels;
327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(x+=ID y+=INT)
329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoDupTreeWithRuleRoot;
334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT);
339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoDupTreeWithRuleRootWalker;
346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=AutoDupTreeWithRuleRoot;
351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(b INT) ;
353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    b : ID ;
354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoDupTreeWithRuleRootAndLabels;
358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT);
363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoDupTreeWithRuleRootAndLabelsWalker;
370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=AutoDupTreeWithRuleRootAndLabels;
375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(x=b INT) ;
377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    b : ID ;
378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoDupTreeWithRuleRootAndListLabels;
382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT);
387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoDupTreeWithRuleRootAndListLabelsWalker;
394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=AutoDupTreeWithRuleRootAndListLabels;
399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(x+=b y+=c) ;
401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    b : ID ;
402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    c : INT ;
403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar AutoDupNestedTree;
407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : x=ID y=ID INT -> ^($x ^($y INT));
412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar AutoDupNestedTreeWalker;
419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=AutoDupNestedTree;
424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(ID ^(ID INT))
426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar Delete;
431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID ;
436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar DeleteWalker;
443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=Delete;
448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID -> 
450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar SetMatchNoRewrite;
455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT ;
460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
461324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar SetMatchNoRewriteWalker;
467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=SetMatchNoRewrite;
472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : b INT;
474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    b : ID | INT;
475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar SetOptionalMatchNoRewrite;
479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT ;
484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar SetOptionalMatchNoRewriteWalker;
491324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
492324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
493324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
494324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
495324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=SetOptionalMatchNoRewrite;
496324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
497324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : (ID|INT)? INT ;
498324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
499324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
500324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
501324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar SetMatchNoRewriteLevel2;
502324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
503324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
504324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
505324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
506324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : x=ID INT -> ^($x INT);
507324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
508324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
509324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
510324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
511324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
512324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
513324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar SetMatchNoRewriteLevel2Walker;
514324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
515324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
516324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
517324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
518324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=SetMatchNoRewriteLevel2;
519324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
520324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(ID (ID | INT) ) ;
521324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
522324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
523324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
524324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar SetMatchNoRewriteLevel2Root;
525324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
526324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
527324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
528324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
529324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : x=ID INT -> ^($x INT);
530324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
531324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
532324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
533324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
534324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
535324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
536324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar SetMatchNoRewriteLevel2RootWalker;
537324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
538324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
539324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
540324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
541324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=SetMatchNoRewriteLevel2Root;
542324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
543324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^((ID | INT) INT) ;
544324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
545324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
546324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-END )
547324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteModeCombinedRewriteAndAuto;
548324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
549324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
550324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
551324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
552324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT) | INT ;
553324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
554324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
555324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\\n') {$channel=HIDDEN;} ;
556324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
557324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
558324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-END )
559324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteModeCombinedRewriteAndAutoTree;
560324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
561324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
562324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
563324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
564324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=RewriteModeCombinedRewriteAndAuto;
565324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        rewrite=true;
566324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
567324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(ID INT) -> ^(ID["ick"] INT)
568324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      | INT // leaves it alone, returning $a.start
569324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
570324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
571324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
572324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
573324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteModeFlatTree;
574324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
575324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      language=Ruby;
576324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      output=AST;
577324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
578324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ID INT | INT ;
579324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
580324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
581324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
582324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
583324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
584324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
585324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteModeFlatTreeWalker;
586324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
587324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      language=Ruby;
588324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      output=AST;
589324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ASTLabelType=CommonTree;
590324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      tokenVocab=RewriteModeFlatTree;
591324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      rewrite=true;
592324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
593324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ID a ;
594324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : INT -> INT["1"]
595324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
596324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
597324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
598324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
599324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteModeChainRuleFlatTree;
600324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
601324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ID INT | INT ;
602324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
603324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
604324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
605324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
606324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
607324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
608324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteModeChainRuleFlatTreeWalker;
609324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleFlatTree; rewrite=true;}
610324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : a ;
611324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : b ;
612324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    b : ID INT -> INT ID
613324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
614324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
615324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
616324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
617324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteModeChainRuleTree;
618324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
619324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT) ;
620324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
621324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
622324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
623324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
624324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
625324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
626324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteModeChainRuleTreeWalker;
627324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree; rewrite=true;}
628324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : a ;
629324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : b ; // a.tree must become b.tree
630324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    b : ^(ID INT) -> INT
631324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
632324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
633324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
634324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
635324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteModeChainRuleTree2;
636324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
637324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT) ;
638324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
639324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
640324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
641324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
642324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
643324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
644324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteModeChainRuleTree2Walker;
645324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree2; rewrite=true;}
646324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens { X; }
647324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : a* b ; // only b contributes to tree, but it's after a*; s.tree = b.tree
648324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : X ;
649324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    b : ^(ID INT) -> INT
650324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
651324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
652324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
653324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
654324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteModeChainRuleTree3;
655324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
656324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : 'boo' ID INT -> 'boo' ^(ID INT) ;
657324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
658324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
659324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
660324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
661324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
662324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
663324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteModeChainRuleTree3Walker;
664324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree3; rewrite=true;}
665324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens { X; }
666324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : 'boo' a* b ; // don't reset s.tree to b.tree due to 'boo'
667324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : X ;
668324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    b : ^(ID INT) -> INT
669324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
670324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
671324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
672324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
673324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteModeChainRuleTree4;
674324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
675324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : 'boo' ID INT -> ^('boo' ^(ID INT)) ;
676324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
677324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
678324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
679324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
680324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
681324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
682324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteModeChainRuleTree4Walker;
683324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree4; rewrite=true;}
684324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens { X; }
685324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ^('boo' a* b) ; // don't reset s.tree to b.tree due to 'boo'
686324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : X ;
687324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    b : ^(ID INT) -> INT
688324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
689324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
690324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
691324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
692324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteModeChainRuleTree5;
693324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
694324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : 'boo' ID INT -> ^('boo' ^(ID INT)) ;
695324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
696324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
697324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
698324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
699324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
700324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
701324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteModeChainRuleTree5Walker;
702324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree5; rewrite=true;}
703324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens { X; }
704324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ^(a b) ; // s.tree is a.tree
705324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : 'boo' ;
706324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    b : ^(ID INT) -> INT
707324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
708324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
709324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
710324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
711324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteOfRuleRef;
712324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
713324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ID INT | INT ;
714324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
715324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
716324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
717324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
718324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
719324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
720324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteOfRuleRefWalker;
721324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRef; rewrite=true;}
722324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : a -> a ;
723324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ID INT ;
724324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
725324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
726324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
727324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteOfRuleRefRoot;
728324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
729324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT INT -> ^(INT ^(ID INT));
730324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
731324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
732324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
733324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
734324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
735324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
736324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteOfRuleRefRootWalker;
737324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefRoot; rewrite=true;}
738324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ^(a ^(ID INT)) -> a ;
739324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : INT ;
740324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
741324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
742324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
743324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteOfRuleRefRootLabeled;
744324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
745324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT INT -> ^(INT ^(ID INT));
746324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
747324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
748324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
749324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
750324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
751324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
752324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteOfRuleRefRootLabeledWalker;
753324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefRootLabeled; rewrite=true;}
754324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ^(label=a ^(ID INT)) -> a ;
755324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : INT ;
756324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
757324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
758324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
759324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteOfRuleRefRootListLabeled;
760324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
761324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT INT -> ^(INT ^(ID INT));
762324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
763324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
764324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
765324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
766324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
767324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
768324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteOfRuleRefRootListLabeledWalker;
769324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefRootListLabeled; rewrite=true;}
770324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ^(label+=a ^(ID INT)) -> a ;
771324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : INT ;
772324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
773324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
774324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
775324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteOfRuleRefChild;
776324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
777324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID ^(INT INT));
778324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
779324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
780324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
781324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
782324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
783324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
784324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteOfRuleRefChildWalker;
785324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefChild; rewrite=true;}
786324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ^(ID a) -> a ;
787324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(INT INT) ;
788324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
789324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
790324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
791324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteOfRuleRefLabel;
792324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
793324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID ^(INT INT));
794324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
795324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
796324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
797324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
798324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
799324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
800324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteOfRuleRefLabelWalker;
801324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefLabel; rewrite=true;}
802324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ^(ID label=a) -> a ;
803324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(INT INT) ;
804324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
805324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
806324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
807324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteOfRuleRefListLabel;
808324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
809324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID ^(INT INT));
810324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
811324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
812324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
813324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
814324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
815324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
816324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteOfRuleRefListLabelWalker;
817324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefListLabel; rewrite=true;}
818324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ^(ID label+=a) -> a ;
819324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(INT INT) ;
820324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
821324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
822324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
823324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteModeWithPredicatedRewrites;
824324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
825324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      language=Ruby;
826324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      output=AST;
827324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
828324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID["root"] ^(ID INT)) | INT -> ^(ID["root"] INT) ;
829324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
830324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
831324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
832324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
833324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
834324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
835324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteModeWithPredicatedRewritesWalker;
836324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
837324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      language=Ruby;
838324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      output=AST;
839324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ASTLabelType=CommonTree;
840324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      tokenVocab=RewriteModeWithPredicatedRewrites;
841324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      rewrite=true;
842324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
843324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ^(ID a) {
844324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      # self.buf += $s.start.inspect
845324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    };
846324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(ID INT) -> {true}? ^(ID["ick"] INT)
847324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                  -> INT
848324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
849324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
850324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
851324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
852324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar WildcardSingleNode;
853324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
854324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
855324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
856324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
857324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID["root"] INT);
858324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
859324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
860324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
861324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
862324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
863324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
864324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar WildcardSingleNodeWalker;
865324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
866324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
867324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
868324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
869324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=WildcardSingleNode;
870324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
871324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ^(ID c=.) -> $c
872324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ;
873324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
874324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
875324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
876324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar WildcardUnlabeledSingleNode;
877324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
878324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT);
879324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
880324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
881324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
882324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
883324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
884324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
885324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar WildcardUnlabeledSingleNodeWalker;
886324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardUnlabeledSingleNode;}
887324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ^(ID .) -> ID
888324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
889324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
890324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
891324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
892324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar WildcardListLabel;
893324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
894324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : INT INT INT ;
895324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
896324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
897324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
898324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
899324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
900324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
901324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar WildcardListLabelWalker;
902324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardListLabel;}
903324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : (c+=.)+ -> $c+
904324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
905324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
906324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
907324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
908324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar WildcardListLabel2;
909324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree;}
910324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a  : x=INT y=INT z=INT -> ^($x ^($y $z) ^($y $z));
911324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
912324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
913324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
914324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
915324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
916324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
917324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar WildcardListLabel2Walker;
918324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardListLabel2; rewrite=true;}
919324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ^(INT (c+=.)+) -> $c+
920324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
921324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
922324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
923324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
924324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar WildcardGrabsSubtree;
925324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
926324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID x=INT y=INT z=INT -> ^(ID[\"root\"] ^($x $y $z));
927324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
928324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
929324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
930324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
931324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
932324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
933324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar WildcardGrabsSubtreeWalker;
934324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardGrabsSubtree;}
935324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ^(ID c=.) -> $c
936324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
937324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
938324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
939324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
940324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar WildcardGrabsSubtree2;
941324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST;}
942324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID x=INT y=INT z=INT -> ID ^($x $y $z);
943324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
944324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
945324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\n') {$channel=HIDDEN;} ;
946324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
947324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
948324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-'END' )
949324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar WildcardGrabsSubtree2Walker;
950324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardGrabsSubtree2;}
951324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    s : ID c=. -> $c
952324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
953324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
954324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
955324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-END )
956324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar CombinedRewriteAndAuto;
957324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
958324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
959324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
960324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
961324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT) | INT ;
962324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
963324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
964324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\\n') {$channel=HIDDEN;} ;
965324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
966324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
967324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-END )
968324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar CombinedRewriteAndAutoWalker;
969324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
970324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
971324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
972324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
973324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=CombinedRewriteAndAuto;
974324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
975324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(ID INT) -> ^(INT ID) | INT;
976324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
977324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
978324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-END )
979324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    grammar RewriteModeCombinedRewriteAndAuto;
980324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
981324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
982324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
983324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
984324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ID INT -> ^(ID INT) | INT ;
985324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ID : 'a'..'z'+ ;
986324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    INT : '0'..'9'+;
987324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    WS : (' '|'\\n') {$channel=HIDDEN;} ;
988324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
989324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
990324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  inline_grammar( <<-END )
991324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tree grammar RewriteModeCombinedRewriteAndAutoWalker;
992324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    options {
993324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        language=Ruby;
994324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output=AST;
995324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ASTLabelType=CommonTree;
996324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tokenVocab=RewriteModeCombinedRewriteAndAuto;
997324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        rewrite=true;
998324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
999324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    a : ^(ID INT) -> ^(ID["ick"] INT)
1000324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      | INT // leaves it alone, returning $a.start
1001324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      ;
1002324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  END
1003324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
1004324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "flat list" do
1005324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = FlatList::Lexer.new( "abc 34" )
1006324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1007324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = FlatList::Parser.new( tokens )
1008324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1009324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1010324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1011324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1012324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = FlatListWalker::TreeParser.new( nodes )
1013324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1014324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1015324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "34 abc"
1016324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1017324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1018324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "simple tree" do
1019324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = SimpleTree::Lexer.new( "abc 34" )
1020324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1021324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = SimpleTree::Parser.new( tokens )
1022324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1023324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1024324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1025324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1026324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = SimpleTreeWalker::TreeParser.new( nodes )
1027324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1028324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1029324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(34 abc)"
1030324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1031324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1032324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "combined rewrite and auto" do
1033324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = CombinedRewriteAndAuto::Lexer.new( "abc 34" )
1034324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1035324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = CombinedRewriteAndAuto::Parser.new( tokens )
1036324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1037324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1038324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1039324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1040324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = CombinedRewriteAndAutoWalker::TreeParser.new( nodes )
1041324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a.tree
1042324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result.inspect.should == '(34 abc)'
1043324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = CombinedRewriteAndAuto::Lexer.new( "34" )
1044324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1045324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = CombinedRewriteAndAuto::Parser.new( tokens )
1046324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1047324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1048324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1049324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1050324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = CombinedRewriteAndAutoWalker::TreeParser.new( nodes )
1051324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a.tree
1052324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result.inspect.should == '34'
1053324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1054324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1055324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "avoid dup" do
1056324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AvoidDup::Lexer.new( "abc" )
1057324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1058324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AvoidDup::Parser.new( tokens )
1059324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1060324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1061324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1062324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1063324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AvoidDupWalker::TreeParser.new( nodes )
1064324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1065324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1066324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(abc abc)"
1067324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1068324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
1069324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "loop" do
1070324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = Loop::Lexer.new( "a b c 3 4 5" )
1071324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1072324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = Loop::Parser.new( tokens )
1073324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1074324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1075324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1076324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1077324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = LoopWalker::TreeParser.new( nodes )
1078324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1079324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1080324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "3 4 5 a b c"
1081324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1082324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
1083324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto dup" do
1084324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoDup::Lexer.new( "abc" )
1085324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1086324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoDup::Parser.new( tokens )
1087324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1088324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1089324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1090324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1091324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoDupWalker::TreeParser.new( nodes )
1092324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1093324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1094324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "abc"
1095324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1096324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1097324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto dup rule" do
1098324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoDupRule::Lexer.new( "a 1" )
1099324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoDupRule::Parser.new( tokens )
1101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoDupRuleWalker::TreeParser.new( nodes )
1106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "a 1"
1109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto wildcard" do
1112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoWildcard::Lexer.new( "abc 34" )
1113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoWildcard::Parser.new( tokens )
1115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoWildcardWalker::TreeParser.new( nodes )
1120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "abc 34"
1123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto wildcard2" do
1126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoWildcard2::Lexer.new( "abc 34" )
1127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoWildcard2::Parser.new( tokens )
1129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoWildcard2Walker::TreeParser.new( nodes )
1134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(abc 34)"
1137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto wildcard with label" do
1140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoWildcardWithLabel::Lexer.new( "abc 34" )
1141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoWildcardWithLabel::Parser.new( tokens )
1143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoWildcardWithLabelWalker::TreeParser.new( nodes )
1148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "abc 34"
1151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto wildcard with list label" do
1154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoWildcardWithListLabel::Lexer.new( "abc 34" )
1155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoWildcardWithListLabel::Parser.new( tokens )
1157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoWildcardWithListLabelWalker::TreeParser.new( nodes )
1162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "abc 34"
1165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto dup multiple" do
1168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoDupMultiple::Lexer.new( "a b 3" )
1169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoDupMultiple::Parser.new( tokens )
1171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoDupMultipleWalker::TreeParser.new( nodes )
1176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "a b 3"
1179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto dup tree" do
1182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoDupTree::Lexer.new( "a 3" )
1183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoDupTree::Parser.new( tokens )
1185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoDupTreeWalker::TreeParser.new( nodes )
1190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(a 3)"
1193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto dup tree with labels" do
1196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoDupTreeWithLabels::Lexer.new( "a 3" )
1197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoDupTreeWithLabels::Parser.new( tokens )
1199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoDupTreeWithLabelsWalker::TreeParser.new( nodes )
1204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(a 3)"
1207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto dup tree with list labels" do
1210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoDupTreeWithListLabels::Lexer.new( "a 3" )
1211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoDupTreeWithListLabels::Parser.new( tokens )
1213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoDupTreeWithListLabelsWalker::TreeParser.new( nodes )
1218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(a 3)"
1221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto dup tree with rule root" do
1224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoDupTreeWithRuleRoot::Lexer.new( "a 3" )
1225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoDupTreeWithRuleRoot::Parser.new( tokens )
1227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoDupTreeWithRuleRootWalker::TreeParser.new( nodes )
1232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(a 3)"
1235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto dup tree with rule root and labels" do
1238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoDupTreeWithRuleRootAndLabels::Lexer.new( "a 3" )
1239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoDupTreeWithRuleRootAndLabels::Parser.new( tokens )
1241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoDupTreeWithRuleRootAndLabelsWalker::TreeParser.new( nodes )
1246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(a 3)"
1249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto dup tree with rule root and list labels" do
1252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoDupTreeWithRuleRootAndListLabels::Lexer.new( "a 3" )
1253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoDupTreeWithRuleRootAndListLabels::Parser.new( tokens )
1255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoDupTreeWithRuleRootAndListLabelsWalker::TreeParser.new( nodes )
1260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(a 3)"
1263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "auto dup nested tree" do
1266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = AutoDupNestedTree::Lexer.new( "a b 3" )
1267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = AutoDupNestedTree::Parser.new( tokens )
1269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = AutoDupNestedTreeWalker::TreeParser.new( nodes )
1274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(a (b 3))"
1277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "delete" do
1280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = Delete::Lexer.new( "abc" )
1281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = Delete::Parser.new( tokens )
1283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = DeleteWalker::TreeParser.new( nodes )
1288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == ""
1291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "set match no rewrite" do
1294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = SetMatchNoRewrite::Lexer.new( "abc 34" )
1295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = SetMatchNoRewrite::Parser.new( tokens )
1297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = SetMatchNoRewriteWalker::TreeParser.new( nodes )
1302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "abc 34"
1305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "set optional match no rewrite" do
1308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = SetOptionalMatchNoRewrite::Lexer.new( "abc 34" )
1309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = SetOptionalMatchNoRewrite::Parser.new( tokens )
1311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = SetOptionalMatchNoRewriteWalker::TreeParser.new( nodes )
1316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "abc 34"
1319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "set match no rewrite level2" do
1322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = SetMatchNoRewriteLevel2::Lexer.new( "abc 34" )
1323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = SetMatchNoRewriteLevel2::Parser.new( tokens )
1325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = SetMatchNoRewriteLevel2Walker::TreeParser.new( nodes )
1330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(abc 34)"
1333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "set match no rewrite level2 root" do
1336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = SetMatchNoRewriteLevel2Root::Lexer.new( "abc 34" )
1337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = SetMatchNoRewriteLevel2Root::Parser.new( tokens )
1339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = SetMatchNoRewriteLevel2RootWalker::TreeParser.new( nodes )
1344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.a
1345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(abc 34)"
1347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite mode combined rewrite and auto" do
1350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser_test = proc do |input, expected_output|
1352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      lexer = RewriteModeCombinedRewriteAndAuto::Lexer.new( input )
1353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      tokens = ANTLR3::CommonTokenStream.new( lexer )
1354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      parser = RewriteModeCombinedRewriteAndAuto::Parser.new( tokens )
1355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      result = parser.a
1356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      nodes.token_stream = tokens
1358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      walker = RewriteModeCombinedRewriteAndAutoWalker::TreeParser.new( nodes )
1359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      result = walker.a
1360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      stree = result.tree.nil? ? '' : result.tree.inspect
1361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver      stree.should == expected_output
1362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    end
1363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser_test[ 'abc 34', '(ick 34)' ]
1365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser_test[ '34', '34' ]
1366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
1368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite mode flat tree" do
1369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteModeFlatTree::Lexer.new( "abc 34" )
1370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteModeFlatTree::Parser.new( tokens )
1372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteModeFlatTreeWalker::TreeParser.new( nodes )
1377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "abc 1"
1380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
1382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite mode chain rule flat tree" do
1383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteModeChainRuleFlatTree::Lexer.new( "abc 34" )
1384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteModeChainRuleFlatTree::Parser.new( tokens )
1386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteModeChainRuleFlatTreeWalker::TreeParser.new( nodes )
1391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "34 abc"
1394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite mode chain rule tree" do
1397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteModeChainRuleTree::Lexer.new( "abc 34" )
1398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteModeChainRuleTree::Parser.new( tokens )
1400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteModeChainRuleTreeWalker::TreeParser.new( nodes )
1405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "34"
1408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite mode chain rule tree2" do
1411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteModeChainRuleTree2::Lexer.new( "abc 34" )
1412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteModeChainRuleTree2::Parser.new( tokens )
1414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteModeChainRuleTree2Walker::TreeParser.new( nodes )
1419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "34"
1422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite mode chain rule tree3" do
1425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteModeChainRuleTree3::Lexer.new( "boo abc 34" )
1426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteModeChainRuleTree3::Parser.new( tokens )
1428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteModeChainRuleTree3Walker::TreeParser.new( nodes )
1433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "boo 34"
1436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite mode chain rule tree4" do
1439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteModeChainRuleTree4::Lexer.new( "boo abc 34" )
1440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteModeChainRuleTree4::Parser.new( tokens )
1442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteModeChainRuleTree4Walker::TreeParser.new( nodes )
1447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(boo 34)"
1450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite mode chain rule tree5" do
1453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteModeChainRuleTree5::Lexer.new( "boo abc 34" )
1454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteModeChainRuleTree5::Parser.new( tokens )
1456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteModeChainRuleTree5Walker::TreeParser.new( nodes )
1461324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(boo 34)"
1464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite of rule ref" do
1467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteOfRuleRef::Lexer.new( "abc 34" )
1468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteOfRuleRef::Parser.new( tokens )
1470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteOfRuleRefWalker::TreeParser.new( nodes )
1475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "abc 34"
1478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite of rule ref root" do
1481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteOfRuleRefRoot::Lexer.new( "abc 12 34" )
1482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteOfRuleRefRoot::Parser.new( tokens )
1484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteOfRuleRefRootWalker::TreeParser.new( nodes )
1489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1491324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(12 (abc 34))"
1492324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1493324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1494324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite of rule ref root labeled" do
1495324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteOfRuleRefRootLabeled::Lexer.new( "abc 12 34" )
1496324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1497324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteOfRuleRefRootLabeled::Parser.new( tokens )
1498324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1499324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1500324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1501324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1502324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteOfRuleRefRootLabeledWalker::TreeParser.new( nodes )
1503324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1504324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1505324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(12 (abc 34))"
1506324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1507324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1508324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite of rule ref root list labeled" do
1509324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteOfRuleRefRootListLabeled::Lexer.new( "abc 12 34" )
1510324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1511324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteOfRuleRefRootListLabeled::Parser.new( tokens )
1512324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1513324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1514324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1515324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1516324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteOfRuleRefRootListLabeledWalker::TreeParser.new( nodes )
1517324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1518324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1519324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(12 (abc 34))"
1520324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1521324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1522324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite of rule ref child" do
1523324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteOfRuleRefChild::Lexer.new( "abc 34" )
1524324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1525324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteOfRuleRefChild::Parser.new( tokens )
1526324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1527324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1528324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1529324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1530324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteOfRuleRefChildWalker::TreeParser.new( nodes )
1531324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1532324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1533324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(34 34)"
1534324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1535324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1536324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite of rule ref label" do
1537324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteOfRuleRefLabel::Lexer.new( "abc 34" )
1538324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1539324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteOfRuleRefLabel::Parser.new( tokens )
1540324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1541324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1542324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1543324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1544324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteOfRuleRefLabelWalker::TreeParser.new( nodes )
1545324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1546324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1547324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(34 34)"
1548324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1549324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1550324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite of rule ref list label" do
1551324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteOfRuleRefListLabel::Lexer.new( "abc 34" )
1552324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1553324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteOfRuleRefListLabel::Parser.new( tokens )
1554324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1555324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1556324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1557324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1558324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteOfRuleRefListLabelWalker::TreeParser.new( nodes )
1559324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1560324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1561324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(34 34)"
1562324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1563324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
1564324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "rewrite mode with predicated rewrites" do
1565324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = RewriteModeWithPredicatedRewrites::Lexer.new( "abc 34" )
1566324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1567324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = RewriteModeWithPredicatedRewrites::Parser.new( tokens )
1568324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1569324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1570324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1571324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1572324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = RewriteModeWithPredicatedRewritesWalker::TreeParser.new( nodes )
1573324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1574324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1575324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(root (ick 34))"
1576324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1577324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
1578324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "wildcard single node" do
1579324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = WildcardSingleNode::Lexer.new( "abc 34" )
1580324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1581324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = WildcardSingleNode::Parser.new( tokens )
1582324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1583324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1584324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1585324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1586324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = WildcardSingleNodeWalker::TreeParser.new( nodes )
1587324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1588324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1589324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "34"
1590324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1591324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
1592324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "wildcard unlabeled single node" do
1593324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = WildcardUnlabeledSingleNode::Lexer.new( "abc 34" )
1594324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1595324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = WildcardUnlabeledSingleNode::Parser.new( tokens )
1596324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1597324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1598324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1599324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1600324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = WildcardUnlabeledSingleNodeWalker::TreeParser.new( nodes )
1601324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1602324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1603324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "abc"
1604324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1605324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1606324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "wildcard grabs subtree" do
1607324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = WildcardGrabsSubtree::Lexer.new( "abc 1 2 3" )
1608324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1609324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = WildcardGrabsSubtree::Parser.new( tokens )
1610324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1611324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1612324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1613324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1614324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = WildcardGrabsSubtreeWalker::TreeParser.new( nodes )
1615324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1616324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1617324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(1 2 3)"
1618324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1619324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1620324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "wildcard grabs subtree2" do
1621324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = WildcardGrabsSubtree2::Lexer.new( "abc 1 2 3" )
1622324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1623324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = WildcardGrabsSubtree2::Parser.new( tokens )
1624324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1625324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1626324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1627324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1628324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = WildcardGrabsSubtree2Walker::TreeParser.new( nodes )
1629324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1630324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1631324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(1 2 3)"
1632324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1633324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
1634324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "wildcard list label" do
1635324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = WildcardListLabel::Lexer.new( "1 2 3" )
1636324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1637324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = WildcardListLabel::Parser.new( tokens )
1638324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1639324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1640324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1641324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1642324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = WildcardListLabelWalker::TreeParser.new( nodes )
1643324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1644324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1645324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "1 2 3"
1646324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1647324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
1648324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  example "wildcard list label2" do
1649324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    lexer  = WildcardListLabel2::Lexer.new( "1 2 3" )
1650324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    tokens = ANTLR3::CommonTokenStream.new( lexer )
1651324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    parser = WildcardListLabel2::Parser.new( tokens )
1652324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    
1653324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = parser.a
1654324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
1655324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    nodes.token_stream = tokens
1656324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    walker = WildcardListLabel2Walker::TreeParser.new( nodes )
1657324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    result = walker.s
1658324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree = result.tree.nil? ? '' : result.tree.inspect
1659324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    stree.should == "(2 3) (2 3)"
1660324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  end
1661324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver  
1662324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend
1663