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