001/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 */
002/**
003 * Licensed to the Apache Software Foundation (ASF) under one
004 * or more contributor license agreements.  See the NOTICE file
005 * distributed with this work for additional information
006 * regarding copyright ownership.  The ASF licenses this file
007 * to you under the Apache License, Version 2.0 (the
008 * "License"); you may not use this file except in compliance
009 * with the License.  You may obtain a copy of the License at
010 *
011 *     http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 */
019
020package org.apache.hadoop.record.compiler.generated;
021
022import org.apache.hadoop.classification.InterfaceAudience;
023import org.apache.hadoop.classification.InterfaceStability;
024
025/**
026 * @deprecated Replaced by <a href="https://hadoop.apache.org/avro/">Avro</a>.
027 */
028@Deprecated
029@InterfaceAudience.Public
030@InterfaceStability.Stable
031public class TokenMgrError extends Error
032{
033  /*
034   * Ordinals for various reasons why an Error of this type can be thrown.
035   */
036
037  /**
038   * Lexical error occured.
039   */
040  static final int LEXICAL_ERROR = 0;
041
042  /**
043   * An attempt wass made to create a second instance of a static token manager.
044   */
045  static final int STATIC_LEXER_ERROR = 1;
046
047  /**
048   * Tried to change to an invalid lexical state.
049   */
050  static final int INVALID_LEXICAL_STATE = 2;
051
052  /**
053   * Detected (and bailed out of) an infinite loop in the token manager.
054   */
055  static final int LOOP_DETECTED = 3;
056
057  /**
058   * Indicates the reason why the exception is thrown. It will have
059   * one of the above 4 values.
060   */
061  int errorCode;
062
063  /**
064   * Replaces unprintable characters by their espaced (or unicode escaped)
065   * equivalents in the given string
066   */
067  protected static final String addEscapes(String str) {
068    StringBuffer retval = new StringBuffer();
069    char ch;
070    for (int i = 0; i < str.length(); i++) {
071      switch (str.charAt(i))
072        {
073        case 0 :
074          continue;
075        case '\b':
076          retval.append("\\b");
077          continue;
078        case '\t':
079          retval.append("\\t");
080          continue;
081        case '\n':
082          retval.append("\\n");
083          continue;
084        case '\f':
085          retval.append("\\f");
086          continue;
087        case '\r':
088          retval.append("\\r");
089          continue;
090        case '\"':
091          retval.append("\\\"");
092          continue;
093        case '\'':
094          retval.append("\\\'");
095          continue;
096        case '\\':
097          retval.append("\\\\");
098          continue;
099        default:
100          if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
101            String s = "0000" + Integer.toString(ch, 16);
102            retval.append("\\u" + s.substring(s.length() - 4, s.length()));
103          } else {
104            retval.append(ch);
105          }
106          continue;
107        }
108    }
109    return retval.toString();
110  }
111
112  /**
113   * Returns a detailed message for the Error when it is thrown by the
114   * token manager to indicate a lexical error.
115   * Parameters : 
116   *    EOFSeen     : indicates if EOF caused the lexicl error
117   *    curLexState : lexical state in which this error occured
118   *    errorLine   : line number when the error occured
119   *    errorColumn : column number when the error occured
120   *    errorAfter  : prefix that was seen before this error occured
121   *    curchar     : the offending character
122   * Note: You can customize the lexical error message by modifying this method.
123   */
124  protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
125    return("Lexical error at line " +
126           errorLine + ", column " +
127           errorColumn + ".  Encountered: " +
128           (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
129           "after : \"" + addEscapes(errorAfter) + "\"");
130  }
131
132  /**
133   * You can also modify the body of this method to customize your error messages.
134   * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
135   * of end-users concern, so you can return something like : 
136   *
137   *     "Internal Error : Please file a bug report .... "
138   *
139   * from this method for such cases in the release version of your parser.
140   */
141  @Override
142  public String getMessage() {
143    return super.getMessage();
144  }
145
146  /*
147   * Constructors of various flavors follow.
148   */
149
150  public TokenMgrError() {
151  }
152
153  public TokenMgrError(String message, int reason) {
154    super(message);
155    errorCode = reason;
156  }
157
158  public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
159    this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
160  }
161}