KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > derby > impl > tools > ij > ParseException


1 /* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */
2 /*
3
4    Derby - Class org.apache.derby.impl.tools.ij.ParseException
5
6    Licensed to the Apache Software Foundation (ASF) under one or more
7    contributor license agreements. See the NOTICE file distributed with
8    this work for additional information regarding copyright ownership.
9    The ASF licenses this file to You under the Apache License, Version 2.0
10    (the "License"); you may not use this file except in compliance with
11    the License. You may obtain a copy of the License at
12
13       http://www.apache.org/licenses/LICENSE-2.0
14
15    Unless required by applicable law or agreed to in writing, software
16    distributed under the License is distributed on an "AS IS" BASIS,
17    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18    See the License for the specific language governing permissions and
19    limitations under the License.
20
21  */

22 package org.apache.derby.impl.tools.ij;
23
24 /**
25  * This exception is thrown when parse errors are encountered.
26  * You can explicitly create objects of this exception type by
27  * calling the method generateParseException in the generated
28  * parser.
29  *
30  * You can modify this class to customize your error reporting
31  * mechanisms so long as you retain the public fields.
32  */

33 public class ParseException extends Exception JavaDoc {
34   /**
35    * This constructor is used by the method "generateParseException"
36    * in the generated parser. Calling this constructor generates
37    * a new object of this type with the fields "currentToken",
38    * "expectedTokenSequences", and "tokenImage" set. The boolean
39    * flag "specialConstructor" is also set to true to indicate that
40    * this constructor was used to create this object.
41    * This constructor calls its super class with the empty string
42    * to force the "toString" method of parent class "Throwable" to
43    * print the error message in the form:
44    * ParseException: <result of getMessage>
45    */

46   public ParseException(Token currentTokenVal,
47                         int[][] expectedTokenSequencesVal,
48                         String JavaDoc[] tokenImageVal
49                        )
50   {
51     super("");
52     specialConstructor = true;
53     currentToken = currentTokenVal;
54     expectedTokenSequences = expectedTokenSequencesVal;
55     tokenImage = tokenImageVal;
56   }
57
58   /**
59    * The following constructors are for use by you for whatever
60    * purpose you can think of. Constructing the exception in this
61    * manner makes the exception behave in the normal way - i.e., as
62    * documented in the class "Throwable". The fields "errorToken",
63    * "expectedTokenSequences", and "tokenImage" do not contain
64    * relevant information. The JavaCC generated code does not use
65    * these constructors.
66    */

67
68   public ParseException() {
69     super();
70     specialConstructor = false;
71   }
72
73   public ParseException(String JavaDoc message) {
74     super(message);
75     specialConstructor = false;
76   }
77
78   /**
79    * This variable determines which constructor was used to create
80    * this object and thereby affects the semantics of the
81    * "getMessage" method (see below).
82    */

83   protected boolean specialConstructor;
84
85   /**
86    * This is the last token that has been consumed successfully. If
87    * this object has been created due to a parse error, the token
88    * followng this token will (therefore) be the first error token.
89    */

90   public Token currentToken;
91
92   /**
93    * Each entry in this array is an array of integers. Each array
94    * of integers represents a sequence of tokens (by their ordinal
95    * values) that is expected at this point of the parse.
96    */

97   public int[][] expectedTokenSequences;
98
99   /**
100    * This is a reference to the "tokenImage" array of the generated
101    * parser within which the parse error occurred. This array is
102    * defined in the generated ...Constants interface.
103    */

104   public String JavaDoc[] tokenImage;
105
106   /**
107    * This method has the standard behavior when this object has been
108    * created using the standard constructors. Otherwise, it uses
109    * "currentToken" and "expectedTokenSequences" to generate a parse
110    * error message and returns it. If this object has been created
111    * due to a parse error, and you do not catch it (it gets thrown
112    * from the parser), then this method is called during the printing
113    * of the final stack trace, and hence the correct error message
114    * gets displayed.
115    */

116   public String JavaDoc getMessage() {
117     if (!specialConstructor) {
118       return super.getMessage();
119     }
120     String JavaDoc expected = "";
121     int maxSize = 0;
122     for (int i = 0; i < expectedTokenSequences.length; i++) {
123       if (maxSize < expectedTokenSequences[i].length) {
124         maxSize = expectedTokenSequences[i].length;
125       }
126       for (int j = 0; j < expectedTokenSequences[i].length; j++) {
127         expected += tokenImage[expectedTokenSequences[i][j]] + " ";
128       }
129       if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
130         expected += "...";
131       }
132       expected += eol + " ";
133     }
134     String JavaDoc retval = "Encountered \"";
135     Token tok = currentToken.next;
136     for (int i = 0; i < maxSize; i++) {
137       if (i != 0) retval += " ";
138       if (tok.kind == 0) {
139         retval += tokenImage[0];
140         break;
141       }
142       retval += add_escapes(tok.image);
143       tok = tok.next;
144     }
145     retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
146  /*
147   * for output compatibility with previous releases, do not report expected tokens.
148   *
149     retval += "." + eol;
150     if (expectedTokenSequences.length == 1) {
151       retval += "Was expecting:" + eol + " ";
152     } else {
153       retval += "Was expecting one of:" + eol + " ";
154     }
155     retval += expected;
156   */

157     return retval;
158   }
159
160   /**
161    * The end of line string for this machine.
162    */

163   protected String JavaDoc eol = System.getProperty("line.separator", "\n");
164
165   /**
166    * Used to convert raw characters to their escaped version
167    * when these raw version cannot be used as part of an ASCII
168    * string literal.
169    */

170   protected String JavaDoc add_escapes(String JavaDoc str) {
171       StringBuffer JavaDoc retval = new StringBuffer JavaDoc();
172       char ch;
173       for (int i = 0; i < str.length(); i++) {
174         switch (str.charAt(i))
175         {
176            case 0 :
177               continue;
178            case '\b':
179               retval.append("\\b");
180               continue;
181            case '\t':
182               retval.append("\\t");
183               continue;
184            case '\n':
185               retval.append("\\n");
186               continue;
187            case '\f':
188               retval.append("\\f");
189               continue;
190            case '\r':
191               retval.append("\\r");
192               continue;
193            case '\"':
194               retval.append("\\\"");
195               continue;
196            case '\'':
197               retval.append("\\\'");
198               continue;
199            case '\\':
200               retval.append("\\\\");
201               continue;
202            default:
203               if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
204                  String JavaDoc s = "0000" + Integer.toString(ch, 16);
205                  retval.append("\\u" + s.substring(s.length() - 4, s.length()));
206               } else {
207                  retval.append(ch);
208               }
209               continue;
210         }
211       }
212       return retval.toString();
213    }
214
215 }
216
Popular Tags