/**
* SOFTWARE RIGHTS
*
* ANTLR 2.6.0 MageLang Insitute, 1998
*
* We reserve no legal rights to the ANTLR--it is fully in the
* public domain. An individual or company may do whatever
* they wish with source code distributed with ANTLR or the
* code generated by ANTLR, including the incorporation of
* ANTLR, or its output, into commerical software.
*
* We encourage users to develop software with ANTLR. However,
* we do ask that credit is given to us for developing
* ANTLR. By "credit", we mean that if you use ANTLR or
* incorporate any source code into one of your programs
* (commercial product, research project, or otherwise) that
* you acknowledge this fact somewhere in the documentation,
* research report, etc... If you like ANTLR and have
* developed a nice tool with the output, please mention that
* you developed it using ANTLR. In addition, we ask that the
* headers remain intact in our source code. As long as these
* guidelines are kept, we expect to continue enhancing this
* system and expect to make other tools available as they are
* completed.
*
* The ANTLR gang:
* @version ANTLR 2.6.0 MageLang Insitute, 1998
* @author Terence Parr, MageLang Institute
* @author
John Lilley, Empathy Software
* @author
Pete Wells
*/
#include "antlr/MismatchedTokenException.h"
#include "antlr/String.h"
ANTLR_BEGIN_NAMESPACE(antlr)
MismatchedTokenException::MismatchedTokenException()
: RecognitionException("Mismatched Token: expecting any AST node","",1)
, token(0)
, node(nullASTptr)
{
}
// Expected range / not range
MismatchedTokenException::MismatchedTokenException(
const ANTLR_USE_NAMESPACE(std)vector& tokenNames_,
RefAST node_,
int lower,
int upper_,
bool matchNot
) : RecognitionException("Mismatched Token")
, tokenNames(tokenNames_)
, token(0)
, node(node_)
, tokenText( (node_ ? node_->toString(): ANTLR_USE_NAMESPACE(std)string("")) )
, mismatchType(matchNot ? NOT_RANGE : RANGE)
, expecting(lower)
, upper(upper_)
{
fileName = "";
}
// Expected token / not token
MismatchedTokenException::MismatchedTokenException(
const ANTLR_USE_NAMESPACE(std)vector& tokenNames_,
RefAST node_,
int expecting_,
bool matchNot
) : RecognitionException("Mismatched Token")
, tokenNames(tokenNames_)
, token(0)
, node(node_)
, tokenText( (node_ ? node_->toString(): ANTLR_USE_NAMESPACE(std)string("")) )
, mismatchType(matchNot ? NOT_TOKEN : TOKEN)
, expecting(expecting_)
{
fileName = "";
}
// Expected BitSet / not BitSet
MismatchedTokenException::MismatchedTokenException(
const ANTLR_USE_NAMESPACE(std)vector& tokenNames_,
RefAST node_,
BitSet set_,
bool matchNot
) : RecognitionException("Mismatched Token")
, tokenNames(tokenNames_)
, token(0)
, node(node_)
, tokenText( (node_ ? node_->toString(): ANTLR_USE_NAMESPACE(std)string("")) )
, mismatchType(matchNot ? NOT_SET : SET)
, set(set_)
{
fileName = "";
}
// Expected range / not range
MismatchedTokenException::MismatchedTokenException(
const ANTLR_USE_NAMESPACE(std)vector& tokenNames_,
RefToken token_,
int lower,
int upper_,
bool matchNot,
const ANTLR_USE_NAMESPACE(std)string& fileName_
) : RecognitionException("Mismatched Token",fileName_,token_->getLine(),token_->getColumn())
, tokenNames(tokenNames_)
, token(token_)
, node(nullASTptr)
, tokenText(token_->getText())
, mismatchType(matchNot ? NOT_RANGE : RANGE)
, expecting(lower)
, upper(upper_)
{
}
// Expected token / not token
MismatchedTokenException::MismatchedTokenException(
const ANTLR_USE_NAMESPACE(std)vector& tokenNames_,
RefToken token_,
int expecting_,
bool matchNot,
const ANTLR_USE_NAMESPACE(std)string& fileName_
) : RecognitionException("Mismatched Token",fileName_,token_->getLine(),token_->getColumn())
, tokenNames(tokenNames_)
, token(token_)
, node(nullASTptr)
, tokenText(token_->getText())
, mismatchType(matchNot ? NOT_TOKEN : TOKEN)
, expecting(expecting_)
{
}
// Expected BitSet / not BitSet
MismatchedTokenException::MismatchedTokenException(
const ANTLR_USE_NAMESPACE(std)vector& tokenNames_,
RefToken token_,
BitSet set_,
bool matchNot,
const ANTLR_USE_NAMESPACE(std)string& fileName_
) : RecognitionException("Mismatched Token",fileName_,token_->getLine(),token_->getColumn())
, tokenNames(tokenNames_)
, token(token_)
, node(nullASTptr)
, tokenText(token_->getText())
, mismatchType(matchNot ? NOT_SET : SET)
, set(set_)
{
}
// deprecated As of ANTLR 2.7.0
ANTLR_USE_NAMESPACE(std)string MismatchedTokenException::getErrorMessage() const
{
return getMessage();
}
ANTLR_USE_NAMESPACE(std)string MismatchedTokenException::getMessage() const
{
ANTLR_USE_NAMESPACE(std)string s;
switch (mismatchType) {
case TOKEN:
s += "expecting " + tokenName(expecting) + ", found '" + tokenText + "'";
break;
case NOT_TOKEN:
s += "expecting anything but " + tokenName(expecting) + "; got it anyway";
break;
case RANGE:
s += "expecting token in range: " + tokenName(expecting) + ".." + tokenName(upper) + ", found '" + tokenText + "'";
break;
case NOT_RANGE:
s += "expecting token NOT in range: " + tokenName(expecting) + ".." + tokenName(upper) + ", found '" + tokenText + "'";
break;
case SET:
case NOT_SET:
{
s += ANTLR_USE_NAMESPACE(std)string("expecting ") + (mismatchType == NOT_SET ? "NOT " : "") + "one of (";
ANTLR_USE_NAMESPACE(std)vector elems = set.toArray();
for (int i = 0; i < (int) elems.size(); i++)
{
s += " ";
s += tokenName(elems[i]);
}
s += "), found '" + tokenText + "'";
}
break;
default:
s = RecognitionException::getMessage();
break;
}
return s;
}
ANTLR_USE_NAMESPACE(std)string MismatchedTokenException::tokenName(int tokenType) const
{
if (tokenType == Token::INVALID_TYPE) {
return "";
}
else if (tokenType < 0 || tokenType >= (int) tokenNames.size()) {
return ANTLR_USE_NAMESPACE(std)string("<") + tokenType + ">";
}
else {
return tokenNames[tokenType];
}
}
ANTLR_USE_NAMESPACE(std)string MismatchedTokenException::toString() const {
if (token) {
return getFileLineString() + getMessage();
}
return getMessage();
}
#ifndef NO_STATIC_CONSTS
const int MismatchedTokenException::TOKEN;
const int MismatchedTokenException::NOT_TOKEN;
const int MismatchedTokenException::RANGE;
const int MismatchedTokenException::NOT_RANGE;
const int MismatchedTokenException::SET;
const int MismatchedTokenException::NOT_SET;
#endif
ANTLR_END_NAMESPACE