/** Get the next Token. */ public Token getNextToken() { Token specialToken = null; Token matchedToken; int lastReadPosition = 0; EOFLoop: for (; ;) { // First see if we have any input at all. try { curChar = input_stream.BeginToken(); } catch (System.Exception) { // No input. So return EOF token. jjmatchedKind = EOF; jjmatchedPos = -1; matchedToken = jjFillToken(); matchedToken.specialToken = specialToken; return(matchedToken); } // Set matched kind to a MAX VALUE to implement largest, first occuring rule // i.e., smallest kind value matched should be used. image = jjimage; image = string.Empty; jjimageLen = 0; for (; ;) { jjmatchedKind = int.MaxValue; jjmatchedPos = 0; lastReadPosition = jjRunStringLiteralMatch(); if (jjmatchedPos == 0 && jjmatchedKind > canMatchAnyChar[curLexState]) { jjmatchedKind = canMatchAnyChar[curLexState]; } if (jjmatchedKind != int.MaxValue) { // We have a match! // Put back any characters looked ahead. input_stream.backup(lastReadPosition - jjmatchedPos); if (isToken(jjmatchedKind)) { // Matched kind is a real TOKEN. matchedToken = jjFillToken(); matchedToken.specialToken = specialToken; TokenLexicalActions(matchedToken); if (jjnewLexState[jjmatchedKind] != -1) { curLexState = jjnewLexState[jjmatchedKind]; } return(matchedToken); } else if (isSkip(jjmatchedKind)) { // Matched kind is a SKIP or SPECIAL_TOKEN. if (isSpecial(jjmatchedKind)) { matchedToken = jjFillToken(); if (specialToken == null) { specialToken = matchedToken; } else { matchedToken.specialToken = specialToken; specialToken = (specialToken.next = matchedToken); } SkipLexicalActions(matchedToken); } else { SkipLexicalActions(null); } if (jjnewLexState[jjmatchedKind] != -1) { curLexState = jjnewLexState[jjmatchedKind]; } goto EOFLoop; } // Here it's a MORE. MoreLexicalActions(); if (jjnewLexState[jjmatchedKind] != -1) { curLexState = jjnewLexState[jjmatchedKind]; } lastReadPosition = 0; jjmatchedKind = int.MaxValue; try { curChar = input_stream.readChar(); continue; } catch (System.IO.IOException) { } } reportError(lastReadPosition); } } }