    001    /* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 5.0 */
    002    /* JavaCCOptions: */
    003    package org.apache.commons.jexl2.parser;
    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=ab169da4e5dc91986e471e334095b1fd (do not edit this line) */