xref: /aosp_15_r20/external/apache-commons-bcel/src/examples/Mini/TokenMgrError.java (revision 0c56280ab0842982c46a149f7b9eaa497e31e292)
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