1 /* 2 * [The "BSD license"] 3 * Copyright (c) 2007-2008 Johannes Luber 4 * Copyright (c) 2005-2007 Kunle Odutola 5 * Copyright (c) 2005 Terence Parr 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. The name of the author may not be used to endorse or promote products 17 * derived from this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 /** Template overrides to add debugging to AST stuff. Dynamic inheritance 32 * hierarchy is set up as ASTDbg : AST : Dbg : Java by code generator. 33 */ 34 35 parserMembers() ::= << 36 protected DebugTreeAdaptor adaptor; 37 38 public ITreeAdaptor TreeAdaptor 39 { 40 get 41 { 42 return adaptor; 43 } 44 set 45 { 46 <if(grammar.grammarIsRoot)> 47 this.adaptor = new DebugTreeAdaptor(dbg,adaptor); 48 <else> 49 this.adaptor = (DebugTreeAdaptor)adaptor; // delegator sends dbg adaptor 50 <endif><\n> 51 <grammar.directDelegates:{g|<g:delegateName()>.TreeAdaptor = this.adaptor;}> 52 } 53 }<\n> 54 >> 55 56 parserCtorBody() ::= << 57 <super.parserCtorBody()> 58 >> 59 60 createListenerAndHandshake() ::= << 61 DebugEventSocketProxy proxy = new DebugEventSocketProxy( this, port, <if(TREE_PARSER)>input.TreeAdaptor<else>adaptor<endif> ); 62 DebugListener = proxy; 63 <inputStreamType> = new Debug<inputStreamType>( input, proxy ); 64 try 65 { 66 proxy.Handshake(); 67 } 68 catch ( IOException ioe ) 69 { 70 ReportError( ioe ); 71 } 72 >> 73 74 @ctorForRootGrammar.finally() ::= << 75 ITreeAdaptor adap = new CommonTreeAdaptor(); 76 TreeAdaptor = adap; 77 proxy.TreeAdaptor = adap; 78 >> 79 80 @ctorForProfilingRootGrammar.finally() ::=<< 81 ITreeAdaptor adap = new CommonTreeAdaptor(); 82 TreeAdaptor = adap; 83 >> 84 85 @ctorForPredefinedListener.superClassRef() ::= ": base( input, dbg )" 86 87 @ctorForPredefinedListener.finally() ::=<< 88 <if(grammar.grammarIsRoot)><! don't create new adaptor for delegates !> 89 ITreeAdaptor adap = new CommonTreeAdaptor(); 90 TreeAdaptor = adap;<\n> 91 <endif> 92 >> 93 94 //@rewriteElement.pregen() ::= "dbg.Location( <e.line>, <e.pos> );" 95