| 1 | /* The following code was generated by JFlex 1.4.2 on 22/07/09 9:31 PM */ |
|---|
| 2 | |
|---|
| 3 | /* |
|---|
| 4 | * This program is free software; you can redistribute it and/or modify |
|---|
| 5 | * it under the terms of the GNU General Public License as published by |
|---|
| 6 | * the Free Software Foundation; either version 2 of the License, or |
|---|
| 7 | * (at your option) any later version. |
|---|
| 8 | * |
|---|
| 9 | * This program is distributed in the hope that it will be useful, |
|---|
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 12 | * GNU General Public License for more details. |
|---|
| 13 | * |
|---|
| 14 | * You should have received a copy of the GNU General Public License |
|---|
| 15 | * along with this program; if not, write to the Free Software |
|---|
| 16 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
|---|
| 17 | */ |
|---|
| 18 | |
|---|
| 19 | /* |
|---|
| 20 | * Scanner.java |
|---|
| 21 | * Copyright (C) 2009 University of Waikato, Hamilton, New Zealand |
|---|
| 22 | */ |
|---|
| 23 | |
|---|
| 24 | package weka.core.json; |
|---|
| 25 | |
|---|
| 26 | import java_cup.runtime.SymbolFactory; |
|---|
| 27 | import java.io.*; |
|---|
| 28 | |
|---|
| 29 | /** |
|---|
| 30 | * A scanner for JSON data files. |
|---|
| 31 | * |
|---|
| 32 | * @author FracPete (fracpete at waikato dot ac dot nz) |
|---|
| 33 | * @version $Revision: 5786 $ |
|---|
| 34 | */ |
|---|
| 35 | |
|---|
| 36 | public class Scanner implements java_cup.runtime.Scanner { |
|---|
| 37 | |
|---|
| 38 | /** This character denotes the end of file */ |
|---|
| 39 | public static final int YYEOF = -1; |
|---|
| 40 | |
|---|
| 41 | /** initial size of the lookahead buffer */ |
|---|
| 42 | private static final int ZZ_BUFFERSIZE = 16384; |
|---|
| 43 | |
|---|
| 44 | /** lexical states */ |
|---|
| 45 | public static final int STRING = 2; |
|---|
| 46 | public static final int YYINITIAL = 0; |
|---|
| 47 | |
|---|
| 48 | /** |
|---|
| 49 | * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l |
|---|
| 50 | * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l |
|---|
| 51 | * at the beginning of a line |
|---|
| 52 | * l is of the form l = 2*k, k a non negative integer |
|---|
| 53 | */ |
|---|
| 54 | private static final int ZZ_LEXSTATE[] = { |
|---|
| 55 | 0, 0, 1, 1 |
|---|
| 56 | }; |
|---|
| 57 | |
|---|
| 58 | /** |
|---|
| 59 | * Translates characters to character classes |
|---|
| 60 | */ |
|---|
| 61 | private static final char [] ZZ_CMAP = { |
|---|
| 62 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 24, 0, 20, 22, 0, 0, |
|---|
| 63 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|---|
| 64 | 20, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 18, 17, 0, |
|---|
| 65 | 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, 0, 0, 0, 0, 0, |
|---|
| 66 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|---|
| 67 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 21, 4, 0, 0, |
|---|
| 68 | 0, 14, 23, 0, 0, 12, 13, 0, 0, 0, 0, 0, 9, 0, 7, 0, |
|---|
| 69 | 0, 0, 11, 15, 10, 8, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0 |
|---|
| 70 | }; |
|---|
| 71 | |
|---|
| 72 | /** |
|---|
| 73 | * Translates DFA states to action switch labels. |
|---|
| 74 | */ |
|---|
| 75 | private static final int [] ZZ_ACTION = zzUnpackAction(); |
|---|
| 76 | |
|---|
| 77 | private static final String ZZ_ACTION_PACKED_0 = |
|---|
| 78 | "\2\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7"+ |
|---|
| 79 | "\3\1\1\10\1\1\1\11\1\12\1\13\1\14\1\15"+ |
|---|
| 80 | "\3\0\2\16\1\17\1\20\1\21\1\22\1\23\1\24"+ |
|---|
| 81 | "\3\0\1\25\1\26"; |
|---|
| 82 | |
|---|
| 83 | private static int [] zzUnpackAction() { |
|---|
| 84 | int [] result = new int[35]; |
|---|
| 85 | int offset = 0; |
|---|
| 86 | offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); |
|---|
| 87 | return result; |
|---|
| 88 | } |
|---|
| 89 | |
|---|
| 90 | private static int zzUnpackAction(String packed, int offset, int [] result) { |
|---|
| 91 | int i = 0; /* index in packed string */ |
|---|
| 92 | int j = offset; /* index in unpacked array */ |
|---|
| 93 | int l = packed.length(); |
|---|
| 94 | while (i < l) { |
|---|
| 95 | int count = packed.charAt(i++); |
|---|
| 96 | int value = packed.charAt(i++); |
|---|
| 97 | do result[j++] = value; while (--count > 0); |
|---|
| 98 | } |
|---|
| 99 | return j; |
|---|
| 100 | } |
|---|
| 101 | |
|---|
| 102 | |
|---|
| 103 | /** |
|---|
| 104 | * Translates a state to a row index in the transition table |
|---|
| 105 | */ |
|---|
| 106 | private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); |
|---|
| 107 | |
|---|
| 108 | private static final String ZZ_ROWMAP_PACKED_0 = |
|---|
| 109 | "\0\0\0\31\0\62\0\62\0\62\0\62\0\62\0\62"+ |
|---|
| 110 | "\0\62\0\113\0\144\0\175\0\226\0\257\0\62\0\62"+ |
|---|
| 111 | "\0\310\0\62\0\341\0\372\0\u0113\0\u012c\0\u0145\0\u015e"+ |
|---|
| 112 | "\0\62\0\62\0\62\0\62\0\62\0\62\0\u0177\0\u0190"+ |
|---|
| 113 | "\0\u01a9\0\62\0\62"; |
|---|
| 114 | |
|---|
| 115 | private static int [] zzUnpackRowMap() { |
|---|
| 116 | int [] result = new int[35]; |
|---|
| 117 | int offset = 0; |
|---|
| 118 | offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); |
|---|
| 119 | return result; |
|---|
| 120 | } |
|---|
| 121 | |
|---|
| 122 | private static int zzUnpackRowMap(String packed, int offset, int [] result) { |
|---|
| 123 | int i = 0; /* index in packed string */ |
|---|
| 124 | int j = offset; /* index in unpacked array */ |
|---|
| 125 | int l = packed.length(); |
|---|
| 126 | while (i < l) { |
|---|
| 127 | int high = packed.charAt(i++) << 16; |
|---|
| 128 | result[j++] = high | packed.charAt(i++); |
|---|
| 129 | } |
|---|
| 130 | return j; |
|---|
| 131 | } |
|---|
| 132 | |
|---|
| 133 | /** |
|---|
| 134 | * The transition table of the DFA |
|---|
| 135 | */ |
|---|
| 136 | private static final int [] ZZ_TRANS = zzUnpackTrans(); |
|---|
| 137 | |
|---|
| 138 | private static final String ZZ_TRANS_PACKED_0 = |
|---|
| 139 | "\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12"+ |
|---|
| 140 | "\2\3\1\13\2\3\1\14\2\3\1\15\1\3\1\16"+ |
|---|
| 141 | "\1\17\1\20\1\3\1\20\1\3\1\20\23\21\1\22"+ |
|---|
| 142 | "\1\21\1\23\1\3\1\21\42\0\1\24\33\0\1\25"+ |
|---|
| 143 | "\33\0\1\26\32\0\1\15\1\27\27\0\1\30\10\0"+ |
|---|
| 144 | "\23\21\1\0\1\21\2\0\1\21\10\0\1\31\2\0"+ |
|---|
| 145 | "\1\32\1\33\1\0\1\34\5\0\1\35\3\0\1\36"+ |
|---|
| 146 | "\12\0\1\37\27\0\1\40\31\0\1\41\37\0\1\27"+ |
|---|
| 147 | "\30\0\1\30\1\27\20\0\1\42\33\0\1\43\33\0"+ |
|---|
| 148 | "\1\40\11\0"; |
|---|
| 149 | |
|---|
| 150 | private static int [] zzUnpackTrans() { |
|---|
| 151 | int [] result = new int[450]; |
|---|
| 152 | int offset = 0; |
|---|
| 153 | offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); |
|---|
| 154 | return result; |
|---|
| 155 | } |
|---|
| 156 | |
|---|
| 157 | private static int zzUnpackTrans(String packed, int offset, int [] result) { |
|---|
| 158 | int i = 0; /* index in packed string */ |
|---|
| 159 | int j = offset; /* index in unpacked array */ |
|---|
| 160 | int l = packed.length(); |
|---|
| 161 | while (i < l) { |
|---|
| 162 | int count = packed.charAt(i++); |
|---|
| 163 | int value = packed.charAt(i++); |
|---|
| 164 | value--; |
|---|
| 165 | do result[j++] = value; while (--count > 0); |
|---|
| 166 | } |
|---|
| 167 | return j; |
|---|
| 168 | } |
|---|
| 169 | |
|---|
| 170 | |
|---|
| 171 | /* error codes */ |
|---|
| 172 | private static final int ZZ_UNKNOWN_ERROR = 0; |
|---|
| 173 | private static final int ZZ_NO_MATCH = 1; |
|---|
| 174 | private static final int ZZ_PUSHBACK_2BIG = 2; |
|---|
| 175 | |
|---|
| 176 | /* error messages for the codes above */ |
|---|
| 177 | private static final String ZZ_ERROR_MSG[] = { |
|---|
| 178 | "Unkown internal scanner error", |
|---|
| 179 | "Error: could not match input", |
|---|
| 180 | "Error: pushback value was too large" |
|---|
| 181 | }; |
|---|
| 182 | |
|---|
| 183 | /** |
|---|
| 184 | * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code> |
|---|
| 185 | */ |
|---|
| 186 | private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); |
|---|
| 187 | |
|---|
| 188 | private static final String ZZ_ATTRIBUTE_PACKED_0 = |
|---|
| 189 | "\2\0\7\11\5\1\2\11\1\1\1\11\1\1\3\0"+ |
|---|
| 190 | "\2\1\6\11\3\0\2\11"; |
|---|
| 191 | |
|---|
| 192 | private static int [] zzUnpackAttribute() { |
|---|
| 193 | int [] result = new int[35]; |
|---|
| 194 | int offset = 0; |
|---|
| 195 | offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); |
|---|
| 196 | return result; |
|---|
| 197 | } |
|---|
| 198 | |
|---|
| 199 | private static int zzUnpackAttribute(String packed, int offset, int [] result) { |
|---|
| 200 | int i = 0; /* index in packed string */ |
|---|
| 201 | int j = offset; /* index in unpacked array */ |
|---|
| 202 | int l = packed.length(); |
|---|
| 203 | while (i < l) { |
|---|
| 204 | int count = packed.charAt(i++); |
|---|
| 205 | int value = packed.charAt(i++); |
|---|
| 206 | do result[j++] = value; while (--count > 0); |
|---|
| 207 | } |
|---|
| 208 | return j; |
|---|
| 209 | } |
|---|
| 210 | |
|---|
| 211 | /** the input device */ |
|---|
| 212 | private java.io.Reader zzReader; |
|---|
| 213 | |
|---|
| 214 | /** the current state of the DFA */ |
|---|
| 215 | private int zzState; |
|---|
| 216 | |
|---|
| 217 | /** the current lexical state */ |
|---|
| 218 | private int zzLexicalState = YYINITIAL; |
|---|
| 219 | |
|---|
| 220 | /** this buffer contains the current text to be matched and is |
|---|
| 221 | the source of the yytext() string */ |
|---|
| 222 | private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; |
|---|
| 223 | |
|---|
| 224 | /** the textposition at the last accepting state */ |
|---|
| 225 | private int zzMarkedPos; |
|---|
| 226 | |
|---|
| 227 | /** the current text position in the buffer */ |
|---|
| 228 | private int zzCurrentPos; |
|---|
| 229 | |
|---|
| 230 | /** startRead marks the beginning of the yytext() string in the buffer */ |
|---|
| 231 | private int zzStartRead; |
|---|
| 232 | |
|---|
| 233 | /** endRead marks the last character in the buffer, that has been read |
|---|
| 234 | from input */ |
|---|
| 235 | private int zzEndRead; |
|---|
| 236 | |
|---|
| 237 | /** number of newlines encountered up to the start of the matched text */ |
|---|
| 238 | private int yyline; |
|---|
| 239 | |
|---|
| 240 | /** the number of characters up to the start of the matched text */ |
|---|
| 241 | private int yychar; |
|---|
| 242 | |
|---|
| 243 | /** |
|---|
| 244 | * the number of characters from the last newline up to the start of the |
|---|
| 245 | * matched text |
|---|
| 246 | */ |
|---|
| 247 | private int yycolumn; |
|---|
| 248 | |
|---|
| 249 | /** |
|---|
| 250 | * zzAtBOL == true <=> the scanner is currently at the beginning of a line |
|---|
| 251 | */ |
|---|
| 252 | private boolean zzAtBOL = true; |
|---|
| 253 | |
|---|
| 254 | /** zzAtEOF == true <=> the scanner is at the EOF */ |
|---|
| 255 | private boolean zzAtEOF; |
|---|
| 256 | |
|---|
| 257 | /* user code: */ |
|---|
| 258 | // Author: FracPete (fracpete at waikato dot ac dot nz) |
|---|
| 259 | // Version: $Revision: 5786 $ |
|---|
| 260 | protected SymbolFactory m_SF; |
|---|
| 261 | |
|---|
| 262 | protected StringBuffer m_String = new StringBuffer(); |
|---|
| 263 | |
|---|
| 264 | public Scanner(InputStream r, SymbolFactory sf) { |
|---|
| 265 | this(r); |
|---|
| 266 | m_SF = sf; |
|---|
| 267 | } |
|---|
| 268 | |
|---|
| 269 | public Scanner(Reader r, SymbolFactory sf) { |
|---|
| 270 | this(r); |
|---|
| 271 | m_SF = sf; |
|---|
| 272 | } |
|---|
| 273 | |
|---|
| 274 | |
|---|
| 275 | /** |
|---|
| 276 | * Creates a new scanner |
|---|
| 277 | * There is also a java.io.InputStream version of this constructor. |
|---|
| 278 | * |
|---|
| 279 | * @param in the java.io.Reader to read input from. |
|---|
| 280 | */ |
|---|
| 281 | public Scanner(java.io.Reader in) { |
|---|
| 282 | this.zzReader = in; |
|---|
| 283 | } |
|---|
| 284 | |
|---|
| 285 | /** |
|---|
| 286 | * Creates a new scanner. |
|---|
| 287 | * There is also java.io.Reader version of this constructor. |
|---|
| 288 | * |
|---|
| 289 | * @param in the java.io.Inputstream to read input from. |
|---|
| 290 | */ |
|---|
| 291 | public Scanner(java.io.InputStream in) { |
|---|
| 292 | this(new java.io.InputStreamReader(in)); |
|---|
| 293 | } |
|---|
| 294 | |
|---|
| 295 | |
|---|
| 296 | /** |
|---|
| 297 | * Refills the input buffer. |
|---|
| 298 | * |
|---|
| 299 | * @return <code>false</code>, iff there was new input. |
|---|
| 300 | * |
|---|
| 301 | * @exception java.io.IOException if any I/O-Error occurs |
|---|
| 302 | */ |
|---|
| 303 | private boolean zzRefill() throws java.io.IOException { |
|---|
| 304 | |
|---|
| 305 | /* first: make room (if you can) */ |
|---|
| 306 | if (zzStartRead > 0) { |
|---|
| 307 | System.arraycopy(zzBuffer, zzStartRead, |
|---|
| 308 | zzBuffer, 0, |
|---|
| 309 | zzEndRead-zzStartRead); |
|---|
| 310 | |
|---|
| 311 | /* translate stored positions */ |
|---|
| 312 | zzEndRead-= zzStartRead; |
|---|
| 313 | zzCurrentPos-= zzStartRead; |
|---|
| 314 | zzMarkedPos-= zzStartRead; |
|---|
| 315 | zzStartRead = 0; |
|---|
| 316 | } |
|---|
| 317 | |
|---|
| 318 | /* is the buffer big enough? */ |
|---|
| 319 | if (zzCurrentPos >= zzBuffer.length) { |
|---|
| 320 | /* if not: blow it up */ |
|---|
| 321 | char newBuffer[] = new char[zzCurrentPos*2]; |
|---|
| 322 | System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); |
|---|
| 323 | zzBuffer = newBuffer; |
|---|
| 324 | } |
|---|
| 325 | |
|---|
| 326 | /* finally: fill the buffer with new input */ |
|---|
| 327 | int numRead = zzReader.read(zzBuffer, zzEndRead, |
|---|
| 328 | zzBuffer.length-zzEndRead); |
|---|
| 329 | |
|---|
| 330 | if (numRead > 0) { |
|---|
| 331 | zzEndRead+= numRead; |
|---|
| 332 | return false; |
|---|
| 333 | } |
|---|
| 334 | // unlikely but not impossible: read 0 characters, but not at end of stream |
|---|
| 335 | if (numRead == 0) { |
|---|
| 336 | int c = zzReader.read(); |
|---|
| 337 | if (c == -1) { |
|---|
| 338 | return true; |
|---|
| 339 | } else { |
|---|
| 340 | zzBuffer[zzEndRead++] = (char) c; |
|---|
| 341 | return false; |
|---|
| 342 | } |
|---|
| 343 | } |
|---|
| 344 | |
|---|
| 345 | // numRead < 0 |
|---|
| 346 | return true; |
|---|
| 347 | } |
|---|
| 348 | |
|---|
| 349 | |
|---|
| 350 | /** |
|---|
| 351 | * Closes the input stream. |
|---|
| 352 | */ |
|---|
| 353 | public final void yyclose() throws java.io.IOException { |
|---|
| 354 | zzAtEOF = true; /* indicate end of file */ |
|---|
| 355 | zzEndRead = zzStartRead; /* invalidate buffer */ |
|---|
| 356 | |
|---|
| 357 | if (zzReader != null) |
|---|
| 358 | zzReader.close(); |
|---|
| 359 | } |
|---|
| 360 | |
|---|
| 361 | |
|---|
| 362 | /** |
|---|
| 363 | * Resets the scanner to read from a new input stream. |
|---|
| 364 | * Does not close the old reader. |
|---|
| 365 | * |
|---|
| 366 | * All internal variables are reset, the old input stream |
|---|
| 367 | * <b>cannot</b> be reused (internal buffer is discarded and lost). |
|---|
| 368 | * Lexical state is set to <tt>ZZ_INITIAL</tt>. |
|---|
| 369 | * |
|---|
| 370 | * @param reader the new input stream |
|---|
| 371 | */ |
|---|
| 372 | public final void yyreset(java.io.Reader reader) { |
|---|
| 373 | zzReader = reader; |
|---|
| 374 | zzAtBOL = true; |
|---|
| 375 | zzAtEOF = false; |
|---|
| 376 | zzEndRead = zzStartRead = 0; |
|---|
| 377 | zzCurrentPos = zzMarkedPos = 0; |
|---|
| 378 | yyline = yychar = yycolumn = 0; |
|---|
| 379 | zzLexicalState = YYINITIAL; |
|---|
| 380 | } |
|---|
| 381 | |
|---|
| 382 | |
|---|
| 383 | /** |
|---|
| 384 | * Returns the current lexical state. |
|---|
| 385 | */ |
|---|
| 386 | public final int yystate() { |
|---|
| 387 | return zzLexicalState; |
|---|
| 388 | } |
|---|
| 389 | |
|---|
| 390 | |
|---|
| 391 | /** |
|---|
| 392 | * Enters a new lexical state |
|---|
| 393 | * |
|---|
| 394 | * @param newState the new lexical state |
|---|
| 395 | */ |
|---|
| 396 | public final void yybegin(int newState) { |
|---|
| 397 | zzLexicalState = newState; |
|---|
| 398 | } |
|---|
| 399 | |
|---|
| 400 | |
|---|
| 401 | /** |
|---|
| 402 | * Returns the text matched by the current regular expression. |
|---|
| 403 | */ |
|---|
| 404 | public final String yytext() { |
|---|
| 405 | return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); |
|---|
| 406 | } |
|---|
| 407 | |
|---|
| 408 | |
|---|
| 409 | /** |
|---|
| 410 | * Returns the character at position <tt>pos</tt> from the |
|---|
| 411 | * matched text. |
|---|
| 412 | * |
|---|
| 413 | * It is equivalent to yytext().charAt(pos), but faster |
|---|
| 414 | * |
|---|
| 415 | * @param pos the position of the character to fetch. |
|---|
| 416 | * A value from 0 to yylength()-1. |
|---|
| 417 | * |
|---|
| 418 | * @return the character at position pos |
|---|
| 419 | */ |
|---|
| 420 | public final char yycharat(int pos) { |
|---|
| 421 | return zzBuffer[zzStartRead+pos]; |
|---|
| 422 | } |
|---|
| 423 | |
|---|
| 424 | |
|---|
| 425 | /** |
|---|
| 426 | * Returns the length of the matched text region. |
|---|
| 427 | */ |
|---|
| 428 | public final int yylength() { |
|---|
| 429 | return zzMarkedPos-zzStartRead; |
|---|
| 430 | } |
|---|
| 431 | |
|---|
| 432 | |
|---|
| 433 | /** |
|---|
| 434 | * Reports an error that occured while scanning. |
|---|
| 435 | * |
|---|
| 436 | * In a wellformed scanner (no or only correct usage of |
|---|
| 437 | * yypushback(int) and a match-all fallback rule) this method |
|---|
| 438 | * will only be called with things that "Can't Possibly Happen". |
|---|
| 439 | * If this method is called, something is seriously wrong |
|---|
| 440 | * (e.g. a JFlex bug producing a faulty scanner etc.). |
|---|
| 441 | * |
|---|
| 442 | * Usual syntax/scanner level error handling should be done |
|---|
| 443 | * in error fallback rules. |
|---|
| 444 | * |
|---|
| 445 | * @param errorCode the code of the errormessage to display |
|---|
| 446 | */ |
|---|
| 447 | private void zzScanError(int errorCode) { |
|---|
| 448 | String message; |
|---|
| 449 | try { |
|---|
| 450 | message = ZZ_ERROR_MSG[errorCode]; |
|---|
| 451 | } |
|---|
| 452 | catch (ArrayIndexOutOfBoundsException e) { |
|---|
| 453 | message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; |
|---|
| 454 | } |
|---|
| 455 | |
|---|
| 456 | throw new Error(message); |
|---|
| 457 | } |
|---|
| 458 | |
|---|
| 459 | |
|---|
| 460 | /** |
|---|
| 461 | * Pushes the specified amount of characters back into the input stream. |
|---|
| 462 | * |
|---|
| 463 | * They will be read again by then next call of the scanning method |
|---|
| 464 | * |
|---|
| 465 | * @param number the number of characters to be read again. |
|---|
| 466 | * This number must not be greater than yylength()! |
|---|
| 467 | */ |
|---|
| 468 | public void yypushback(int number) { |
|---|
| 469 | if ( number > yylength() ) |
|---|
| 470 | zzScanError(ZZ_PUSHBACK_2BIG); |
|---|
| 471 | |
|---|
| 472 | zzMarkedPos -= number; |
|---|
| 473 | } |
|---|
| 474 | |
|---|
| 475 | |
|---|
| 476 | /** |
|---|
| 477 | * Resumes scanning until the next regular expression is matched, |
|---|
| 478 | * the end of input is encountered or an I/O-Error occurs. |
|---|
| 479 | * |
|---|
| 480 | * @return the next token |
|---|
| 481 | * @exception java.io.IOException if any I/O-Error occurs |
|---|
| 482 | */ |
|---|
| 483 | public java_cup.runtime.Symbol next_token() throws java.io.IOException { |
|---|
| 484 | int zzInput; |
|---|
| 485 | int zzAction; |
|---|
| 486 | |
|---|
| 487 | // cached fields: |
|---|
| 488 | int zzCurrentPosL; |
|---|
| 489 | int zzMarkedPosL; |
|---|
| 490 | int zzEndReadL = zzEndRead; |
|---|
| 491 | char [] zzBufferL = zzBuffer; |
|---|
| 492 | char [] zzCMapL = ZZ_CMAP; |
|---|
| 493 | |
|---|
| 494 | int [] zzTransL = ZZ_TRANS; |
|---|
| 495 | int [] zzRowMapL = ZZ_ROWMAP; |
|---|
| 496 | int [] zzAttrL = ZZ_ATTRIBUTE; |
|---|
| 497 | |
|---|
| 498 | while (true) { |
|---|
| 499 | zzMarkedPosL = zzMarkedPos; |
|---|
| 500 | |
|---|
| 501 | zzAction = -1; |
|---|
| 502 | |
|---|
| 503 | zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; |
|---|
| 504 | |
|---|
| 505 | zzState = ZZ_LEXSTATE[zzLexicalState]; |
|---|
| 506 | |
|---|
| 507 | |
|---|
| 508 | zzForAction: { |
|---|
| 509 | while (true) { |
|---|
| 510 | |
|---|
| 511 | if (zzCurrentPosL < zzEndReadL) |
|---|
| 512 | zzInput = zzBufferL[zzCurrentPosL++]; |
|---|
| 513 | else if (zzAtEOF) { |
|---|
| 514 | zzInput = YYEOF; |
|---|
| 515 | break zzForAction; |
|---|
| 516 | } |
|---|
| 517 | else { |
|---|
| 518 | // store back cached positions |
|---|
| 519 | zzCurrentPos = zzCurrentPosL; |
|---|
| 520 | zzMarkedPos = zzMarkedPosL; |
|---|
| 521 | boolean eof = zzRefill(); |
|---|
| 522 | // get translated positions and possibly new buffer |
|---|
| 523 | zzCurrentPosL = zzCurrentPos; |
|---|
| 524 | zzMarkedPosL = zzMarkedPos; |
|---|
| 525 | zzBufferL = zzBuffer; |
|---|
| 526 | zzEndReadL = zzEndRead; |
|---|
| 527 | if (eof) { |
|---|
| 528 | zzInput = YYEOF; |
|---|
| 529 | break zzForAction; |
|---|
| 530 | } |
|---|
| 531 | else { |
|---|
| 532 | zzInput = zzBufferL[zzCurrentPosL++]; |
|---|
| 533 | } |
|---|
| 534 | } |
|---|
| 535 | int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; |
|---|
| 536 | if (zzNext == -1) break zzForAction; |
|---|
| 537 | zzState = zzNext; |
|---|
| 538 | |
|---|
| 539 | int zzAttributes = zzAttrL[zzState]; |
|---|
| 540 | if ( (zzAttributes & 1) == 1 ) { |
|---|
| 541 | zzAction = zzState; |
|---|
| 542 | zzMarkedPosL = zzCurrentPosL; |
|---|
| 543 | if ( (zzAttributes & 8) == 8 ) break zzForAction; |
|---|
| 544 | } |
|---|
| 545 | |
|---|
| 546 | } |
|---|
| 547 | } |
|---|
| 548 | |
|---|
| 549 | // store back cached position |
|---|
| 550 | zzMarkedPos = zzMarkedPosL; |
|---|
| 551 | |
|---|
| 552 | switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { |
|---|
| 553 | case 20: |
|---|
| 554 | { m_String.append('\b'); |
|---|
| 555 | } |
|---|
| 556 | case 23: break; |
|---|
| 557 | case 7: |
|---|
| 558 | { return m_SF.newSymbol("Colon", sym.COLON); |
|---|
| 559 | } |
|---|
| 560 | case 24: break; |
|---|
| 561 | case 13: |
|---|
| 562 | { m_String.append('\\'); |
|---|
| 563 | } |
|---|
| 564 | case 25: break; |
|---|
| 565 | case 22: |
|---|
| 566 | { return m_SF.newSymbol("Boolean", sym.BOOLEAN, new Boolean(yytext())); |
|---|
| 567 | } |
|---|
| 568 | case 26: break; |
|---|
| 569 | case 14: |
|---|
| 570 | { return m_SF.newSymbol("Double", sym.DOUBLE, new Double(yytext())); |
|---|
| 571 | } |
|---|
| 572 | case 27: break; |
|---|
| 573 | case 17: |
|---|
| 574 | { m_String.append('\r'); |
|---|
| 575 | } |
|---|
| 576 | case 28: break; |
|---|
| 577 | case 3: |
|---|
| 578 | { return m_SF.newSymbol("Right curly bracket", sym.RCURLY); |
|---|
| 579 | } |
|---|
| 580 | case 29: break; |
|---|
| 581 | case 19: |
|---|
| 582 | { m_String.append('\"'); |
|---|
| 583 | } |
|---|
| 584 | case 30: break; |
|---|
| 585 | case 1: |
|---|
| 586 | { System.err.println("Illegal character: " + yytext()); |
|---|
| 587 | } |
|---|
| 588 | case 31: break; |
|---|
| 589 | case 18: |
|---|
| 590 | { m_String.append('\f'); |
|---|
| 591 | } |
|---|
| 592 | case 32: break; |
|---|
| 593 | case 21: |
|---|
| 594 | { return m_SF.newSymbol("Null", sym.NULL); |
|---|
| 595 | } |
|---|
| 596 | case 33: break; |
|---|
| 597 | case 16: |
|---|
| 598 | { m_String.append('\t'); |
|---|
| 599 | } |
|---|
| 600 | case 34: break; |
|---|
| 601 | case 4: |
|---|
| 602 | { return m_SF.newSymbol("Left square bracket", sym.LSQUARE); |
|---|
| 603 | } |
|---|
| 604 | case 35: break; |
|---|
| 605 | case 12: |
|---|
| 606 | { yybegin(YYINITIAL); return m_SF.newSymbol("String", sym.STRING, m_String.toString()); |
|---|
| 607 | } |
|---|
| 608 | case 36: break; |
|---|
| 609 | case 15: |
|---|
| 610 | { m_String.append('\n'); |
|---|
| 611 | } |
|---|
| 612 | case 37: break; |
|---|
| 613 | case 2: |
|---|
| 614 | { return m_SF.newSymbol("Left curly bracket", sym.LCURLY); |
|---|
| 615 | } |
|---|
| 616 | case 38: break; |
|---|
| 617 | case 6: |
|---|
| 618 | { return m_SF.newSymbol("Comma", sym.COMMA); |
|---|
| 619 | } |
|---|
| 620 | case 39: break; |
|---|
| 621 | case 8: |
|---|
| 622 | { return m_SF.newSymbol("Integer", sym.INTEGER, new Integer(yytext())); |
|---|
| 623 | } |
|---|
| 624 | case 40: break; |
|---|
| 625 | case 9: |
|---|
| 626 | { m_String.setLength(0); yybegin(STRING); |
|---|
| 627 | } |
|---|
| 628 | case 41: break; |
|---|
| 629 | case 11: |
|---|
| 630 | { m_String.append(yytext()); |
|---|
| 631 | } |
|---|
| 632 | case 42: break; |
|---|
| 633 | case 10: |
|---|
| 634 | { /* ignore white space. */ |
|---|
| 635 | } |
|---|
| 636 | case 43: break; |
|---|
| 637 | case 5: |
|---|
| 638 | { return m_SF.newSymbol("Right square bracket", sym.RSQUARE); |
|---|
| 639 | } |
|---|
| 640 | case 44: break; |
|---|
| 641 | default: |
|---|
| 642 | if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { |
|---|
| 643 | zzAtEOF = true; |
|---|
| 644 | { return m_SF.newSymbol("EOF", sym.EOF); |
|---|
| 645 | } |
|---|
| 646 | } |
|---|
| 647 | else { |
|---|
| 648 | zzScanError(ZZ_NO_MATCH); |
|---|
| 649 | } |
|---|
| 650 | } |
|---|
| 651 | } |
|---|
| 652 | } |
|---|
| 653 | |
|---|
| 654 | |
|---|
| 655 | } |
|---|