KDevelop API Documentation

MismatchedTokenException.cpp

Go to the documentation of this file.
00001 /* ANTLR Translator Generator
00002  * Project led by Terence Parr at http://www.jGuru.com
00003  * Software rights: http://www.antlr.org/RIGHTS.html
00004  *
00005  * $Id: MismatchedTokenException.cpp,v 1.2 2003/05/02 00:36:20 okellogg Exp $
00006  */
00007 
00008 #include "antlr/MismatchedTokenException.hpp"
00009 #include "antlr/String.hpp"
00010 
00011 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
00012 namespace antlr {
00013 #endif
00014 
00015 MismatchedTokenException::MismatchedTokenException()
00016   : RecognitionException("Mismatched Token: expecting any AST node","<AST>",-1,-1)
00017   , token(0)
00018   , node(nullASTptr)
00019   , tokenNames(0)
00020   , numTokens(0)
00021 {
00022 }
00023 
00024 // Expected range / not range
00025 MismatchedTokenException::MismatchedTokenException(
00026     const char* const* tokenNames_,
00027     const int numTokens_,
00028     RefAST node_,
00029     int lower,
00030     int upper_,
00031     bool matchNot
00032 ) : RecognitionException("Mismatched Token","<AST>",-1,-1)
00033   , token(0)
00034   , node(node_)
00035   , tokenText( (node_ ? node_->toString(): ANTLR_USE_NAMESPACE(std)string("<empty tree>")) )
00036   , mismatchType(matchNot ? NOT_RANGE : RANGE)
00037   , expecting(lower)
00038   , upper(upper_)
00039   , tokenNames(tokenNames_)
00040   , numTokens(numTokens_)
00041 {
00042 }
00043 
00044 // Expected token / not token
00045 MismatchedTokenException::MismatchedTokenException(
00046     const char* const* tokenNames_,
00047     const int numTokens_,
00048     RefAST node_,
00049     int expecting_,
00050     bool matchNot
00051 ) : RecognitionException("Mismatched Token","<AST>",-1,-1)
00052   , token(0)
00053   , node(node_)
00054   , tokenText( (node_ ? node_->toString(): ANTLR_USE_NAMESPACE(std)string("<empty tree>")) )
00055   , mismatchType(matchNot ? NOT_TOKEN : TOKEN)
00056   , expecting(expecting_)
00057   , tokenNames(tokenNames_)
00058   , numTokens(numTokens_)
00059 {
00060 }
00061 
00062 // Expected BitSet / not BitSet
00063 MismatchedTokenException::MismatchedTokenException(
00064     const char* const* tokenNames_,
00065     const int numTokens_,
00066     RefAST node_,
00067     BitSet set_,
00068     bool matchNot
00069 ) : RecognitionException("Mismatched Token","<AST>",-1,-1)
00070   , token(0)
00071   , node(node_)
00072   , tokenText( (node_ ? node_->toString(): ANTLR_USE_NAMESPACE(std)string("<empty tree>")) )
00073   , mismatchType(matchNot ? NOT_SET : SET)
00074   , set(set_)
00075   , tokenNames(tokenNames_)
00076   , numTokens(numTokens_)
00077 {
00078 }
00079 
00080 // Expected range / not range
00081 MismatchedTokenException::MismatchedTokenException(
00082     const char* const* tokenNames_,
00083     const int numTokens_,
00084     RefToken token_,
00085     int lower,
00086     int upper_,
00087     bool matchNot,
00088     const ANTLR_USE_NAMESPACE(std)string& fileName_
00089 ) : RecognitionException("Mismatched Token",fileName_,token_->getLine(),token_->getColumn())
00090   , token(token_)
00091   , node(nullASTptr)
00092   , tokenText(token_->getText())
00093   , mismatchType(matchNot ? NOT_RANGE : RANGE)
00094   , expecting(lower)
00095   , upper(upper_)
00096   , tokenNames(tokenNames_)
00097   , numTokens(numTokens_)
00098 {
00099 }
00100 
00101 // Expected token / not token
00102 MismatchedTokenException::MismatchedTokenException(
00103     const char* const* tokenNames_,
00104     const int numTokens_,
00105     RefToken token_,
00106     int expecting_,
00107     bool matchNot,
00108     const ANTLR_USE_NAMESPACE(std)string& fileName_
00109 ) : RecognitionException("Mismatched Token",fileName_,token_->getLine(),token_->getColumn())
00110   , token(token_)
00111   , node(nullASTptr)
00112   , tokenText(token_->getText())
00113   , mismatchType(matchNot ? NOT_TOKEN : TOKEN)
00114   , expecting(expecting_)
00115   , tokenNames(tokenNames_)
00116   , numTokens(numTokens_)
00117 {
00118 }
00119 
00120 // Expected BitSet / not BitSet
00121 MismatchedTokenException::MismatchedTokenException(
00122     const char* const* tokenNames_,
00123     const int numTokens_,
00124     RefToken token_,
00125     BitSet set_,
00126     bool matchNot,
00127     const ANTLR_USE_NAMESPACE(std)string& fileName_
00128 ) : RecognitionException("Mismatched Token",fileName_,token_->getLine(),token_->getColumn())
00129   , token(token_)
00130   , node(nullASTptr)
00131   , tokenText(token_->getText())
00132   , mismatchType(matchNot ? NOT_SET : SET)
00133   , set(set_)
00134   , tokenNames(tokenNames_)
00135   , numTokens(numTokens_)
00136 {
00137 }
00138 
00139 ANTLR_USE_NAMESPACE(std)string MismatchedTokenException::getMessage() const
00140 {
00141     ANTLR_USE_NAMESPACE(std)string s;
00142     switch (mismatchType) {
00143     case TOKEN:
00144         s += "expecting " + tokenName(expecting) + ", found '" + tokenText + "'";
00145         break;
00146     case NOT_TOKEN:
00147         s += "expecting anything but " + tokenName(expecting) + "; got it anyway";
00148         break;
00149     case RANGE:
00150         s += "expecting token in range: " + tokenName(expecting) + ".." + tokenName(upper) + ", found '" + tokenText + "'";
00151         break;
00152     case NOT_RANGE:
00153         s += "expecting token NOT in range: " + tokenName(expecting) + ".." + tokenName(upper) + ", found '" + tokenText + "'";
00154         break;
00155     case SET:
00156     case NOT_SET:
00157         {
00158             s += ANTLR_USE_NAMESPACE(std)string("expecting ") + (mismatchType == NOT_SET ? "NOT " : "") + "one of (";
00159             ANTLR_USE_NAMESPACE(std)vector<unsigned int> elems = set.toArray();
00160             for ( unsigned int i = 0; i < elems.size(); i++ )
00161             {
00162                 s += " ";
00163                 s += tokenName(elems[i]);
00164             }
00165             s += "), found '" + tokenText + "'";
00166         }
00167         break;
00168     default:
00169         s = RecognitionException::getMessage();
00170         break;
00171     }
00172     return s;
00173 }
00174 
00175 ANTLR_USE_NAMESPACE(std)string MismatchedTokenException::tokenName(int tokenType) const
00176 {
00177     if (tokenType == Token::INVALID_TYPE)
00178         return "<Set of tokens>";
00179     else if (tokenType < 0 || tokenType >= numTokens)
00180         return ANTLR_USE_NAMESPACE(std)string("<") + tokenType + ">";
00181     else
00182         return tokenNames[tokenType];
00183 }
00184 
00185 #ifndef NO_STATIC_CONSTS
00186 const int MismatchedTokenException::TOKEN;
00187 const int MismatchedTokenException::NOT_TOKEN;
00188 const int MismatchedTokenException::RANGE;
00189 const int MismatchedTokenException::NOT_RANGE;
00190 const int MismatchedTokenException::SET;
00191 const int MismatchedTokenException::NOT_SET;
00192 #endif
00193 
00194 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
00195 }
00196 #endif
KDE Logo
This file is part of the documentation for KDevelop Version 3.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Feb 22 09:22:34 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003