1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// [The "BSD licence"]
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Copyright (c) 2006-2007 Kay Roepke
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// All rights reserved.
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Redistribution and use in source and binary forms, with or without
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// modification, are permitted provided that the following conditions
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// are met:
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 1. Redistributions of source code must retain the above copyright
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//    notice, this list of conditions and the following disclaimer.
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 2. Redistributions in binary form must reproduce the above copyright
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//    notice, this list of conditions and the following disclaimer in the
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//    documentation and/or other materials provided with the distribution.
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 3. The name of the author may not be used to endorse or promote products
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//    derived from this software without specific prior written permission.
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#import <Cocoa/Cocoa.h>
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#import "ANTLRToken.h"
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#import "ANTLRRecognitionException.h"
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver@protocol ANTLRDebugEventListener
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANTLRDebugProtocolVersion 1
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** The parser has just entered a rule.  No decision has been made about
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  which alt is predicted.  This is fired AFTER init actions have been
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  executed.  Attributes are defined and available etc...
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) enterRule:(NSString *)ruleName;
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Because rules can have lots of alternatives, it is very useful to
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  know which alt you are entering.  This is 1..n for n alts.
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) enterAlt:(NSInteger)alt;
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** This is the last thing executed before leaving a rule.  It is
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  executed even if an exception is thrown.  This is triggered after
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  error reporting and recovery have occurred (unless the exception is
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver											   *  not caught in this rule).  This implies an "exitAlt" event.
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) exitRule:(NSString *)ruleName;
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Track entry into any (...) subrule other EBNF construct */
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) enterSubRule:(NSInteger)decisionNumber;
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) exitSubRule:(NSInteger)decisionNumber;
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Every decision, fixed k or arbitrary, has an enter/exit event
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  so that a GUI can easily track what LT/consume events are
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  associated with prediction.  You will see a single enter/exit
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  subrule but multiple enter/exit decision events, one for each
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  loop iteration.
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) enterDecision:(NSInteger)decisionNumber;
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) exitDecision:(NSInteger)decisionNumber;
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** An input token was consumed; matched by any kind of element.
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  Trigger after the token was matched by things like match(), matchAny().
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) consumeToken:(id<ANTLRToken>)t;
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** An off-channel input token was consumed.
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  Trigger after the token was matched by things like match(), matchAny().
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  (unless of course the hidden token is first stuff in the input stream).
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) consumeHiddenToken:(id<ANTLRToken>)t;
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Somebody (anybody) looked ahead.  Note that this actually gets
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  triggered by both LA and LT calls.  The debugger will want to know
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  which Token object was examined.  Like consumeToken, this indicates
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  what token was seen at that depth.  A remote debugger cannot look
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  ahead into a file it doesn't have so LT events must pass the token
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  even if the info is redundant.
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) LT:(NSInteger)i foundToken:(id<ANTLRToken>)t;
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** The parser is going to look arbitrarily ahead; mark this location,
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  the token stream's marker is sent in case you need it.
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) mark:(NSInteger)marker;
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** After an arbitrairly long lookahead as with a cyclic DFA (or with
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  any backtrack), this informs the debugger that stream should be
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  rewound to the position associated with marker.
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) rewind:(NSInteger)marker;
98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Rewind to the input position of the last marker.
100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  Used currently only after a cyclic DFA and just
101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  before starting a sem/syn predicate to get the
102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  input position back to the start of the decision.
103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  Do not "pop" the marker off the state.  mark(i)
104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  and rewind(i) should balance still.
105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) rewind;
107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) beginBacktrack:(NSInteger)level;
109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) endBacktrack:(NSInteger)level wasSuccessful:(BOOL)successful;
111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** To watch a parser move through the grammar, the parser needs to
113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  inform the debugger what line/charPos it is passing in the grammar.
114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  For now, this does not know how to switch from one grammar to the
115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  other and back for island grammars etc...
116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*
117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  This should also allow breakpoints because the debugger can stop
118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  the parser whenever it hits this line/pos.
119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) locationLine:(NSInteger)line column:(NSInteger)pos;
121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** A recognition exception occurred such as NoViableAltException.  I made
123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  this a generic event so that I can alter the exception hierachy later
124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  without having to alter all the debug objects.
125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*
126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  Upon error, the stack of enter rule/subrule must be properly unwound.
127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  If no viable alt occurs it is within an enter/exit decision, which
128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  also must be rewound.  Even the rewind for each mark must be unwount.
129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  In the Java target this is pretty easy using try/finally, if a bit
130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  ugly in the generated code.  The rewind is generated in DFA.predict()
131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  actually so no code needs to be generated for that.  For languages
132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  w/o this "finally" feature (C++?), the target implementor will have
133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  to build an event stack or something.
134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*
135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  Across a socket for remote debugging, only the RecognitionException
136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  data fields are transmitted.  The token object or whatever that
137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  caused the problem was the last object referenced by LT.  The
138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  immediately preceding LT event should hold the unexpected Token or
139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  char.
140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*
141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  Here is a sample event trace for grammar:
142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*
143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  b : C ({;}A|B) // {;} is there to prevent A|B becoming a set
144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*    | D
145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*    ;
146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*
147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  The sequence for this rule (with no viable alt in the subrule) for
148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  input 'c c' (there are 3 tokens) is:
149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*
150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		commence
151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		LT(1)
152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		enterRule b
153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		location 7 1
154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		enter decision 3
155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		LT(1)
156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		exit decision 3
157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		enterAlt1
158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		location 7 5
159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		LT(1)
160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		consumeToken [c/<4>,1:0]
161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		location 7 7
162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		enterSubRule 2
163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		enter decision 2
164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		LT(1)
165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		LT(1)
166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		recognitionException NoViableAltException 2 1 2
167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		exit decision 2
168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		exitSubRule 2
169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		beginResync
170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		LT(1)
171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		consumeToken [c/<4>,1:1]
172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		LT(1)
173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		endResync
174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		LT(-1)
175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		exitRule b
176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*		terminate
177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) recognitionException:(ANTLRRecognitionException *)e;
179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Indicates the recognizer is about to consume tokens to resynchronize
181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  the parser.  Any consume events from here until the recovered event
182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  are not part of the parse--they are dead tokens.
183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) beginResync;
185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Indicates that the recognizer has finished consuming tokens in order
187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  to resychronize.  There may be multiple beginResync/endResync pairs
188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  before the recognizer comes out of errorRecovery mode (in which
189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  multiple errors are suppressed).  This will be useful
190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  in a gui where you want to probably grey out tokens that are consumed
191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  but not matched to anything in grammar.  Anything between
192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  a beginResync/endResync pair was tossed out by the parser.
193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) endResync;
195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** A semantic predicate was evaluate with this result and action text */
197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) semanticPredicate:(NSString *)predicate matched:(BOOL)result;
198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Announce that parsing has begun.  Not technically useful except for
200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  sending events over a socket.  A GUI for example will launch a thread
201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  to connect and communicate with a remote parser.  The thread will want
202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  to notify the GUI when a connection is made.  ANTLR parsers
203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  trigger this upon entry to the first rule (the ruleLevel is used to
204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  figure this out).
205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) commence;
207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Parsing is over; successfully or not.  Mostly useful for telling
209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  remote debugging listeners that it's time to quit.  When the rule
210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  invocation level goes to zero at the end of a rule, we are done
211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  parsing.
212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) terminate;
214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// T r e e  P a r s i n g
217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Input for a tree parser is an AST, but we know nothing for sure
219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  about a node except its type and text (obtained from the adaptor).
220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  This is the analog of the consumeToken method.  Again, the ID is
221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  the hashCode usually of the node so it only works if hashCode is
222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  not implemented.  If the type is UP or DOWN, then
223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  the ID is not really meaningful as it's fixed--there is
224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  just one UP node and one DOWN navigation node.
225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) consumeNode:(NSInteger)nodeHash ofType:(NSInteger)type text:(NSString *)text;
227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** The tree parser lookedahead.  If the type is UP or DOWN,
229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  then the ID is not really meaningful as it's fixed--there is
230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  just one UP node and one DOWN navigation node.
231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) LT:(NSInteger)i foundNode:(unsigned)nodeHash ofType:(NSInteger)type text:(NSString *)text;
233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// A S T  E v e n t s
236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** A nil was created (even nil nodes have a unique ID...
238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  they are not "null" per se).  As of 4/28/2006, this
239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  seems to be uniquely triggered when starting a new subtree
240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  such as when entering a subrule in automatic mode and when
241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  building a tree in rewrite mode.
242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) createNilNode:(unsigned)hash;
244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Announce a new node built from text */
246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) createNode:(unsigned)hash text:(NSString *)text type:(NSInteger)type;
247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Announce a new node built from an existing token */
249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) createNode:(unsigned)hash fromTokenAtIndex:(NSInteger)tokenIndex;
250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Make a node the new root of an existing root.  See
252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*
253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  Note: the newRootID parameter is possibly different
254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  than the TreeAdaptor.becomeRoot() newRoot parameter.
255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  In our case, it will always be the result of calling
256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  TreeAdaptor.becomeRoot() and not root_n or whatever.
257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*
258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  The listener should assume that this event occurs
259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  only when the current subrule (or rule) subtree is
260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  being reset to newRootID.
261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*
262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) makeNode:(unsigned)newRootHash parentOf:(unsigned)oldRootHash;
264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Make childID a child of rootID.
266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*  @see org.antlr.runtime.tree.TreeAdaptor.addChild()
267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) addChild:(unsigned)childHash toTree:(unsigned)treeHash;
269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Set the token start/stop token index for a subtree root or node */
271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) setTokenBoundariesForTree:(unsigned)nodeHash From:(NSUInteger)tokenStartIndex To:(NSUInteger)tokenStopIndex;
272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver- (void) waitForDebuggerConnection;
274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver@end
276