|
Примеры операторов перехода: go to / go to if x<.0 then (if p [15] then w else wl) else if i Ф n then continue else exit где /, w, wl, continue, exit — идентификаторы меток. Выполнение оператора перехода состоит в том, что определяется метка, являющаяся значением именующего выражения в этом операторе, после чего начинает выполняться оператор, помеченный найденной меткой. Пусть требуется вычислить сумму s= 1 + 1/2+ л.+ 1/л Для этого можно воспользоваться следующей группой операторов: t:=0; s:=0; continue: i: = i + t; s: = s + ///"; go to if i = n then exil else continue; exit: где метка exi/: метит оператор, следующий за оператором перехода. Метка, представленная идентификатором метки, найденным в результате вычисления именующего выражения, определяется в соответствии с правилами локализации идентификаторов в блоках, сформулированными в предыдущем разделе. Может случиться, что эта метка находится за пределами блока Вь одним из операторов которого является выполняемый оператор перехода. Пусть идентификатор метки локален в блоке В2, охватывающем блок Вг. Тогда выполнение блока В1г а также всех блоков, содержащих блок Вг и содержащихся в блоке В2, прекращается. При этом перестают существовать все объекты, представленные всеми идентификаторами, локальными в этих блоках. Поясним сказанное на примере. Пусть программа имеет следующую структуру (показаны только границы блоков, один из операторов перехода к метке /: и все метки с этим же идентификатором, расположенные в разных блоках): ВО: begin ... I: ... Bl: begin ... В2: begin ... go to /; ... ВЗ: begin ... I: end; ... end; ... B4: begin ... /: ... end; ... I: ... end; ... end
|