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