/* The following code was generated by JFlex 1.4.2 */ package org.json.simple.parser; class Yylex { /** This character denotes the end of file */ public static final int YYEOF = -1; /** initial size of the lookahead buffer */ private static final int ZZ_BUFFERSIZE = 16384; /** lexical states */ public static final int YYINITIAL = 0; public static final int STRING_BEGIN = 2; /** * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the * beginning of a line l is of the form l = 2*k, k a non negative integer */ private static final int ZZ_LEXSTATE[] = { 0, 0, 1, 1 }; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\11\0\1\7\1\7\2\0\1\7\22\0\1\7\1\0\1\11\10\0" + "\1\6\1\31\1\2\1\4\1\12\12\3\1\32\6\0\4\1\1\5" + "\1\1\24\0\1\27\1\10\1\30\3\0\1\22\1\13\2\1\1\21" + "\1\14\5\0\1\23\1\0\1\15\3\0\1\16\1\24\1\17\1\20" + "\5\0\1\25\1\0\1\26\uff82\0"; /** * Translates characters to character classes */ private static final char[] ZZ_CMAP = Yylex.zzUnpackCMap(Yylex.ZZ_CMAP_PACKED); /** * Translates DFA states to action switch labels. */ private static final int[] ZZ_ACTION = Yylex.zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = "\2\0\2\1\1\2\1\3\1\4\3\1\1\5\1\6" + "\1\7\1\10\1\11\1\12\1\13\1\14\1\15\5\0" + "\1\14\1\16\1\17\1\20\1\21\1\22\1\23\1\24" + "\1\0\1\25\1\0\1\25\4\0\1\26\1\27\2\0" + "\1\30"; private static int[] zzUnpackAction() { final int[] result = new int[45]; int offset = 0; offset = Yylex.zzUnpackAction(Yylex.ZZ_ACTION_PACKED_0, offset, result); return result; } private static int zzUnpackAction(final String packed, final int offset, final int[] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ final int l = packed.length(); while (i < l) { int count = packed.charAt(i++); final int value = packed.charAt(i++); do { result[j++] = value; } while (--count > 0); } return j; } /** * Translates a state to a row index in the transition table */ private static final int[] ZZ_ROWMAP = Yylex.zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\33\0\66\0\121\0\154\0\207\0\66\0\242" + "\0\275\0\330\0\66\0\66\0\66\0\66\0\66\0\66" + "\0\363\0\u010e\0\66\0\u0129\0\u0144\0\u015f\0\u017a\0\u0195" + "\0\66\0\66\0\66\0\66\0\66\0\66\0\66\0\66" + "\0\u01b0\0\u01cb\0\u01e6\0\u01e6\0\u0201\0\u021c\0\u0237\0\u0252" + "\0\66\0\66\0\u026d\0\u0288\0\66"; private static int[] zzUnpackRowMap() { final int[] result = new int[45]; int offset = 0; offset = Yylex.zzUnpackRowMap(Yylex.ZZ_ROWMAP_PACKED_0, offset, result); return result; } private static int zzUnpackRowMap(final String packed, final int offset, final int[] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ final int l = packed.length(); while (i < l) { final int high = packed.charAt(i++) << 16; result[j++] = high | packed.charAt(i++); } return j; } /** * The transition table of the DFA */ private static final int ZZ_TRANS[] = { 2, 2, 3, 4, 2, 2, 2, 5, 2, 6, 2, 2, 7, 8, 2, 9, 2, 2, 2, 2, 2, 10, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 18, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 19, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16, 16, 16, 16, 16, 16, 16, 16, -1, -1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, -1, -1, -1, -1, -1, -1, -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 34, 35, -1, -1, 34, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 39, -1, 39, -1, 39, -1, -1, -1, -1, -1, 39, 39, -1, -1, -1, -1, 39, 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, -1, 42, -1, 42, -1, -1, -1, -1, -1, 42, 42, -1, -1, -1, -1, 42, 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, -1, 43, -1, 43, -1, -1, -1, -1, -1, 43, 43, -1, -1, -1, -1, 43, 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, -1, 44, -1, 44, -1, -1, -1, -1, -1, 44, 44, -1, -1, -1, -1, 44, 44, -1, -1, -1, -1, -1, -1, -1, -1, }; /* error codes */ private static final int ZZ_UNKNOWN_ERROR = 0; private static final int ZZ_NO_MATCH = 1; private static final int ZZ_PUSHBACK_2BIG = 2; /* error messages for the codes above */ private static final String ZZ_ERROR_MSG[] = { "Unkown internal scanner error", "Error: could not match input", "Error: pushback value was too large" }; /** * ZZ_ATTRIBUTE[aState] contains the attributes of state aState */ private static final int[] ZZ_ATTRIBUTE = Yylex.zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\2\0\1\11\3\1\1\11\3\1\6\11\2\1\1\11" + "\5\0\10\11\1\0\1\1\1\0\1\1\4\0\2\11" + "\2\0\1\11"; private static int[] zzUnpackAttribute() { final int[] result = new int[45]; int offset = 0; offset = Yylex.zzUnpackAttribute(Yylex.ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; } private static int zzUnpackAttribute(final String packed, final int offset, final int[] result) { int i = 0; /* index in packed string */ int j = offset; /* index in unpacked array */ final int l = packed.length(); while (i < l) { int count = packed.charAt(i++); final int value = packed.charAt(i++); do { result[j++] = value; } while (--count > 0); } return j; } /** the input device */ private rejava.io.Reader zzReader; /** the current state of the DFA */ private int zzState; /** the current lexical state */ private int zzLexicalState = Yylex.YYINITIAL; /** * this buffer contains the current text to be matched and is the source of * the yytext() string */ private char zzBuffer[] = new char[Yylex.ZZ_BUFFERSIZE]; /** the textposition at the last accepting state */ private int zzMarkedPos; /** the current text position in the buffer */ private int zzCurrentPos; /** startRead marks the beginning of the yytext() string in the buffer */ private int zzStartRead; /** * endRead marks the last character in the buffer, that has been read from * input */ private int zzEndRead; /** number of newlines encountered up to the start of the matched text */ // private int yyline; /** the number of characters up to the start of the matched text */ private int yychar; /** * the number of characters from the last newline up to the start of the * matched text */ // private int yycolumn; /** * zzAtBOL == true <=> the scanner is currently at the beginning of a line */ // private boolean zzAtBOL = true; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /* user code: */ private StringBuffer sb = new StringBuffer(); int getPosition() { return this.yychar; } /** * Creates a new scanner There is also a java.io.InputStream version of this * constructor. * * @param in * the java.io.Reader to read input from. */ Yylex(final rejava.io.Reader in) { this.zzReader = in; } /** * Creates a new scanner. There is also java.io.Reader version of this * constructor. * * @param in * the java.io.Inputstream to read input from. */ // Yylex(java.io.InputStream in) { // this(new java.io.InputStreamReader(in)); // } /** * Unpacks the compressed character translation table. * * @param packed * the packed character translation table * @return the unpacked character translation table */ private static char[] zzUnpackCMap(final String packed) { final char[] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ while (i < 90) { int count = packed.charAt(i++); final char value = packed.charAt(i++); do { map[j++] = value; } while (--count > 0); } return map; } /** * Refills the input buffer. * * @return false, iff there was new input. * * @exception java.io.IOException * if any I/O-Error occurs */ private boolean zzRefill() throws java.io.IOException { /* first: make room (if you can) */ if (this.zzStartRead > 0) { System.arraycopy(this.zzBuffer, this.zzStartRead, this.zzBuffer, 0, this.zzEndRead - this.zzStartRead); /* translate stored positions */ this.zzEndRead -= this.zzStartRead; this.zzCurrentPos -= this.zzStartRead; this.zzMarkedPos -= this.zzStartRead; this.zzStartRead = 0; } /* is the buffer big enough? */ if (this.zzCurrentPos >= this.zzBuffer.length) { /* if not: blow it up */ final char newBuffer[] = new char[this.zzCurrentPos * 2]; System.arraycopy(this.zzBuffer, 0, newBuffer, 0, this.zzBuffer.length); this.zzBuffer = newBuffer; } /* finally: fill the buffer with new input */ final int numRead = this.zzReader.read(this.zzBuffer, this.zzEndRead, this.zzBuffer.length - this.zzEndRead); if (numRead > 0) { this.zzEndRead += numRead; return false; } // unlikely but not impossible: read 0 characters, but not at end of // stream if (numRead == 0) { final int c = this.zzReader.read(); if (c == -1) { return true; } else { this.zzBuffer[this.zzEndRead++] = (char) c; return false; } } // numRead < 0 return true; } /** * Closes the input stream. */ public final void yyclose() throws java.io.IOException { this.zzAtEOF = true; /* indicate end of file */ this.zzEndRead = this.zzStartRead; /* invalidate buffer */ if (this.zzReader != null) { this.zzReader.close(); } } /** * Resets the scanner to read from a new input stream. Does not close the * old reader. * * All internal variables are reset, the old input stream cannot be * reused (internal buffer is discarded and lost). Lexical state is set to * ZZ_INITIAL. * * @param reader * the new input stream */ public final void yyreset(final rejava.io.Reader reader) { this.zzReader = reader; // this.zzAtBOL = true; this.zzAtEOF = false; this.zzEndRead = this.zzStartRead = 0; this.zzCurrentPos = this.zzMarkedPos = 0; // this.yyline = this.yychar = this.yycolumn = 0; this.zzLexicalState = Yylex.YYINITIAL; } /** * Returns the current lexical state. */ public final int yystate() { return this.zzLexicalState; } /** * Enters a new lexical state * * @param newState * the new lexical state */ public final void yybegin(final int newState) { this.zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String(this.zzBuffer, this.zzStartRead, this.zzMarkedPos - this.zzStartRead); } /** * Returns the character at position pos from the matched text. * * It is equivalent to yytext().charAt(pos), but faster * * @param pos * the position of the character to fetch. A value from 0 to * yylength()-1. * * @return the character at position pos */ public final char yycharat(final int pos) { return this.zzBuffer[this.zzStartRead + pos]; } /** * Returns the length of the matched text region. */ public final int yylength() { return this.zzMarkedPos - this.zzStartRead; } /** * Reports an error that occured while scanning. * * In a wellformed scanner (no or only correct usage of yypushback(int) and * a match-all fallback rule) this method will only be called with things * that "Can't Possibly Happen". If this method is called, something is * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.). * * Usual syntax/scanner level error handling should be done in error * fallback rules. * * @param errorCode * the code of the errormessage to display */ private void zzScanError(final int errorCode) { String message; try { message = Yylex.ZZ_ERROR_MSG[errorCode]; } catch (final ArrayIndexOutOfBoundsException e) { message = Yylex.ZZ_ERROR_MSG[Yylex.ZZ_UNKNOWN_ERROR]; } throw new Error(message); } /** * Pushes the specified amount of characters back into the input stream. * * They will be read again by then next call of the scanning method * * @param number * the number of characters to be read again. This number must * not be greater than yylength()! */ public void yypushback(final int number) { if (number > this.yylength()) { this.zzScanError(Yylex.ZZ_PUSHBACK_2BIG); } this.zzMarkedPos -= number; } /** * Resumes scanning until the next regular expression is matched, the end of * input is encountered or an I/O-Error occurs. * * @return the next token * @exception java.io.IOException * if any I/O-Error occurs */ public Yytoken yylex() throws java.io.IOException, ParseException { int zzInput; int zzAction; // cached fields: int zzCurrentPosL; int zzMarkedPosL; int zzEndReadL = this.zzEndRead; char[] zzBufferL = this.zzBuffer; final char[] zzCMapL = Yylex.ZZ_CMAP; final int[] zzTransL = Yylex.ZZ_TRANS; final int[] zzRowMapL = Yylex.ZZ_ROWMAP; final int[] zzAttrL = Yylex.ZZ_ATTRIBUTE; while (true) { zzMarkedPosL = this.zzMarkedPos; this.yychar += zzMarkedPosL - this.zzStartRead; zzAction = -1; zzCurrentPosL = this.zzCurrentPos = this.zzStartRead = zzMarkedPosL; this.zzState = Yylex.ZZ_LEXSTATE[this.zzLexicalState]; zzForAction: { while (true) { if (zzCurrentPosL < zzEndReadL) { zzInput = zzBufferL[zzCurrentPosL++]; } else if (this.zzAtEOF) { zzInput = Yylex.YYEOF; break zzForAction; } else { // store back cached positions this.zzCurrentPos = zzCurrentPosL; this.zzMarkedPos = zzMarkedPosL; final boolean eof = this.zzRefill(); // get translated positions and possibly new buffer zzCurrentPosL = this.zzCurrentPos; zzMarkedPosL = this.zzMarkedPos; zzBufferL = this.zzBuffer; zzEndReadL = this.zzEndRead; if (eof) { zzInput = Yylex.YYEOF; break zzForAction; } else { zzInput = zzBufferL[zzCurrentPosL++]; } } final int zzNext = zzTransL[zzRowMapL[this.zzState] + zzCMapL[zzInput]]; if (zzNext == -1) { break zzForAction; } this.zzState = zzNext; final int zzAttributes = zzAttrL[this.zzState]; if ((zzAttributes & 1) == 1) { zzAction = this.zzState; zzMarkedPosL = zzCurrentPosL; if ((zzAttributes & 8) == 8) { break zzForAction; } } } } // store back cached position this.zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : Yylex.ZZ_ACTION[zzAction]) { case 11: { this.sb.append(this.yytext()); } case 25: break; case 4: { this.sb = null; this.sb = new StringBuffer(); this.yybegin(Yylex.STRING_BEGIN); } case 26: break; case 16: { this.sb.append('\b'); } case 27: break; case 6: { return new Yytoken(Yytoken.TYPE_RIGHT_BRACE, null); } case 28: break; case 23: { final Boolean val = Boolean.valueOf(this.yytext()); return new Yytoken(Yytoken.TYPE_VALUE, val); } case 29: break; case 22: { return new Yytoken(Yytoken.TYPE_VALUE, null); } case 30: break; case 13: { this.yybegin(Yylex.YYINITIAL); return new Yytoken(Yytoken.TYPE_VALUE, this.sb.toString()); } case 31: break; case 12: { this.sb.append('\\'); } case 32: break; case 21: { final Double val = Double.valueOf(this.yytext()); return new Yytoken(Yytoken.TYPE_VALUE, val); } case 33: break; case 1: { throw new ParseException(this.yychar, ParseException.ERROR_UNEXPECTED_CHAR, new Character(this.yycharat(0))); } case 34: break; case 8: { return new Yytoken(Yytoken.TYPE_RIGHT_SQUARE, null); } case 35: break; case 19: { this.sb.append('\r'); } case 36: break; case 15: { this.sb.append('/'); } case 37: break; case 10: { return new Yytoken(Yytoken.TYPE_COLON, null); } case 38: break; case 14: { this.sb.append('"'); } case 39: break; case 5: { return new Yytoken(Yytoken.TYPE_LEFT_BRACE, null); } case 40: break; case 17: { this.sb.append('\f'); } case 41: break; case 24: { try { final int ch = Integer.parseInt(this.yytext().substring(2), 16); this.sb.append((char) ch); } catch (final Exception e) { throw new ParseException(this.yychar, ParseException.ERROR_UNEXPECTED_EXCEPTION, e); } } case 42: break; case 20: { this.sb.append('\t'); } case 43: break; case 7: { return new Yytoken(Yytoken.TYPE_LEFT_SQUARE, null); } case 44: break; case 2: { final Long val = Long.valueOf(this.yytext()); return new Yytoken(Yytoken.TYPE_VALUE, val); } case 45: break; case 18: { this.sb.append('\n'); } case 46: break; case 9: { return new Yytoken(Yytoken.TYPE_COMMA, null); } case 47: break; case 3: { } case 48: break; default: if ((zzInput == Yylex.YYEOF) && (this.zzStartRead == this.zzCurrentPos)) { this.zzAtEOF = true; return null; } else { this.zzScanError(Yylex.ZZ_NO_MATCH); } } } } }