ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-3.0/src/antlr/MismatchedCharException.cpp
Revision: 2469
Committed: Fri Dec 2 15:38:03 2005 UTC (18 years, 7 months ago) by tim
File size: 3190 byte(s)
Log Message:
End of the Link --> List
Return of the Oject-Oriented
replace yacc/lex parser with antlr parser

File Contents

# Content
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: MismatchedCharException.cpp,v 1.1 2005-12-02 15:38:02 tim Exp $
6 */
7
8 #include "antlr/CharScanner.hpp"
9 #include "antlr/MismatchedCharException.hpp"
10 #include "antlr/String.hpp"
11
12 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
13 namespace antlr {
14 #endif
15
16 MismatchedCharException::MismatchedCharException()
17 : RecognitionException("Mismatched char")
18 {}
19
20 // Expected range / not range
21 MismatchedCharException::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
39 MismatchedCharException::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
55 MismatchedCharException::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
70 ANTLR_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
110 const int MismatchedCharException::CHAR;
111 const int MismatchedCharException::NOT_CHAR;
112 const int MismatchedCharException::RANGE;
113 const int MismatchedCharException::NOT_RANGE;
114 const int MismatchedCharException::SET;
115 const int MismatchedCharException::NOT_SET;
116 #endif
117
118 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
119 }
120 #endif