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