private Token NextToken() { try { _lastMatch.Clear(); _stringDfaMatcher.Match(_buffer, _lastMatch); _nfaMatcher.Match(_buffer, _lastMatch); _regExpMatcher.Match(_buffer, _lastMatch); int line; int column; if (_lastMatch.Length > 0) { line = _buffer.LineNumber; column = _buffer.ColumnNumber; var str = _buffer.Read(_lastMatch.Length); return(NewToken(_lastMatch.Pattern, str, line, column)); } else if (_buffer.Peek(0) < 0) { return(null); } else { line = _buffer.LineNumber; column = _buffer.ColumnNumber; throw new ParseException( ParseException.ErrorType.UNEXPECTED_CHAR, _buffer.Read(1), line, column); } } catch (IOException e) { throw new ParseException(ParseException.ErrorType.IO, e.Message, -1, -1); } }