1 23 package com.sun.el.parser; 24 25 34 public class ParseException extends Exception { 35 36 48 public ParseException(Token currentTokenVal, 49 int[][] expectedTokenSequencesVal, 50 String [] tokenImageVal 51 ) 52 { 53 super(""); 54 specialConstructor = true; 55 currentToken = currentTokenVal; 56 expectedTokenSequences = expectedTokenSequencesVal; 57 tokenImage = tokenImageVal; 58 } 59 60 69 70 public ParseException() { 71 super(); 72 specialConstructor = false; 73 } 74 75 public ParseException(String message) { 76 super(message); 77 specialConstructor = false; 78 } 79 80 85 protected boolean specialConstructor; 86 87 92 public Token currentToken; 93 94 99 public int[][] expectedTokenSequences; 100 101 106 public String [] tokenImage; 107 108 118 public String getMessage() { 119 if (!specialConstructor) { 120 return super.getMessage(); 121 } 122 String expected = ""; 123 int maxSize = 0; 124 for (int i = 0; i < expectedTokenSequences.length; i++) { 125 if (maxSize < expectedTokenSequences[i].length) { 126 maxSize = expectedTokenSequences[i].length; 127 } 128 for (int j = 0; j < expectedTokenSequences[i].length; j++) { 129 expected += tokenImage[expectedTokenSequences[i][j]] + " "; 130 } 131 if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) { 132 expected += "..."; 133 } 134 expected += eol + " "; 135 } 136 String retval = "Encountered \""; 137 Token tok = currentToken.next; 138 for (int i = 0; i < maxSize; i++) { 139 if (i != 0) retval += " "; 140 if (tok.kind == 0) { 141 retval += tokenImage[0]; 142 break; 143 } 144 retval += add_escapes(tok.image); 145 tok = tok.next; 146 } 147 retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn; 148 retval += "." + eol; 149 if (expectedTokenSequences.length == 1) { 150 retval += "Was expecting:" + eol + " "; 151 } else { 152 retval += "Was expecting one of:" + eol + " "; 153 } 154 retval += expected; 155 return retval; 156 } 157 158 161 protected String eol = System.getProperty("line.separator", "\n"); 162 163 168 protected String add_escapes(String str) { 169 StringBuffer retval = new StringBuffer (); 170 char ch; 171 for (int i = 0; i < str.length(); i++) { 172 switch (str.charAt(i)) 173 { 174 case 0 : 175 continue; 176 case '\b': 177 retval.append("\\b"); 178 continue; 179 case '\t': 180 retval.append("\\t"); 181 continue; 182 case '\n': 183 retval.append("\\n"); 184 continue; 185 case '\f': 186 retval.append("\\f"); 187 continue; 188 case '\r': 189 retval.append("\\r"); 190 continue; 191 case '\"': 192 retval.append("\\\""); 193 continue; 194 case '\'': 195 retval.append("\\\'"); 196 continue; 197 case '\\': 198 retval.append("\\\\"); 199 continue; 200 default: 201 if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { 202 String s = "0000" + Integer.toString(ch, 16); 203 retval.append("\\u" + s.substring(s.length() - 4, s.length())); 204 } else { 205 retval.append(ch); 206 } 207 continue; 208 } 209 } 210 return retval.toString(); 211 } 212 213 } 214 | Popular Tags |