/** \brief Rewind the lexer input to the state specified by the supplied mark. * * \param[in] input Input stream context pointer * * \remark * Assumes ASCII (or at least, 8 Bit) input stream. */ static void antlr3AsciiSeek (pANTLR3_INT_STREAM is, ANTLR3_MARKER seekPoint) { ANTLR3_INT32 count; pANTLR3_INPUT_STREAM input; input = ANTLR3_FUNC_PTR(((pANTLR3_INPUT_STREAM) is->super)); /* If the requested seek point is less than the current * input point, then we assume that we are resetting from a mark * and do not need to scan, but can just set to there. */ if (seekPoint <= (ANTLR3_MARKER)(input->nextChar)) { input->nextChar = ((pANTLR3_UINT8) seekPoint); } else { count = (ANTLR3_UINT32)(seekPoint - (ANTLR3_MARKER)(input->nextChar)); while (count--) { is->consume(is); } } }
/// \brief Rewind the lexer input to the state specified by the supplied mark. /// /// \param[in] input Input stream context pointer /// /// \remark /// Assumes ASCII (or at least, 8 Bit) input stream. /// static void antlr3UCS2Seek (pANTLR3_INT_STREAM is, ANTLR3_MARKER seekPoint) { ANTLR3_INT32 count; pANTLR3_INPUT_STREAM input; input = ((pANTLR3_INPUT_STREAM) is->super); // If the requested seek point is less than the current // input point, then we assume that we are resetting from a mark // and do not need to scan, but can just set to there. // if (seekPoint <= (ANTLR3_MARKER)(input->nextChar)) { input->nextChar = (void *)seekPoint; } else { count = (ANTLR3_UINT32)((seekPoint - (ANTLR3_MARKER)(input->nextChar)) / 2); // 16 bits per character in UCS2 while (count--) { is->consume(is); } } }
static void dbgRewindStream (pANTLR3_INT_STREAM is, ANTLR3_MARKER marker) { pANTLR3_TOKEN_STREAM ts; ts = (pANTLR3_TOKEN_STREAM) is->super; ts->debugger->rewind(ts->debugger, marker); is->seek(is, (ANTLR3_UINT32)(marker)); }
static void dbgRewindLast (pANTLR3_INT_STREAM is) { pANTLR3_TOKEN_STREAM ts; ts = (pANTLR3_TOKEN_STREAM) is->super; ts->debugger->rewindLast(ts->debugger); is->rewind(is, is->lastMarker); }
/// As per mark() but with a call to tell the debugger we are doing this /// static ANTLR3_MARKER dbgMark (pANTLR3_INT_STREAM is) { pANTLR3_TOKEN_STREAM ts; ts = (pANTLR3_TOKEN_STREAM) is->super; is->lastMarker = is->index(is); ts->debugger->mark(ts->debugger, is->lastMarker); return is->lastMarker; }
/// As per ordinary consume but notifies the debugger about hidden /// tokens and so on. /// static void dbgConsume (pANTLR3_INT_STREAM is) { pANTLR3_TOKEN_STREAM ts; ANTLR3_MARKER a; ANTLR3_MARKER b; pANTLR3_COMMON_TOKEN t; ts = (pANTLR3_TOKEN_STREAM) is->super; if (ts->initialStreamState == ANTLR3_TRUE) { consumeInitialHiddenTokens(is); } a = is->index(is); // Where are we right now? t = ts->_LT(ts, 1); // Current token from stream consume(is); // Standard consumer b = is->index(is); // Where are we after consuming 1 on channel token? ts->debugger->consumeToken(ts->debugger, t); // Tell the debugger that we consumed the first token if (b>a+1) { // The standard consume caused the index to advance by more than 1, // which can only happen if it skipped some off-channel tokens. // we need to tell the debugger about those tokens. // ANTLR3_MARKER i; for (i = a+1; i<b; i++) { ts->debugger->consumeHiddenToken(ts->debugger, ts->get(ts, (ANTLR3_UINT32)i)); } } }
/// Debug only method to flag consumption of initial off-channel /// tokens in the input stream /// static void consumeInitialHiddenTokens(pANTLR3_INT_STREAM is) { ANTLR3_MARKER first; ANTLR3_INT32 i; pANTLR3_TOKEN_STREAM ts; ts = (pANTLR3_TOKEN_STREAM) is->super; first = is->index(is); for (i=0; i<first; i++) { ts->debugger->consumeHiddenToken(ts->debugger, ts->get(ts, i)); } ts->initialStreamState = ANTLR3_FALSE; }
static void rewindLast (pANTLR3_INT_STREAM is) { is->seek(is, is->lastMarker); }
/// Rewind the current state of the tree walk to the state it /// was in when mark() was called and it returned marker. Also, /// wipe out the lookahead which will force reloading a few nodes /// but it is better than making a copy of the lookahead buffer /// upon mark(). /// static void rewindMark (pANTLR3_INT_STREAM is, ANTLR3_MARKER marker) { is->seek(is, marker); }
static void rewindStream (pANTLR3_INT_STREAM is, ANTLR3_MARKER marker) { is->seek(is, (ANTLR3_UINT32)(marker)); }
static ANTLR3_MARKER mark (pANTLR3_INT_STREAM is) { is->lastMarker = is->index(is); return is->lastMarker; }
/** \brief Rewind the lexer input to the state specified by the last produced mark. * * \param[in] input Input stream context pointer * * \remark * Assumes ASCII (or at least, 8 Bit) input stream. */ static void antlr3AsciiRewindLast (pANTLR3_INT_STREAM is) { is->rewind(is, is->lastMarker); }