public class ParserTokenManager { protected static final String add_escapes(String str) { String retval = ""; char ch; for (int i = 0; i < str.length(); i++) { ch = str.charAt(i); if (ch == '\b') { retval += "\\b"; } else if (ch == '\t') { retval += "\\t"; } else if (ch == '\n') { retval += "\\n"; } else if (ch == '\f') { retval += "\\f"; } else if (ch == '\r') { retval += "\\r"; } else if (ch == '\"') { retval += "\\\""; } else if (ch == '\'') { retval += "\\\'"; } else if (ch == '\\') { retval += "\\\\"; } else { retval += ch; } } return retval; } private static final String strLiteralImages[] = new String[20]; static { { char temp[] = { 40, }; strLiteralImages[1] = new String(temp); } { char temp[] = { 41, }; strLiteralImages[2] = new String(temp); } { char temp[] = { 32, }; strLiteralImages[3] = new String(temp); } { char temp[] = { 9, }; strLiteralImages[4] = new String(temp); } { char temp[] = { 10, }; strLiteralImages[5] = new String(temp); } { char temp[] = { 13, }; strLiteralImages[6] = new String(temp); } } private static final int[] nextStates0 = { 1, 2, }; private static final int[] nextStates1 = { 7, 8, }; private static final int[] nextStates2 = { 6, 7, }; private static final int[] nextStates3 = { 4, 5, 8, }; private static final char[] rangeMoves0 = {128, 255, }; private static final int[] nextStates4 = { 15, 11, }; private static final int[] nextStates5 = { 13, 14, 16, }; private static final int[] nextStates6 = { 10, 12, }; private static final int[] nextStates7 = { 19, 20, 22, }; private static final int[] nextStates8 = { 19, 20, 24, 22, }; private static final int[] nextStates9 = { 21, 23, 25, }; private static final int[] nextStates10 = { 31, 29, }; private static final int[] nextStates11 = { 30, 32, }; private static final int[] nextStates12 = { 28, 29, }; private static final char[] rangeMoves1 = {192, 214, 216, 246, 248, 255, 256, 8191, 12352, 12687, 13056, 13183, 13312, 15661, 19968, 40959, 63744, 64255, }; private static final char[] rangeMoves2 = {192, 214, 216, 246, 248, 255, 256, 8191, 1632, 1641, 1776, 1785, 2406, 2415, 2534, 2543, 2662, 2671, 2790, 2799, 2918, 2927, 3047, 3055, 3174, 3183, 3302, 3311, 3430, 3439, 3664, 3673, 3792, 3801, 4160, 4169, 12352, 12687, 13056, 13183, 13312, 15661, 19968, 40959, 63744, 64255, }; private static final int[] nextStates13 = { 42, 8, }; private static final int[] nextStates14 = { 41, 42, }; private static final int[] nextStates15 = { 39, 40, 8, }; private static final int[] nextStates16 = { 37, 38, }; private static final int[] nextStates17 = { 46, 8, }; private static final int[] nextStates18 = { 45, 46, }; private static final int[] nextStates19 = { 43, 44, }; private static final int[] nextStates20 = { 50, 8, }; private static final int[] nextStates21 = { 49, 50, }; private static final int[] nextStates22 = { 47, 48, 8, }; private static final int[] nextStates23 = { 37, 38, 43, 44, 47, 48, 8, }; private static final int[] nextStates24 = { 53, 54, 55, }; private static final int[] nextStates25 = { 60, 58, }; private static final int[] nextStates26 = { 59, 61, }; private static final int[] nextStates27 = { 57, 58, }; private static final int[] nextStates28 = { 52, 56, }; private static final int[] nextStates29 = { 64, 65, }; private static final int[] nextStates30 = { 66, 67, }; private static final int[] nextStates31 = { 63, 66, 67, }; private final boolean CharInCharList(char[] charList) { for (int i = 0; i < charList.length; i++) if (curChar == charList[i]) return true; else if (curChar < charList[i]) return false; return false; } private final boolean CharInRangeList(char[] rangeList) { for (int i = 0; i < rangeList.length; i += 2) if (curChar >= rangeList[i] && curChar <= rangeList[i + 1]) return true; else if (curChar < rangeList[i]) return false; return false; } private final void MoveNfa(int[] oldStates, int[] newStates) { int i = newStateCnt, j, k; newStateCnt = 0; round++; MainLoop : for (;;) { if (curChar < 64) { long l = 1L << curChar; do { switch(oldStates[--i]) { case (52) : if ((0x800000000000L & l) != 0L) { nextStates = nextStates24; break; } else continue; case (53) : if ((0xffffffffffffdbffL & l) != 0L) { nextStates = nextStates24; break; } else continue; case (54) : if ((0x400L & l) != 0L) { if (curKind > 7) curKind = 7; continue; } else continue; case (55) : if ((0x2000L & l) != 0L) { if (rounds[54] != round) { rounds[54] = round; newStates[newStateCnt++] = 54; } continue; } else continue; case (56) : if ((0x40000000000L & l) != 0L) { nextStates = nextStates27; break; } else continue; case (57) : if ((0xfffffbffffffffffL & l) != 0L) { nextStates = nextStates27; break; } else continue; case (58) : if ((0x40000000000L & l) != 0L) { nextStates = nextStates26; break; } else continue; case (59) : if ((0xffff7fffffffffffL & l) != 0L) { nextStates = nextStates25; break; } else continue; case (60) : if ((0xfffffbffffffffffL & l) != 0L) { nextStates = nextStates25; break; } else continue; case (61) : if ((0x800000000000L & l) != 0L) { if (curKind > 8) curKind = 8; continue; } else continue; case (0) : if ((0x3fe000000000000L & l) != 0L) { if (curKind > 9) curKind = 9; nextStates = nextStates0; break; } else continue; case (1) : if ((0x3ff000000000000L & l) != 0L) { if (curKind > 9) curKind = 9; nextStates = nextStates0; break; } else continue; case (64) : if ((0x3ff000000000000L & l) != 0L) { if (curKind > 10) curKind = 10; nextStates = nextStates29; break; } else continue; case (66) : if ((0xff000000000000L & l) != 0L) { if (curKind > 11) curKind = 11; nextStates = nextStates30; break; } else continue; case (37) : if ((0x3ff000000000000L & l) != 0L) { nextStates = nextStates16; break; } else continue; case (38) : if ((0x400000000000L & l) != 0L) { if (rounds[39] != round) { rounds[39] = round; newStates[newStateCnt++] = 39; } continue; } else continue; case (39) : if ((0x3ff000000000000L & l) != 0L) { if (curKind > 12) curKind = 12; nextStates = nextStates15; break; } else continue; case (41) : if ((0x280000000000L & l) != 0L) { if (rounds[42] != round) { rounds[42] = round; newStates[newStateCnt++] = 42; } continue; } else continue; case (42) : if ((0x3ff000000000000L & l) != 0L) { if (curKind > 12) curKind = 12; nextStates = nextStates13; break; } else continue; case (3) : if ((0x400000000000L & l) != 0L) { if (rounds[4] != round) { rounds[4] = round; newStates[newStateCnt++] = 4; } continue; } else continue; case (4) : if ((0x3ff000000000000L & l) != 0L) { if (curKind > 12) curKind = 12; nextStates = nextStates3; break; } else continue; case (6) : if ((0x280000000000L & l) != 0L) { if (rounds[7] != round) { rounds[7] = round; newStates[newStateCnt++] = 7; } continue; } else continue; case (7) : if ((0x3ff000000000000L & l) != 0L) { if (curKind > 12) curKind = 12; nextStates = nextStates1; break; } else continue; case (43) : if ((0x3ff000000000000L & l) != 0L) { nextStates = nextStates19; break; } else continue; case (45) : if ((0x280000000000L & l) != 0L) { if (rounds[46] != round) { rounds[46] = round; newStates[newStateCnt++] = 46; } continue; } else continue; case (46) : if ((0x3ff000000000000L & l) != 0L) { if (curKind > 12) curKind = 12; nextStates = nextStates17; break; } else continue; case (47) : if ((0x3ff000000000000L & l) != 0L) { nextStates = nextStates22; break; } else continue; case (49) : if ((0x280000000000L & l) != 0L) { if (rounds[50] != round) { rounds[50] = round; newStates[newStateCnt++] = 50; } continue; } else continue; case (50) : if ((0x3ff000000000000L & l) != 0L) { nextStates = nextStates20; break; } else continue; case (9) : if ((0x8000000000L & l) != 0L) { nextStates = nextStates6; break; } else continue; case (10) : if ((0xffffff7fffffdbffL & l) != 0L) { if (rounds[11] != round) { rounds[11] = round; newStates[newStateCnt++] = 11; } continue; } else continue; case (13) : if ((0x8400000000L & l) != 0L) { if (rounds[11] != round) { rounds[11] = round; newStates[newStateCnt++] = 11; } continue; } else continue; case (14) : if ((0xff000000000000L & l) != 0L) { nextStates = nextStates4; break; } else continue; case (15) : if ((0xff000000000000L & l) != 0L) { if (rounds[11] != round) { rounds[11] = round; newStates[newStateCnt++] = 11; } continue; } else continue; case (16) : if ((0xf000000000000L & l) != 0L) { if (rounds[17] != round) { rounds[17] = round; newStates[newStateCnt++] = 17; } continue; } else continue; case (17) : if ((0xff000000000000L & l) != 0L) { if (rounds[15] != round) { rounds[15] = round; newStates[newStateCnt++] = 15; } continue; } else continue; case (11) : if ((0x8000000000L & l) != 0L) { if (curKind > 14) curKind = 14; continue; } else continue; case (18) : if ((0x400000000L & l) != 0L) { nextStates = nextStates7; break; } else continue; case (19) : if ((0xfffffffbffffdbffL & l) != 0L) { nextStates = nextStates7; break; } else continue; case (21) : if ((0x8400000000L & l) != 0L) { nextStates = nextStates7; break; } else continue; case (23) : if ((0xff000000000000L & l) != 0L) { nextStates = nextStates8; break; } else continue; case (24) : if ((0xff000000000000L & l) != 0L) { nextStates = nextStates7; break; } else continue; case (25) : if ((0xf000000000000L & l) != 0L) { if (rounds[26] != round) { rounds[26] = round; newStates[newStateCnt++] = 26; } continue; } else continue; case (26) : if ((0xff000000000000L & l) != 0L) { if (rounds[24] != round) { rounds[24] = round; newStates[newStateCnt++] = 24; } continue; } else continue; case (22) : if ((0x400000000L & l) != 0L) { if (curKind > 15) curKind = 15; continue; } else continue; case (33) : if ((0x10000000000L & l) != 0L) { if (rounds[27] != round) { rounds[27] = round; newStates[newStateCnt++] = 27; } continue; } else continue; case (28) : if ((0xffffffffffffffffL & l) != 0L) { nextStates = nextStates12; break; } else continue; case (30) : if ((0xfffffdffffffffffL & l) != 0L) { nextStates = nextStates10; break; } else continue; case (31) : if ((0xffffffffffffffffL & l) != 0L) { nextStates = nextStates10; break; } else continue; case (32) : if ((0x20000000000L & l) != 0L) { if (curKind > 16) curKind = 16; continue; } else continue; case (34) : if ((0x1000000000L & l) != 0L) { if (curKind > 17) curKind = 17; if (rounds[35] != round) { rounds[35] = round; newStates[newStateCnt++] = 35; } continue; } else continue; case (35) : if ((0x3ff001000000000L & l) != 0L) { if (curKind > 17) curKind = 17; if (rounds[35] != round) { rounds[35] = round; newStates[newStateCnt++] = 35; } continue; } else continue; case (36) : if ((0x3ff000000000000L & l) != 0L) { nextStates = nextStates23; break; } else continue; case (51) : if ((0x800000000000L & l) != 0L) { nextStates = nextStates28; break; } else continue; case (62) : if ((0x1000000000000L & l) != 0L) { if (curKind > 11) curKind = 11; nextStates = nextStates31; break; } else continue; default : continue; } j = nextStates.length; do { if (rounds[k = nextStates[--j]] != round) { rounds[k] = round; newStates[newStateCnt++] = k; } } while (j != 0); } while(i != 0); } else if (curChar < 128) { long l = 1L << (curChar & 077); do { switch(oldStates[--i]) { case (53) : if ((0xffffffffffffffffL & l) != 0L) { nextStates = nextStates24; break; } else continue; case (57) : if ((0xffffffffffffffffL & l) != 0L) { nextStates = nextStates27; break; } else continue; case (59) : if ((0xffffffffffffffffL & l) != 0L) { nextStates = nextStates25; break; } else continue; case (60) : if ((0xffffffffffffffffL & l) != 0L) { nextStates = nextStates25; break; } else continue; case (2) : if ((0x100000001000L & l) != 0L) { if (curKind > 9) curKind = 9; continue; } else continue; case (63) : if ((0x100000001000000L & l) != 0L) { if (rounds[64] != round) { rounds[64] = round; newStates[newStateCnt++] = 64; } continue; } else continue; case (64) : if ((0x7e0000007eL & l) != 0L) { if (curKind > 10) curKind = 10; nextStates = nextStates29; break; } else continue; case (65) : if ((0x100000001000L & l) != 0L) { if (curKind > 10) curKind = 10; continue; } else continue; case (67) : if ((0x100000001000L & l) != 0L) { if (curKind > 11) curKind = 11; continue; } else continue; case (40) : if ((0x2000000020L & l) != 0L) { nextStates = nextStates14; break; } else continue; case (5) : if ((0x2000000020L & l) != 0L) { nextStates = nextStates2; break; } else continue; case (8) : if ((0x5000000050L & l) != 0L) { if (curKind > 12) curKind = 12; continue; } else continue; case (44) : if ((0x2000000020L & l) != 0L) { nextStates = nextStates18; break; } else continue; case (48) : if ((0x2000000020L & l) != 0L) { nextStates = nextStates21; break; } else continue; case (10) : if ((0xffffffffefffffffL & l) != 0L) { if (rounds[11] != round) { rounds[11] = round; newStates[newStateCnt++] = 11; } continue; } else continue; case (12) : if ((0x10000000L & l) != 0L) { nextStates = nextStates5; break; } else continue; case (13) : if ((0x14404410000000L & l) != 0L) { if (rounds[11] != round) { rounds[11] = round; newStates[newStateCnt++] = 11; } continue; } else continue; case (19) : if ((0xffffffffefffffffL & l) != 0L) { nextStates = nextStates7; break; } else continue; case (20) : if ((0x10000000L & l) != 0L) { nextStates = nextStates9; break; } else continue; case (21) : if ((0x14404410000000L & l) != 0L) { nextStates = nextStates7; break; } else continue; case (27) : if ((0x1L & l) != 0L) { nextStates = nextStates12; break; } else continue; case (28) : if ((0xfffffffffffffffeL & l) != 0L) { nextStates = nextStates12; break; } else continue; case (30) : if ((0xffffffffffffffffL & l) != 0L) { nextStates = nextStates10; break; } else continue; case (31) : if ((0xfffffffffffffffeL & l) != 0L) { nextStates = nextStates10; break; } else continue; case (34) : if ((0x7fffffe87fffffeL & l) != 0L) { if (curKind > 17) curKind = 17; if (rounds[35] != round) { rounds[35] = round; newStates[newStateCnt++] = 35; } continue; } else continue; case (35) : if ((0x7fffffe87fffffeL & l) != 0L) { if (curKind > 17) curKind = 17; if (rounds[35] != round) { rounds[35] = round; newStates[newStateCnt++] = 35; } continue; } else continue; case (29) : if ((0x1L & l) != 0L) { nextStates = nextStates11; break; } else continue; default : continue; } j = nextStates.length; do { if (rounds[k = nextStates[--j]] != round) { rounds[k] = round; newStates[newStateCnt++] = k; } } while (j != 0); } while(i != 0); } else { do { switch(oldStates[--i]) { case (53) : if (CharInRangeList(rangeMoves0)) { nextStates = nextStates24; break; } else continue; case (57) : if (CharInRangeList(rangeMoves0)) { nextStates = nextStates27; break; } else continue; case (59) : if (CharInRangeList(rangeMoves0)) { nextStates = nextStates25; break; } else continue; case (60) : if (CharInRangeList(rangeMoves0)) { nextStates = nextStates25; break; } else continue; case (10) : if (CharInRangeList(rangeMoves0)) { if (rounds[11] != round) { rounds[11] = round; newStates[newStateCnt++] = 11; } continue; } else continue; case (19) : if (CharInRangeList(rangeMoves0)) { nextStates = nextStates7; break; } else continue; case (28) : if (CharInRangeList(rangeMoves0)) { nextStates = nextStates12; break; } else continue; case (30) : if (CharInRangeList(rangeMoves0)) { nextStates = nextStates10; break; } else continue; case (31) : if (CharInRangeList(rangeMoves0)) { nextStates = nextStates10; break; } else continue; case (34) : if (CharInRangeList(rangeMoves1)) { if (curKind > 17) curKind = 17; if (rounds[35] != round) { rounds[35] = round; newStates[newStateCnt++] = 35; } continue; } else continue; case (35) : if (CharInRangeList(rangeMoves2)) { if (curKind > 17) curKind = 17; if (rounds[35] != round) { rounds[35] = round; newStates[newStateCnt++] = 35; } continue; } else continue; default : continue; } j = nextStates.length; do { if (rounds[k = nextStates[--j]] != round) { rounds[k] = round; newStates[newStateCnt++] = k; } } while (j != 0); } while(i != 0); } return; } } static private final int[] allInitStates = { 0, 3, 9, 18, 33, 34, 36, 51, 62, }; static final int[] initState_34 = { 18, }; static final int[] initState_36 = { 34, }; static final int[] initState_39 = { 9, }; static final int[] initState_40 = { 33, }; static final int[] initState_46 = { 3, }; static final int[] initState_47 = { 51, }; static final int[] initState_48 = { 36, 62, }; static final int[] initState_49 = { 0, 36, }; static final int[][] initStates = { allInitStates, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, initState_34, null, initState_36, null, null, initState_39, initState_40, null, null, null, null, null, initState_46, initState_47, initState_48, initState_49, initState_49, initState_49, initState_49, initState_49, initState_49, initState_49, initState_49, initState_49, null, null, null, null, null, null, null, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, null, null, null, null, initState_36, null, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, initState_36, null, null, null, null, null, }; static final int[] startStates_0 = { 27, }; void StartNfa(int pos, long active0) { switch (pos) { case (0) : curPos = 1; break; default : curPos = pos + 1; return; } newStateCnt = startStateSet.length; MoveNfa(startStateSet, stateSet2); if (curKind != 2147483647) { if (matchedPos != pos) { matchedToken.kind = curKind; matchedPos = pos; } else if (curKind < matchedToken.kind) matchedToken.kind = curKind; curKind = 2147483647; } return; } long oldActive0 = 0L, newActive0 = 0L; private final void MoveStringLiteralDfa() throws java.io.IOException { MainLoop: for (;;) { switch(curChar) { case (41) : { matchedToken.kind = 2; curPos = 1; return; } case (40) : { matchedToken.kind = 1; curPos = 1; startStateSet = startStates_0; break MainLoop; } case (32) : { matchedToken.kind = 3; curPos = 1; return; } case (13) : { matchedToken.kind = 6; curPos = 1; return; } case (10) : { matchedToken.kind = 5; curPos = 1; return; } case (9) : { matchedToken.kind = 4; curPos = 1; return; } default : { matchedToken.kind = 2147483647; if (curChar < 128) { if ((startStateSet = initStates[curChar]) == null) { curPos = 1; return; } } else if (curChar < 256) { if (startsNfa[curChar]) startStateSet = allInitStates; else { curPos = 1; return; } } else startStateSet = allInitStates; StartNfa(0, 0L); return; } } } curChar = input_stream.readChar(); newStateCnt = startStateSet.length; MoveNfa(startStateSet, stateSet2); if (curKind != 2147483647) { matchedToken.kind = curKind; matchedPos = curPos++; curKind = 2147483647; } else curPos++; } static final long[] toIgnoreInBNF = { 0x3de06L, }; static final long[] strKinds = { 0x7eL, }; static final boolean[] startsNfa = { true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, true, false, false, true, true, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, }; private ASCII_CharStream input_stream; private int[] rounds = new int[68]; private int[] stateSet1 = new int[68]; private int[] stateSet2 = new int[68]; private int[] nextStates; int curPos; protected char curChar; int curKind = 2147483647; ParserTokenManager me; public ParserTokenManager(ASCII_CharStream stream) { input_stream = stream; me = this; } public void ReInit(ASCII_CharStream stream) { int i; curKind = 2147483647; curPos = matchedPos = newStateCnt = round = 0; startStateSet = null; curChar = (char)0; input_stream = stream; for (i = 68; i-- > 0;) rounds[i] = 0; } int newStateCnt; int round; int[] tmpStates = stateSet1; int matchedPos; Token matchedToken; private int[] startStateSet; public final Token getNextToken() throws ParseError { matchedToken = new Token(); try { for (;;) { matchedPos = curPos = 0; curChar = input_stream.BeginToken(); matchedToken.beginLine = input_stream.getLine(); matchedToken.beginColumn = input_stream.getColumn(); MoveStringLiteralDfa(); while (newStateCnt != 0) { curChar = input_stream.readChar(); MoveNfa(stateSet1 = stateSet2, stateSet2 = tmpStates); tmpStates = stateSet1; if (curKind != 2147483647) { matchedToken.kind = curKind; curKind = 2147483647; matchedPos = curPos++; } else curPos++; }; if (matchedToken.kind != 2147483647) { if (matchedPos + 1 < curPos) input_stream.backup(curPos - matchedPos - 1); if ((toIgnoreInBNF[matchedToken.kind >> 6] & (1L << (matchedToken.kind & 077))) != 0) { if ((strKinds[matchedToken.kind >> 6] & (1L << (matchedToken.kind & 077))) != 0) matchedToken.image = strLiteralImages[matchedToken.kind]; else matchedToken.image = input_stream.GetImage(); matchedToken.endLine = input_stream.getLine(); matchedToken.endColumn = input_stream.getColumn(); return matchedToken; } matchedToken.kind = 2147483647; } else { me.error_line = input_stream.getLine(); me.error_column = input_stream.getColumn(); input_stream.backup(1); me.error_after = curPos <= 1 ? "" : add_escapes(input_stream.GetImage()); me.LexicalError(); throw new ParseError(); } } } catch (java.io.IOException e) { if (matchedToken.kind != 2147483647 && matchedToken.kind != 0) { if (matchedPos + 1 < curPos) input_stream.backup(curPos - matchedPos - 1); matchedToken.endLine = input_stream.getLine(); matchedToken.endColumn = input_stream.getColumn(); if ((toIgnoreInBNF[matchedToken.kind >> 6] & (1L << (matchedToken.kind & 077))) != 0) { if ((strKinds[matchedToken.kind >> 6] & (1L << (matchedToken.kind & 077))) != 0) matchedToken.image = strLiteralImages[matchedToken.kind]; else matchedToken.image = input_stream.GetImage(); return matchedToken; } else { matchedToken.kind = 2147483647; return getNextToken(); } } else if (curPos != 0) // Something has been scanned { me.error_line = input_stream.getLine(); me.error_column = input_stream.getColumn(); input_stream.backup(1); me.error_after = curPos <= 1 ? "" : add_escapes(input_stream.GetImage()); me.LexicalError(); throw new ParseError(); } else { matchedToken.kind = 0; matchedToken.image = ""; input_stream.Done(); return matchedToken; } } } protected int error_line, error_column; protected String error_after; protected void LexicalError() { System.err.println("Lexical error at line " + error_line + ", column " + error_column + ". Encountered: \"" + add_escapes(String.valueOf(curChar)) + "\""); } }