001:/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 2.1 */
002:package org.activemq.selector.mockrunner;
003:
004:/**
005: * Alwin Ibba: Changed package
006: */
007:public class TokenMgrError extends Error {
008: /*
009: * Ordinals for various reasons why an Error of this type can be thrown.
010: */
011:
012: /**
013: * Lexical error occured.
014: */
015: static final int LEXICAL_ERROR = 0;
016:
017: /**
018: * An attempt wass made to create a second instance of a static token manager.
019: */
020: static final int STATIC_LEXER_ERROR = 1;
021:
022: /**
023: * Tried to change to an invalid lexical state.
024: */
025: static final int INVALID_LEXICAL_STATE = 2;
026:
027: /**
028: * Detected (and bailed out of) an infinite loop in the token manager.
029: */
030: static final int LOOP_DETECTED = 3;
031:
032: /**
033: * Indicates the reason why the exception is thrown. It will have
034: * one of the above 4 values.
035: */
036: int errorCode;
037:
038: /**
039: * Replaces unprintable characters by their espaced (or unicode escaped)
040: * equivalents in the given string
041: */
042: protected static final String addEscapes(String str) {
043: StringBuffer retval = new StringBuffer();
044: char ch;
045: for (int i = 0; i < str.length(); i++) {
046: switch (str.charAt(i)) {
047: case 0:
048: continue;
049: case '\b':
050: retval.append("\\b");
051: continue;
052: case '\t':
053: retval.append("\\t");
054: continue;
055: case '\n':
056: retval.append("\\n");
057: continue;
058: case '\f':
059: retval.append("\\f");
060: continue;
061: case '\r':
062: retval.append("\\r");
063: continue;
064: case '\"':
065: retval.append("\\\"");
066: continue;
067: case '\'':
068: retval.append("\\\'");
069: continue;
070: case '\\':
071: retval.append("\\\\");
072: continue;
073: default:
074: if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
075: String s = "0000" + Integer.toString(ch, 16);
076: retval.append("\\u" + s.substring(s.length() - 4, s.length()));
077: }
078: else {
079: retval.append(ch);
080: }
081: continue;
082: }
083: }
084: return retval.toString();
085: }
086:
087: /**
088: * Returns a detailed message for the Error when it is thrown by the
089: * token manager to indicate a lexical error.
090: * Parameters :
091: * EOFSeen : indicates if EOF caused the lexicl error
092: * curLexState : lexical state in which this error occured
093: * errorLine : line number when the error occured
094: * errorColumn : column number when the error occured
095: * errorAfter : prefix that was seen before this error occured
096: * curchar : the offending character
097: * Note: You can customize the lexical error message by modifying this method.
098: */
099: private static final String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
100: return ("Lexical error at line " +
101: errorLine + ", column " +
102: errorColumn + ". Encountered: " +
103: (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int) curChar + "), ") +
104: "after : \"" + addEscapes(errorAfter) + "\"");
105: }
106:
107: /**
108: * You can also modify the body of this method to customize your error messages.
109: * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
110: * of end-users concern, so you can return something like :
111: * <p/>
112: * "Internal Error : Please file a bug report .... "
113: * <p/>
114: * from this method for such cases in the release version of your parser.
115: */
116: public String getMessage() {
117: return super .getMessage();
118: }
119:
120: /*
121: * Constructors of various flavors follow.
122: */
123:
124: public TokenMgrError() {
125: }
126:
127: public TokenMgrError(String message, int reason) {
128: super (message);
129: errorCode = reason;
130: }
131:
132: public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
133: this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
134: }
135:}
|