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