1/* ANTLR Translator Generator 2 * Project led by Terence Parr at http://www.jGuru.com 3 * Software rights: http://www.antlr.org/license.html 4 * 5 * $Id: //depot/code/org.antlr/release/antlr-2.7.7/lib/cpp/src/MismatchedCharException.cpp#2 $ 6 */ 7 8#include "antlr/CharScanner.hpp" 9#include "antlr/MismatchedCharException.hpp" 10#include "antlr/String.hpp" 11 12#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 13namespace antlr { 14#endif 15 16MismatchedCharException::MismatchedCharException() 17 : RecognitionException("Mismatched char") 18{} 19 20// Expected range / not range 21MismatchedCharException::MismatchedCharException( 22 int c, 23 int lower, 24 int upper_, 25 bool matchNot, 26 CharScanner* scanner_ 27) : RecognitionException("Mismatched char", 28 scanner_->getFilename(), 29 scanner_->getLine(), scanner_->getColumn()) 30 , mismatchType(matchNot ? NOT_RANGE : RANGE) 31 , foundChar(c) 32 , expecting(lower) 33 , upper(upper_) 34 , scanner(scanner_) 35{ 36} 37 38// Expected token / not token 39MismatchedCharException::MismatchedCharException( 40 int c, 41 int expecting_, 42 bool matchNot, 43 CharScanner* scanner_ 44) : RecognitionException("Mismatched char", 45 scanner_->getFilename(), 46 scanner_->getLine(), scanner_->getColumn()) 47 , mismatchType(matchNot ? NOT_CHAR : CHAR) 48 , foundChar(c) 49 , expecting(expecting_) 50 , scanner(scanner_) 51{ 52} 53 54// Expected BitSet / not BitSet 55MismatchedCharException::MismatchedCharException( 56 int c, 57 BitSet set_, 58 bool matchNot, 59 CharScanner* scanner_ 60) : RecognitionException("Mismatched char", 61 scanner_->getFilename(), 62 scanner_->getLine(), scanner_->getColumn()) 63 , mismatchType(matchNot ? NOT_SET : SET) 64 , foundChar(c) 65 , set(set_) 66 , scanner(scanner_) 67{ 68} 69 70ANTLR_USE_NAMESPACE(std)string MismatchedCharException::getMessage() const 71{ 72 ANTLR_USE_NAMESPACE(std)string s; 73 74 switch (mismatchType) { 75 case CHAR : 76 s += "expecting '" + charName(expecting) + "', found '" + charName(foundChar) + "'"; 77 break; 78 case NOT_CHAR : 79 s += "expecting anything but '" + charName(expecting) + "'; got it anyway"; 80 break; 81 case RANGE : 82 s += "expecting token in range: '" + charName(expecting) + "'..'" + charName(upper) + "', found '" + charName(foundChar) + "'"; 83 break; 84 case NOT_RANGE : 85 s += "expecting token NOT in range: " + charName(expecting) + "'..'" + charName(upper) + "', found '" + charName(foundChar) + "'"; 86 break; 87 case SET : 88 case NOT_SET : 89 { 90 s += ANTLR_USE_NAMESPACE(std)string("expecting ") + (mismatchType == NOT_SET ? "NOT " : "") + "one of ("; 91 ANTLR_USE_NAMESPACE(std)vector<unsigned int> elems = set.toArray(); 92 for ( unsigned int i = 0; i < elems.size(); i++ ) 93 { 94 s += " '"; 95 s += charName(elems[i]); 96 s += "'"; 97 } 98 s += "), found '" + charName(foundChar) + "'"; 99 } 100 break; 101 default : 102 s += RecognitionException::getMessage(); 103 break; 104 } 105 106 return s; 107} 108 109#ifndef NO_STATIC_CONSTS 110const int MismatchedCharException::CHAR; 111const int MismatchedCharException::NOT_CHAR; 112const int MismatchedCharException::RANGE; 113const int MismatchedCharException::NOT_RANGE; 114const int MismatchedCharException::SET; 115const int MismatchedCharException::NOT_SET; 116#endif 117 118#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 119} 120#endif 121