001:/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 2.1 */
002:package org.jbpm.jpdl.el.parser;
003:
004:public class ELTokenMgrError extends Error
005:{
006: private static final long serialVersionUID = 1L;
007:
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: {
048: case 0 :
049: continue;
050: case '\b':
051: retval.append("\\b");
052: continue;
053: case '\t':
054: retval.append("\\t");
055: continue;
056: case '\n':
057: retval.append("\\n");
058: continue;
059: case '\f':
060: retval.append("\\f");
061: continue;
062: case '\r':
063: retval.append("\\r");
064: continue;
065: case '\"':
066: retval.append("\\\"");
067: continue;
068: case '\'':
069: retval.append("\\\'");
070: continue;
071: case '\\':
072: retval.append("\\\\");
073: continue;
074: default:
075: if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
076: String s = "0000" + Integer.toString(ch, 16);
077: retval.append("\\u" + s.substring(s.length() - 4, s.length()));
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: *
112: * "Internal Error : Please file a bug report .... "
113: *
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 ELTokenMgrError() {
125: }
126:
127: public ELTokenMgrError(String message, int reason) {
128: super (message);
129: errorCode = reason;
130: }
131:
132: public ELTokenMgrError(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:}
|