1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/* 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * [The "BSD license"] 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright (c) 2005-2008 Terence Parr 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * All rights reserved. 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Conversion to C#: 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright (c) 2008-2009 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/** Template overrides to add debugging to normal Java output; 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * If ASTs are built, then you'll also get ASTDbg.stg loaded. 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver@outputFile.imports() ::= << 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<@super.imports()> 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverusing Antlr.Runtime.Debug; 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverusing IOException = System.IO.IOException; 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>> 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver@genericParser.members() ::= << 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(grammar.grammarIsRoot)> 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpublic static readonly string[] ruleNames = 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver new string[] 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "invalidRule", <grammar.allImportedRules:{rST | "<rST.name>"}; wrap="\n ", separator=", "> 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver };<\n> 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<endif> 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(grammar.grammarIsRoot)><! grammar imports other grammar(s) !> 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int ruleLevel = 0; 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual int RuleLevel { get { return ruleLevel; } } 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void IncRuleLevel() { ruleLevel++; } 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void DecRuleLevel() { ruleLevel--; } 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(profile)> 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <ctorForProfilingRootGrammar()> 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<else> 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <ctorForRootGrammar()> 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<endif> 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<ctorForPredefinedListener()> 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<else><! imported grammar !> 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public int RuleLevel { get { return <grammar.delegators:{g| <g:delegateName()>}>.RuleLevel; } } 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void IncRuleLevel() { <grammar.delegators:{g| <g:delegateName()>}>.IncRuleLevel(); } 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void DecRuleLevel() { <grammar.delegators:{g| <g:delegateName()>}>.DecRuleLevel(); } 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <ctorForDelegateGrammar()> 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<endif> 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(profile)> 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpublic override bool AlreadyParsedRule( IIntStream input, int ruleIndex ) 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int stopIndex = GetRuleMemoization(ruleIndex, input.Index); 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ((Profiler)dbg).ExamineRuleMemoization(input, ruleIndex, stopIndex, <grammar.composite.rootGrammar.recognizerName>.ruleNames[ruleIndex]); 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return base.AlreadyParsedRule(input, ruleIndex); 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}<\n> 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpublic override void Memoize( IIntStream input, int ruleIndex, int ruleStartIndex ) 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ((Profiler)dbg).Memoize(input, ruleIndex, ruleStartIndex, <grammar.composite.rootGrammar.recognizerName>.ruleNames[ruleIndex]); 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver base.Memoize(input, ruleIndex, ruleStartIndex); 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}<\n> 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<endif> 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverprotected virtual bool EvalPredicate( bool result, string predicate ) 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver dbg.SemanticPredicate( result, predicate ); 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return result; 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}<\n> 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>> 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 87324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverctorForRootGrammar() ::= << 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<! bug: can't use <@super.members()> cut-n-paste instead !> 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<! Same except we add port number and profile stuff if root grammar !> 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<actions.(actionScope).ctorModifier; null="public"> <name>( <inputStreamType> input ) 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : this( input, DebugEventSocketProxy.DefaultDebuggerPort, new RecognizerSharedState() ) 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<actions.(actionScope).ctorModifier; null="public"> <name>( <inputStreamType> input, int port, RecognizerSharedState state ) 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : base( input, state ) 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <parserCtorBody()> 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <createListenerAndHandshake()> 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <grammar.directDelegates:{g|<g:delegateName()> = new <g.recognizerName>( input, dbg, this.state, this<grammar.delegators:{g|, <g:delegateName()>}> );}; separator="\n"> 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <@finally()> 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}<\n> 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>> 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 104324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverctorForProfilingRootGrammar() ::= << 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<! bug: can't use <@super.members()> cut-n-paste instead !> 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<actions.(actionScope).ctorModifier; null="public"> <name>( <inputStreamType> input ) 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : this( input, new Profiler(null), new RecognizerSharedState() ) 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<actions.(actionScope).ctorModifier; null="public"> <name>( <inputStreamType> input, IDebugEventListener dbg, RecognizerSharedState state ) 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : base( input, dbg, state ) 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Profiler p = (Profiler)dbg; 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver p.setParser(this); 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <parserCtorBody()> 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <grammar.directDelegates: 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver {g|<g:delegateName()> = new <g.recognizerName>( input, dbg, this.state, this<grammar.delegators:{g|, <g:delegateName()>}> );}; separator="\n"> 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <@finally()> 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<\n> 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>> 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Basically we don't want to set any dbg listeners are root will have it. */ 124324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverctorForDelegateGrammar() ::= << 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<actions.(actionScope).ctorModifier; null="public"> <name>( <inputStreamType> input, IDebugEventListener dbg, RecognizerSharedState state<grammar.delegators:{g|, <g.recognizerName> <g:delegateName()>}> ) 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : base( input, dbg, state ) 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <parserCtorBody()> 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <grammar.directDelegates: 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver {g|<g:delegateName()> = new <g.recognizerName>( input, this, this.state<grammar.delegators:{g|, <g:delegateName()>}> );}; separator="\n"> 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}<\n> 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>> 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 134324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverctorForPredefinedListener() ::= << 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<actions.(actionScope).ctorModifier; null="public"> <name>( <inputStreamType> input, IDebugEventListener dbg ) 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <@superClassRef>: base( input, dbg, new RecognizerSharedState() )<@end> 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(profile)> 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Profiler p = (Profiler)dbg; 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver p.setParser(this); 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<endif> 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <parserCtorBody()> 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <grammar.directDelegates:{g|<g:delegateName()> = new <g.recognizerName>(input, dbg, this.state, this<grammar.delegators:{g|, <g:delegateName()>}>);}; separator="\n"> 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver <@finally()> 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}<\n> 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>> 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 148324c4644fee44b9898524c09511bd33c3f12e2dfBen GruvercreateListenerAndHandshake() ::= << 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<if(TREE_PARSER)> 150324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverDebugEventSocketProxy proxy = new DebugEventSocketProxy( this, port, input.TreeAdaptor );<\n> 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<else> 152324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverDebugEventSocketProxy proxy = new DebugEventSocketProxy( this, port, null );<\n> 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver<endif> 154324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverDebugListener = proxy; 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvertry 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver proxy.Handshake(); 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvercatch ( IOException ioe ) 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ReportError( ioe ); 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>> 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver@genericParser.superClassName() ::= "Debug<@super.superClassName()>" 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/* 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Much of the following rules were merged into CSharp3.stg. 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver@rule.preamble() ::= << 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif (RuleLevel == 0) 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver DebugListener.Commence(); 174324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIncRuleLevel(); 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>> 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@rule.preamble() ::= << 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//try 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//{ 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// dbg.EnterRule( GrammarFileName, "<ruleName>" ); 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// if ( RuleLevel == 0 ) 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// { 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// dbg.Commence(); 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// } 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// IncRuleLevel(); 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// dbg.Location( <ruleDescriptor.tree.line>, <ruleDescriptor.tree.charPositionInLine> );<\n> 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//>> 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver@rule.postamble() ::= << 189324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverDecRuleLevel(); 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif (RuleLevel == 0) 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver DebugListener.Terminate(); 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>> 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@rule.postamble() ::= << 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//dbg.Location(<ruleDescriptor.EORNode.line>, <ruleDescriptor.EORNode.charPositionInLine>);<\n> 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//} 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//finally 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//{ 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// dbg.ExitRule( GrammarFileName, "<ruleName>" ); 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// DecRuleLevel(); 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// if ( RuleLevel == 0 ) 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// { 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// dbg.Terminate(); 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// } 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//}<\n> 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//>> 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@insertSynpreds.start() ::= "dbg.BeginBacktrack( state.backtracking );" 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@insertSynpreds.stop() ::= "dbg.EndBacktrack( state.backtracking, success );" 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Common debug event triggers used by region overrides below 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//enterSubRule() ::= << 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//try 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//{ 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// dbg.EnterSubRule( <decisionNumber> );<\n> 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//>> 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//exitSubRule() ::= << 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//} 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//finally 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//{ 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// dbg.ExitSubRule( <decisionNumber> ); 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//}<\n> 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//>> 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//enterDecision() ::= << 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//try 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//{ 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// dbg.EnterDecision( <decisionNumber> );<\n> 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//>> 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//exitDecision() ::= << 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//} 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//finally 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//{ 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// dbg.ExitDecision( <decisionNumber> ); 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//}<\n> 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//>> 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//enterAlt(n) ::= "dbg.EnterAlt( <n> );<\n>" 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Region overrides that tell various constructs to add debugging triggers 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@block.predecision() ::= "<enterSubRule()><enterDecision()>" 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@block.postdecision() ::= "<exitDecision()>" 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@block.postbranch() ::= "<exitSubRule()>" 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@ruleBlock.predecision() ::= "<enterDecision()>" 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@ruleBlock.postdecision() ::= "<exitDecision()>" 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@ruleBlockSingleAlt.prealt() ::= "<enterAlt(n=\"1\")>" 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@blockSingleAlt.prealt() ::= "<enterAlt(n=\"1\")>" 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@positiveClosureBlock.preloop() ::= "<enterSubRule()>" 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@positiveClosureBlock.postloop() ::= "<exitSubRule()>" 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@positiveClosureBlock.predecision() ::= "<enterDecision()>" 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@positiveClosureBlock.postdecision() ::= "<exitDecision()>" 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@positiveClosureBlock.earlyExitException() ::= 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// "dbg.RecognitionException( eee<decisionNumber> );<\n>" 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@closureBlock.preloop() ::= "<enterSubRule()>" 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@closureBlock.postloop() ::= "<exitSubRule()>" 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@closureBlock.predecision() ::= "<enterDecision()>" 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@closureBlock.postdecision() ::= "<exitDecision()>" 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@altSwitchCase.prealt() ::= "<enterAlt(n=i)>" 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@element.prematch() ::= 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// "dbg.Location( <it.line>, <it.pos> );" 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@matchSet.mismatchedSetException() ::= 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// "dbg.RecognitionException( mse );" 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@dfaState.noViableAltException() ::= "dbg.RecognitionException( nvae );" 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@dfaStateSwitch.noViableAltException() ::= "dbg.RecognitionException( nvae );" 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//dfaDecision(decisionNumber,description) ::= << 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//try 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//{ 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// isCyclicDecision = true; 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// <super.dfaDecision(...)> 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//} 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//catch ( NoViableAltException nvae ) 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//{ 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// dbg.RecognitionException( nvae ); 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// throw nvae; 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//} 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//>> 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//@cyclicDFA.errorMethod() ::= << 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//public override void Error( NoViableAltException nvae ) 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//{ 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// ((DebugParser)recognizer).dbg.RecognitionException( nvae ); 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//} 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//>> 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Force predicate validation to trigger an event */ 310324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverevalPredicate(pred,description) ::= << 311324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverEvalPredicate(<pred>, "<description>") 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver>> 313