namespace CVC4 {
namespace parser {
-/// Match current input symbol against ttype. Upon error, do one token
-/// insertion or deletion if possible.
-/// To turn off single token insertion or deletion error
-/// recovery, override mismatchRecover() and have it call
-/// plain mismatch(), which does not recover. Then any error
-/// in a rule will cause an exception and immediate exit from
-/// rule. Rule would recover by resynchronizing to the set of
-/// symbols that can follow rule ref.
-///
-/* *** CVC4 NOTE ***
- * This function is unchanged from its libantlr3c version. It is included
- * here to avoid an exception-handling bug caused by libantlr3c being compiled
- * without support for C++ exceptions by default.
- */
-void *
-AntlrInput::match(pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 ttype,
- pANTLR3_BITSET_LIST follow) {
- pANTLR3_PARSER parser;
- pANTLR3_TREE_PARSER tparser;
- pANTLR3_INT_STREAM is;
- void * matchedSymbol;
-
- switch(recognizer->type) {
- case ANTLR3_TYPE_PARSER:
-
- parser = (pANTLR3_PARSER)(recognizer->super);
- tparser = NULL;
- is = parser->tstream->istream;
-
- break;
-
- case ANTLR3_TYPE_TREE_PARSER:
-
- tparser = (pANTLR3_TREE_PARSER)(recognizer->super);
- parser = NULL;
- is = tparser->ctnstream->tnstream->istream;
-
- break;
-
- default:
-
- ANTLR3_FPRINTF(
- stderr,
- "Base recognizer function 'match' called by unknown parser type - provide override for this function\n");
- return ANTLR3_FALSE;
-
- break;
- }
-
- // Pick up the current input token/node for assignment to labels
- //
- matchedSymbol = recognizer->getCurrentInputSymbol(recognizer, is);
-
- if(is->_LA(is, 1) == ttype) {
- // The token was the one we were told to expect
- //
- is->consume(is); // Consume that token from the stream
- recognizer->state->errorRecovery = ANTLR3_FALSE; // Not in error recovery now (if we were)
- recognizer->state->failed = ANTLR3_FALSE; // The match was a success
- return matchedSymbol; // We are done
- }
-
- // We did not find the expected token type, if we are backtracking then
- // we just set the failed flag and return.
- //
- if(recognizer->state->backtracking > 0) {
- // Backtracking is going on
- //
- recognizer->state->failed = ANTLR3_TRUE;
- return matchedSymbol;
- }
-
- // We did not find the expected token and there is no backtracking
- // going on, so we mismatch, which creates an exception in the recognizer exception
- // stack.
- //
- matchedSymbol = recognizer->recoverFromMismatchedToken(recognizer, ttype,
- follow);
- return matchedSymbol;
-}
-
-/// Attempt to recover from a single missing or extra token.
-///
-/// EXTRA TOKEN
-///
-/// LA(1) is not what we are looking for. If LA(2) has the right token,
-/// however, then assume LA(1) is some extra spurious token. Delete it
-/// and LA(2) as if we were doing a normal match(), which advances the
-/// input.
-///
-/// MISSING TOKEN
-///
-/// If current token is consistent with what could come after
-/// ttype then it is ok to "insert" the missing token, else throw
-/// exception For example, Input "i=(3;" is clearly missing the
-/// ')'. When the parser returns from the nested call to expr, it
-/// will have call chain:
-///
-/// stat -> expr -> atom
-///
-/// and it will be trying to match the ')' at this point in the
-/// derivation:
-///
-/// => ID '=' '(' INT ')' ('+' atom)* ';'
-/// ^
-/// match() will see that ';' doesn't match ')' and report a
-/// mismatched token error. To recover, it sees that LA(1)==';'
-/// is in the set of tokens that can follow the ')' token
-/// reference in rule atom. It can assume that you forgot the ')'.
-///
-/// The exception that was passed in, in the java implementation is
-/// sorted in the recognizer exception stack in the C version. To 'throw' it we set the
-/// error flag and rules cascade back when this is set.
-///
-/* *** CVC4 NOTE ***
- * This function has been basically gutted to remove any attempts to recover
- * from a syntax error.
- */
-void *
-AntlrInput::recoverFromMismatchedToken(pANTLR3_BASE_RECOGNIZER recognizer,
- ANTLR3_UINT32 ttype,
- pANTLR3_BITSET_LIST follow) {
-
- pANTLR3_PARSER parser = (pANTLR3_PARSER) (recognizer->super);
- pANTLR3_INT_STREAM is = parser->tstream->istream;
- void *matchedSymbol;
-
-
- // Create an exception if we need one
- //
- if(recognizer->state->exception == NULL) {
- antlr3RecognitionExceptionNew(recognizer);
- }
-
- if(recognizer->mismatchIsUnwantedToken(recognizer, is, ttype) == ANTLR3_TRUE) {
- recognizer->state->exception->type = ANTLR3_UNWANTED_TOKEN_EXCEPTION;
- recognizer->state->exception->message
- = (void*)ANTLR3_UNWANTED_TOKEN_EXCEPTION_NAME;
- }
-
- if(recognizer->mismatchIsMissingToken(recognizer, is, follow)) {
- matchedSymbol = recognizer->getMissingSymbol(recognizer, is,
- recognizer->state->exception,
- ttype, follow);
- recognizer->state->exception->type = ANTLR3_MISSING_TOKEN_EXCEPTION;
- recognizer->state->exception->message = (void*)ANTLR3_MISSING_TOKEN_EXCEPTION_NAME;
- recognizer->state->exception->token = matchedSymbol;
- recognizer->state->exception->expecting = ttype;
- }
-
- reportError(recognizer);
- Unreachable("reportError should have thrown exception in AntlrInput::recoverFromMismatchedToken");
-}
-
-
/// Report a recognition problem.
///
/// This method sets errorRecovery to indicate the parser is recovering