public Token next()
	{
		if(eof)
			return new Token(Kind.EOF, "", nextReadLineNumber, nextReadColumnNumber - 1);
		
		while(emittedTokens.size() == 0)
		{
			int rawValue = readChar();
			
			if(rawValue < 0)
			{
				eof = true;
				value = Character.MIN_VALUE;
			}
			else
			{
				value = (char)rawValue;
			}
			
			currentState = currentState.transition(context);
		}
				
		return emittedTokens.remove();
	}