⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 antlrdebugeventlistener.h

📁 antlr最新版本V3源代码
💻 H
字号:
// [The "BSD licence"]// Copyright (c) 2006-2007 Kay Roepke// All rights reserved.//// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions// are met:// 1. Redistributions of source code must retain the above copyright//    notice, this list of conditions and the following disclaimer.// 2. Redistributions in binary form must reproduce the above copyright//    notice, this list of conditions and the following disclaimer in the//    documentation and/or other materials provided with the distribution.// 3. The name of the author may not be used to endorse or promote products//    derived from this software without specific prior written permission.//// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#import <Cocoa/Cocoa.h>#import <ANTLR/ANTLRToken.h>#import <ANTLR/ANTLRRecognitionException.h>@protocol ANTLRDebugEventListener #define ANTLRDebugProtocolVersion 1/** The parser has just entered a rule.  No decision has been made about*  which alt is predicted.  This is fired AFTER init actions have been*  executed.  Attributes are defined and available etc...*/- (void) enterRule:(NSString *)ruleName;/** Because rules can have lots of alternatives, it is very useful to*  know which alt you are entering.  This is 1..n for n alts.*/- (void) enterAlt:(int)alt;/** This is the last thing executed before leaving a rule.  It is*  executed even if an exception is thrown.  This is triggered after*  error reporting and recovery have occurred (unless the exception is											   *  not caught in this rule).  This implies an "exitAlt" event.*/- (void) exitRule:(NSString *)ruleName;/** Track entry into any (...) subrule other EBNF construct */- (void) enterSubRule:(int)decisionNumber;- (void) exitSubRule:(int)decisionNumber;/** Every decision, fixed k or arbitrary, has an enter/exit event*  so that a GUI can easily track what LT/consume events are*  associated with prediction.  You will see a single enter/exit*  subrule but multiple enter/exit decision events, one for each*  loop iteration.*/- (void) enterDecision:(int)decisionNumber;- (void) exitDecision:(int)decisionNumber;/** An input token was consumed; matched by any kind of element.*  Trigger after the token was matched by things like match(), matchAny().*/- (void) consumeToken:(ANTLRToken *)t;/** An off-channel input token was consumed.*  Trigger after the token was matched by things like match(), matchAny().*  (unless of course the hidden token is first stuff in the input stream).*/- (void) consumeHiddenToken:(ANTLRToken *)t;/** Somebody (anybody) looked ahead.  Note that this actually gets*  triggered by both LA and LT calls.  The debugger will want to know*  which Token object was examined.  Like consumeToken, this indicates*  what token was seen at that depth.  A remote debugger cannot look*  ahead into a file it doesn't have so LT events must pass the token*  even if the info is redundant.*/- (void) LT:(int)i foundToken:(ANTLRToken *)t;/** The parser is going to look arbitrarily ahead; mark this location,*  the token stream's marker is sent in case you need it.*/- (void) mark:(int)marker;/** After an arbitrairly long lookahead as with a cyclic DFA (or with*  any backtrack), this informs the debugger that stream should be*  rewound to the position associated with marker.*/- (void) rewind:(int)marker;/** Rewind to the input position of the last marker.*  Used currently only after a cyclic DFA and just*  before starting a sem/syn predicate to get the*  input position back to the start of the decision.*  Do not "pop" the marker off the state.  mark(i)*  and rewind(i) should balance still.*/- (void) rewind;- (void) beginBacktrack:(int)level;- (void) endBacktrack:(int)level wasSuccessful:(BOOL)successful;/** To watch a parser move through the grammar, the parser needs to*  inform the debugger what line/charPos it is passing in the grammar.*  For now, this does not know how to switch from one grammar to the*  other and back for island grammars etc...**  This should also allow breakpoints because the debugger can stop*  the parser whenever it hits this line/pos.*/- (void) locationLine:(int)line column:(int)pos;/** A recognition exception occurred such as NoViableAltException.  I made*  this a generic event so that I can alter the exception hierachy later*  without having to alter all the debug objects.**  Upon error, the stack of enter rule/subrule must be properly unwound.*  If no viable alt occurs it is within an enter/exit decision, which*  also must be rewound.  Even the rewind for each mark must be unwount.*  In the Java target this is pretty easy using try/finally, if a bit*  ugly in the generated code.  The rewind is generated in DFA.predict()*  actually so no code needs to be generated for that.  For languages*  w/o this "finally" feature (C++?), the target implementor will have*  to build an event stack or something.**  Across a socket for remote debugging, only the RecognitionException*  data fields are transmitted.  The token object or whatever that*  caused the problem was the last object referenced by LT.  The*  immediately preceding LT event should hold the unexpected Token or*  char.**  Here is a sample event trace for grammar:**  b : C ({;}A|B) // {;} is there to prevent A|B becoming a set*    | D*    ;**  The sequence for this rule (with no viable alt in the subrule) for*  input 'c c' (there are 3 tokens) is:**		commence*		LT(1)*		enterRule b*		location 7 1*		enter decision 3*		LT(1)*		exit decision 3*		enterAlt1*		location 7 5*		LT(1)*		consumeToken [c/<4>,1:0]*		location 7 7*		enterSubRule 2*		enter decision 2*		LT(1)*		LT(1)*		recognitionException NoViableAltException 2 1 2*		exit decision 2*		exitSubRule 2*		beginResync*		LT(1)*		consumeToken [c/<4>,1:1]*		LT(1)*		endResync*		LT(-1)*		exitRule b*		terminate*/- (void) recognitionException:(ANTLRRecognitionException *)e;/** Indicates the recognizer is about to consume tokens to resynchronize*  the parser.  Any consume events from here until the recovered event*  are not part of the parse--they are dead tokens.*/- (void) beginResync;/** Indicates that the recognizer has finished consuming tokens in order*  to resychronize.  There may be multiple beginResync/endResync pairs*  before the recognizer comes out of errorRecovery mode (in which*  multiple errors are suppressed).  This will be useful*  in a gui where you want to probably grey out tokens that are consumed*  but not matched to anything in grammar.  Anything between*  a beginResync/endResync pair was tossed out by the parser.*/- (void) endResync;/** A semantic predicate was evaluate with this result and action text */- (void) semanticPredicate:(NSString *)predicate matched:(BOOL)result;/** Announce that parsing has begun.  Not technically useful except for*  sending events over a socket.  A GUI for example will launch a thread*  to connect and communicate with a remote parser.  The thread will want*  to notify the GUI when a connection is made.  ANTLR parsers*  trigger this upon entry to the first rule (the ruleLevel is used to*  figure this out).*/- (void) commence;/** Parsing is over; successfully or not.  Mostly useful for telling*  remote debugging listeners that it's time to quit.  When the rule*  invocation level goes to zero at the end of a rule, we are done*  parsing.*/- (void) terminate;// T r e e  P a r s i n g/** Input for a tree parser is an AST, but we know nothing for sure*  about a node except its type and text (obtained from the adaptor).*  This is the analog of the consumeToken method.  Again, the ID is*  the hashCode usually of the node so it only works if hashCode is*  not implemented.  If the type is UP or DOWN, then*  the ID is not really meaningful as it's fixed--there is*  just one UP node and one DOWN navigation node.*/- (void) consumeNode:(int)nodeHash ofType:(int)type text:(NSString *)text;/** The tree parser lookedahead.  If the type is UP or DOWN,*  then the ID is not really meaningful as it's fixed--there is*  just one UP node and one DOWN navigation node.*/- (void) LT:(int)i foundNode:(unsigned)nodeHash ofType:(int)type text:(NSString *)text;// A S T  E v e n t s/** A nil was created (even nil nodes have a unique ID...*  they are not "null" per se).  As of 4/28/2006, this*  seems to be uniquely triggered when starting a new subtree*  such as when entering a subrule in automatic mode and when*  building a tree in rewrite mode.*/- (void) createNilNode:(unsigned)hash;/** Announce a new node built from text */- (void) createNode:(unsigned)hash text:(NSString *)text type:(int)type;/** Announce a new node built from an existing token */- (void) createNode:(unsigned)hash fromTokenAtIndex:(int)tokenIndex;/** Make a node the new root of an existing root.  See**  Note: the newRootID parameter is possibly different*  than the TreeAdaptor.becomeRoot() newRoot parameter.*  In our case, it will always be the result of calling*  TreeAdaptor.becomeRoot() and not root_n or whatever.**  The listener should assume that this event occurs*  only when the current subrule (or rule) subtree is*  being reset to newRootID.**/- (void) makeNode:(unsigned)newRootHash parentOf:(unsigned)oldRootHash;/** Make childID a child of rootID.*  @see org.antlr.runtime.tree.TreeAdaptor.addChild()*/- (void) addChild:(unsigned)childHash toTree:(unsigned)treeHash;/** Set the token start/stop token index for a subtree root or node */- (void) setTokenBoundariesForTree:(unsigned)nodeHash start:(int)tokenStartIndex stop:(int)tokenStopIndex;@end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -