View Javadoc

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