 <p>As noted, K is the loop's label. It allows you to identify a particular loop to aid readability, and also to selectively exit a specific loop from a set of nested enclosing ones (i.e. being a "goto"...shhh! :-)</p> <p>Here's a contrived example (not compiled checked):</p> <pre><code> S : Unbounded_String; F : File_Type; Done_With_Line : Boolean := False; All_Done : Boolean := False; begin Open(F, In_File, "data_file.dat"); File_Processor: while not End_Of_File(F) loop S := Get_Line(F); Data_Processor: for I in 1 .. Length(S) loop Process_A_Character (Data_Char =&gt; Element(S, I), -- Mode in Line_Done =&gt; Done_With_Line, -- Mode out Finished =&gt; All_Done); -- Mode out -- If completely done, leave the outermost (file processing) loop exit File_Processor when All_Done; -- If just done with this line of data, go on to the next one. exit Data_Processor when Done_With_Line; end loop; end loop File_Processor; Close(F); end; </code></pre>