/* * [The "BSD license"] * Copyright (c) 2007-2008 Johannes Luber * Copyright (c) 2005-2007 Kunle Odutola * Copyright (c) 2011 Sam Harwell * Copyright (c) 2011 Terence Parr * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ @outputFile.imports() ::= << <@super.imports()> using Antlr.Runtime.Tree; using RewriteRuleITokenStream = Antlr.Runtime.Tree.RewriteRuleTokenStream; >> @genericParser.members() ::= << <@super.members()> >> parserCtorBody() ::= <% <\n> TreeAdaptor = new () ; %> /** Add an adaptor property that knows how to build trees */ parserMembers() ::= << private adaptor; public TreeAdaptor { get { return adaptor; } set { this.adaptor = value; .TreeAdaptor = this.adaptor;}> } } >> treeAdaptorType() ::= << >> ruleReturnBaseType() ::= <% AstTreeParserRuleReturnScope\<, > %> /** Add a variable to track rule's return AST */ ruleDeclarations() ::= << root_0 = default();<\n> >> ruleLabelDefs() ::= << <[ruleDescriptor.tokenLabels,ruleDescriptor.wildcardTreeLabels,ruleDescriptor.wildcardTreeListLabels] :{it| _tree = default();}; separator="\n"> _tree = default();}; separator="\n"> Stream stream_=new RewriteRuleStream(adaptor,"token ");}; separator="\n"> =new RewriteRuleSubtreeStream(adaptor,"rule ");}; separator="\n"> >> /** When doing auto AST construction, we must define some variables; * These should be turned off if doing rewrites. This must be a "mode" * as a rule could have both rewrite and AST within the same alternative * block. */ @alt.declarations() ::= << root_0 = ()adaptor.Nil(); >> // T r a c k i n g R u l e E l e m e n t s /** ID and track it for use in a rewrite rule */ tokenRefTrack(token,label,elementIndex,terminalOptions) ::= << if () stream_.Add(