View Javadoc

    1   /*
    2    * Copyright 2002-2006 The Apache Software Foundation.
    3    *
    4    * Licensed under the Apache License, Version 2.0 (the "License");
    5    * you may not use this file except in compliance with the License.
    6    * You may obtain a copy of the License at
    7    *
    8    *      http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  /* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 2.1 */
    17  package org.apache.commons.jexl.parser;
    18
    19  public class TokenMgrError extends Error {
    20      /*** serialization version id jdk13 generated. */
    21      static final long serialVersionUID = 2843513002462329650L;
    22
    23      /*
    24       * Ordinals for various reasons why an Error of this type can be thrown.
    25       */
    26
    27      /***
    28       * Lexical error occured.
    29       */
    30      static final int LEXICAL_ERROR = 0;
    31
    32      /***
    33       * An attempt wass made to create a second instance of a static token
    34       * manager.
    35       */
    36      static final int STATIC_LEXER_ERROR = 1;
    37
    38      /***
    39       * Tried to change to an invalid lexical state.
    40       */
    41      static final int INVALID_LEXICAL_STATE = 2;
    42
    43      /***
    44       * Detected (and bailed out of) an infinite loop in the token manager.
    45       */
    46      static final int LOOP_DETECTED = 3;
    47
    48      /***
    49       * Indicates the reason why the exception is thrown. It will have one of the
    50       * above 4 values.
    51       */
    52      int errorCode;
    53
    54      /***
    55       * Replaces unprintable characters by their espaced (or unicode escaped)
    56       * equivalents in the given string
    57       */
    58      protected static final String addEscapes(String str) {
    59          StringBuffer retval = new StringBuffer();
    60          char ch;
    61          for (int i = 0; i < str.length(); i++) {
    62              switch (str.charAt(i)) {
    63                  case 0:
    64                      continue;
    65                  case '\b':
    66                      retval.append("//b");
    67                      continue;
    68                  case '\t':
    69                      retval.append("//t");
    70                      continue;
    71                  case '\n':
    72                      retval.append("//n");
    73                      continue;
    74                  case '\f':
    75                      retval.append("//f");
    76                      continue;
    77                  case '\r':
    78                      retval.append("//r");
    79                      continue;
    80                  case '\"':
    81                      retval.append("//\"");
    82                      continue;
    83                  case '\'':
    84                      retval.append("//\'");
    85                      continue;
    86                  case '//':
    87                      retval.append("////");
    88                      continue;
    89                  default:
    90                      if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
    91                          String s = "0000" + Integer.toString(ch, 16);
    92                          retval.append("//u" + s.substring(s.length() - 4, s.length()));
    93                      } else {
    94                          retval.append(ch);
    95                      }
    96                      continue;
    97              }
    98          }
    99          return retval.toString();
    100     }
    101
    102     /***
    103      * Returns a detailed message for the Error when it is thrown by the token
    104      * manager to indicate a lexical error. Parameters : EOFSeen : indicates if
    105      * EOF caused the lexicl error curLexState : lexical state in which this
    106      * error occured errorLine : line number when the error occured errorColumn :
    107      * column number when the error occured errorAfter : prefix that was seen
    108      * before this error occured curchar : the offending character Note: You can
    109      * customize the lexical error message by modifying this method.
    110      */
    111     private static final String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn,
    112         String errorAfter, char curChar) {
    113         return ("Lexical error at line " + errorLine + ", column " + errorColumn + ".  Encountered: "
    114             + (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int) curChar + "), ")
    115             + "after : \"" + addEscapes(errorAfter) + "\"");
    116     }
    117
    118     /***
    119      * You can also modify the body of this method to customize your error
    120      * messages. For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE
    121      * are not of end-users concern, so you can return something like :
    122      *
    123      * "Internal Error : Please file a bug report .... "
    124      *
    125      * from this method for such cases in the release version of your parser.
    126      */
    127     public String getMessage() {
    128         return super.getMessage();
    129     }
    130
    131     /*
    132      * Constructors of various flavors follow.
    133      */
    134
    135     public TokenMgrError() {
    136     }
    137
    138     public TokenMgrError(String message, int reason) {
    139         super(message);
    140         errorCode = reason;
    141     }
    142
    143     public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter,
    144         char curChar, int reason) {
    145         this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
    146     }
    147 }