TokenMgrError.java
001 /* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 */
002 package gate.yam.parse;
003 
004 public class TokenMgrError extends Error
005 {
006    /*
007     * Ordinals for various reasons why an Error of this type can be thrown.
008     */
009 
010    /**
011     * Lexical error occured.
012     */
013    static final int LEXICAL_ERROR = 0;
014 
015    /**
016     * An attempt wass made to create a second instance of a static token manager.
017     */
018    static final int STATIC_LEXER_ERROR = 1;
019 
020    /**
021     * Tried to change to an invalid lexical state.
022     */
023    static final int INVALID_LEXICAL_STATE = 2;
024 
025    /**
026     * Detected (and bailed out of) an infinite loop in the token manager.
027     */
028    static final int LOOP_DETECTED = 3;
029 
030    /**
031     * Indicates the reason why the exception is thrown. It will have
032     * one of the above 4 values.
033     */
034    int errorCode;
035 
036    /**
037     * Replaces unprintable characters by their espaced (or unicode escaped)
038     * equivalents in the given string
039     */
040    protected static final String addEscapes(String str) {
041       StringBuffer retval = new StringBuffer();
042       char ch;
043       for (int i = 0; i < str.length(); i++) {
044         switch (str.charAt(i))
045         {
046            case :
047               continue;
048            case '\b':
049               retval.append("\\b");
050               continue;
051            case '\t':
052               retval.append("\\t");
053               continue;
054            case '\n':
055               retval.append("\\n");
056               continue;
057            case '\f':
058               retval.append("\\f");
059               continue;
060            case '\r':
061               retval.append("\\r");
062               continue;
063            case '\"':
064               retval.append("\\\"");
065               continue;
066            case '\'':
067               retval.append("\\\'");
068               continue;
069            case '\\':
070               retval.append("\\\\");
071               continue;
072            default:
073               if ((ch = str.charAt(i)) 0x20 || ch > 0x7e) {
074                  String s = "0000" + Integer.toString(ch, 16);
075                  retval.append("\\u" + s.substring(s.length() 4, s.length()));
076               else {
077                  retval.append(ch);
078               }
079               continue;
080         }
081       }
082       return retval.toString();
083    }
084 
085    /**
086     * Returns a detailed message for the Error when it is thrown by the
087     * token manager to indicate a lexical error.
088     * Parameters : 
089     *    EOFSeen     : indicates if EOF caused the lexicl error
090     *    curLexState : lexical state in which this error occured
091     *    errorLine   : line number when the error occured
092     *    errorColumn : column number when the error occured
093     *    errorAfter  : prefix that was seen before this error occured
094     *    curchar     : the offending character
095     * Note: You can customize the lexical error message by modifying this method.
096     */
097    protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
098       return("Lexical error at line " +
099            errorLine + ", column " +
100            errorColumn + ".  Encountered: " +
101            (EOFSeen ? "<EOF> " ("\"" + addEscapes(String.valueOf(curChar)) "\""" (" (int)curChar + "), "+
102            "after : \"" + addEscapes(errorAfter"\"");
103    }
104 
105    /**
106     * You can also modify the body of this method to customize your error messages.
107     * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
108     * of end-users concern, so you can return something like : 
109     *
110     *     "Internal Error : Please file a bug report .... "
111     *
112     * from this method for such cases in the release version of your parser.
113     */
114    public String getMessage() {
115       return super.getMessage();
116    }
117 
118    /*
119     * Constructors of various flavors follow.
120     */
121 
122    public TokenMgrError() {
123    }
124 
125    public TokenMgrError(String message, int reason) {
126       super(message);
127       errorCode = reason;
128    }
129 
130    public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
131       this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
132    }
133 }