public Token next() throws IOException {
		String lexeme = "";

		int value = 0;
		int count = 0;

		do {
			value = read();

			if (value == EOF) {
				return Token.generate(Token.Kind.EOF, lineNumber, charPosition);
			}

			if (value == WS || value == TAB) {
				continue;
			}

			lexeme += (char) value;

			if ((lexeme + (char) nextChar).equals("//")) {
				while (!(nextChar == NL || nextChar == EOF || nextChar == ENTER)) {
					read();
				}

				lexeme = "";
				continue;
			}

			if (!Token.isToken(lexeme + (char) nextChar)) {
				return Token.generate(lexeme, lineNumber, charPosition - count);
			}

			++count;
		} while (true);
	}