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