1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/*
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * [The "BSD license"]
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright (c) 2011 Terence Parr
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * All rights reserved.
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Conversion to C#:
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc.
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * All rights reserved.
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Redistribution and use in source and binary forms, with or without
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * modification, are permitted provided that the following conditions
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * are met:
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 1. Redistributions of source code must retain the above copyright
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *    notice, this list of conditions and the following disclaimer.
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 2. Redistributions in binary form must reproduce the above copyright
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *    notice, this list of conditions and the following disclaimer in the
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *    documentation and/or other materials provided with the distribution.
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 3. The name of the author may not be used to endorse or promote products
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *    derived from this software without specific prior written permission.
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Templates for building ASTs during normal parsing.
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *  Deal with many combinations.  Dimensions are:
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *  Auto build or rewrite
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *    no label, label, list label  (label/no-label handled together)
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *    child, root
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *    token, set, rule, wildcard
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *  The situation is not too bad as rewrite (->) usage makes ^ and !
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *  invalid. There is no huge explosion of combinations.
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver@rule.setErrorReturnValue() ::= <<
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverretval.Tree = (<ASTLabelType>)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<! System.out.WriteLine("<ruleName> returns "+((CommonTree)retval.tree).toStringTree()); !>
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// TOKEN AST STUFF
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** ID and output=AST */
53324c4644fee44b9898524c09511bd33c3f12e2dfBen GruvertokenRef(token,label,elementIndex,terminalOptions) ::= <%
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<super.tokenRef(...)>
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(!ruleDescriptor.isSynPred)>
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(backtracking)><\n>if (state.backtracking == 0) {<endif>
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<\n><label>_tree = <createNodeFromToken(...)>;
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<\n>adaptor.AddChild(root_0, <label>_tree);
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(backtracking)><\n>}<endif>
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<endif>
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver%>
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** ID! and output=AST (same as plain tokenRef) */
64324c4644fee44b9898524c09511bd33c3f12e2dfBen GruvertokenRefBang(token,label,elementIndex,terminalOptions) ::= "<super.tokenRef(...)>"
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** ID^ and output=AST */
67324c4644fee44b9898524c09511bd33c3f12e2dfBen GruvertokenRefRuleRoot(token,label,elementIndex,terminalOptions) ::= <%
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<super.tokenRef(...)>
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(!ruleDescriptor.isSynPred)>
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(backtracking)><\n>if (<actions.(actionScope).synpredgate>) {<endif>
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<\n><label>_tree = <createNodeFromToken(...)>;
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<\n>root_0 = (<ASTLabelType>)adaptor.BecomeRoot(<label>_tree, root_0);
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(backtracking)><\n>}<endif>
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<endif>
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver%>
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** ids+=ID! and output=AST */
78324c4644fee44b9898524c09511bd33c3f12e2dfBen GruvertokenRefBangAndListLabel(token,label,elementIndex,terminalOptions) ::= <<
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<tokenRefBang(...)>
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<listLabelElem(elem=label,elemType=labelType,...)>
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** label+=TOKEN when output=AST but not rewrite alt */
84324c4644fee44b9898524c09511bd33c3f12e2dfBen GruvertokenRefAndListLabel(token,label,elementIndex,terminalOptions) ::= <<
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<tokenRef(...)>
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<listLabelElem(elem=label,elemType=labelType,...)>
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Match label+=TOKEN^ when output=AST but not rewrite alt */
90324c4644fee44b9898524c09511bd33c3f12e2dfBen GruvertokenRefRuleRootAndListLabel(token,label,terminalOptions,elementIndex) ::= <<
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<tokenRefRuleRoot(...)>
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<listLabelElem(elem=label,elemType=labelType,...)>
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// SET AST
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// the match set stuff is interesting in that it uses an argument list
98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// to pass code to the default matchSet; another possible way to alter
99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// inherited code.  I don't use the region stuff because I need to pass
100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// different chunks depending on the operator.  I don't like making
101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// the template name have the operator as the number of templates gets
102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// large but this is the most flexible--this is as opposed to having
103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// the code generator call matchSet then add root code or ruleroot code
104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// plus list label plus ...  The combinations might require complicated
105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// rather than just added on code.  Investigate that refactoring when
106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// I have more time.
107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
108324c4644fee44b9898524c09511bd33c3f12e2dfBen GruvermatchSet(s,label,terminalOptions,elementIndex,postmatchCode) ::= <<
109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<super.matchSet(postmatchCode={<if(!ruleDescriptor.isSynPred)><if(backtracking)>if (<actions.(actionScope).synpredgate>) <endif>adaptor.AddChild(root_0, <createNodeFromToken(...)>);<endif>}, ...)>
110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
112324c4644fee44b9898524c09511bd33c3f12e2dfBen GruvermatchRuleBlockSet(s,label,terminalOptions,elementIndex,postmatchCode,treeLevel="0") ::= <<
113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<matchSet(...)>
114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
116324c4644fee44b9898524c09511bd33c3f12e2dfBen GruvermatchSetBang(s,label,elementIndex,terminalOptions,postmatchCode) ::= "<super.matchSet(...)>"
117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// note there is no matchSetTrack because -> rewrites force sets to be
119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// plain old blocks of alts: (A|B|...|C)
120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
121324c4644fee44b9898524c09511bd33c3f12e2dfBen GruvermatchSetRuleRoot(s,label,terminalOptions,elementIndex,debug) ::= <<
122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(label)>
123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<label>=(<labelType>)input.LT(1);
124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<endif>
125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<super.matchSet(postmatchCode={<if(!ruleDescriptor.isSynPred)><if(backtracking)>if (<actions.(actionScope).synpredgate>) <endif>root_0 = (<ASTLabelType>)adaptor.BecomeRoot(<createNodeFromToken(...)>, root_0);<endif>}, ...)>
126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// RULE REF AST
129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** rule when output=AST */
131324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverruleRef(rule,label,elementIndex,args,scope) ::= <%
132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<super.ruleRef(...)>
133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(!ruleDescriptor.isSynPred)>
134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<\n><if(backtracking)>if (<actions.(actionScope).synpredgate>) <endif>adaptor.AddChild(root_0, <label>.Tree);
135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<endif>
136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver%>
137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** rule! is same as normal rule ref */
139324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverruleRefBang(rule,label,elementIndex,args,scope) ::= "<super.ruleRef(...)>"
140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** rule^ */
142324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverruleRefRuleRoot(rule,label,elementIndex,args,scope) ::= <<
143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<super.ruleRef(...)>
144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(backtracking)>if (<actions.(actionScope).synpredgate>) <endif>root_0 = (<ASTLabelType>)adaptor.BecomeRoot(<label>.Tree, root_0);
145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** x+=rule when output=AST */
148324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverruleRefAndListLabel(rule,label,elementIndex,args,scope) ::= <<
149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<ruleRef(...)>
150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<listLabelElem(elem={<label>.Tree},elemType=ASTLabelType,...)>
151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** x+=rule! when output=AST is a rule ref with list addition */
154324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverruleRefBangAndListLabel(rule,label,elementIndex,args,scope) ::= <<
155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<ruleRefBang(...)>
156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<listLabelElem(elem={<label>.Tree},elemType=ASTLabelType,...)>
157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** x+=rule^ */
160324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverruleRefRuleRootAndListLabel(rule,label,elementIndex,args,scope) ::= <<
161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<ruleRefRuleRoot(...)>
162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<listLabelElem(elem={<label>.Tree},elemType=ASTLabelType,...)>
163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// WILDCARD AST
166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverwildcard(token,label,elementIndex,terminalOptions) ::= <<
168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<super.wildcard(...)>
169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(!ruleDescriptor.isSynPred)>
170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(backtracking)>if (<actions.(actionScope).synpredgate>) {<endif>
171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<label>_tree = (<ASTLabelType>)adaptor.Create(<label>);
172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveradaptor.AddChild(root_0, <label>_tree);
173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(backtracking)>}<endif>
174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<endif>
175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
177324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverwildcardBang(label,elementIndex) ::= "<super.wildcard(...)>"
178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
179324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverwildcardRuleRoot(token,label,elementIndex,terminalOptions) ::= <<
180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<super.wildcard(...)>
181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(!ruleDescriptor.isSynPred)>
182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(backtracking)>if (<actions.(actionScope).synpredgate>) {<endif>
183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<label>_tree = (<ASTLabelType>)adaptor.Create(<label>);
184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverroot_0 = (<ASTLabelType>)adaptor.BecomeRoot(<label>_tree, root_0);
185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(backtracking)>}<endif>
186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<endif>
187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
189324c4644fee44b9898524c09511bd33c3f12e2dfBen GruvercreateNodeFromToken(label,terminalOptions) ::= <%
190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(terminalOptions.node)>
191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernew <terminalOptions.node>(<if(terminalOptions.type)><terminalOptions.type>,<endif><label><if(terminalOptions.text)>,<terminalOptions.text; format="string"><endif>)
192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<else>
193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver(<ASTLabelType>)adaptor.Create(<if(terminalOptions.type)><terminalOptions.type>,<endif><label><if(terminalOptions.text)>,<terminalOptions.text; format="string"><endif>)
194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<endif>
195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver%>
196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
197324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverruleCleanUp() ::= <<
198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<super.ruleCleanUp()>
199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(backtracking)>if (<actions.(actionScope).synpredgate>) {<endif>
200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverretval.Tree = (<ASTLabelType>)adaptor.RulePostProcessing(root_0);
201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveradaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(backtracking)>}<endif>
203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>>
204