Cтраница 1
Значение селектора последовательно сравнивается с указанными константами, и при совпадении вьшолняется заданный оператор. В качестве метки можно использовать лишь - константы ( возможно несколько) или отрезки типов. [1]
Вначале вычисляется значение селектора S, которое должно быть в диапазоне от 0 до п - 1, Если он равен k, то значение всего условного выражения равно Ek i. В стандартном двух-вариантном условном выражении false соответствует нулю, a true - единице. Заметьте, что строгая семантика вызова функций в FC не позволяет поддерживать if в качестве встроенной функции. [2]
Выбор оператора определяется совпадением значения селектора и константы, стоящей перед оператором. [3]
Когда в сегментный регистр загружается значение селектора, связанный с ним регистр дескриптора автоматически обновляется необходимой информацией. В режиме реальной адресации только адрес базы обновляется непосредственным вычислением ( сдвигом значения селектора на 4 бита влево), так как размер сегмента и атрибуты в режиме реальной адресации фиксированы. В режиме реальной адресации с защитой базовый адрес, размер и атрибуты обновляются согласно содержимому дескриптора сегмента, расположенного в памяти и индексированного в соответствующей таблице по селектору. [4]
Следовательно, задача убедиться в том, что программа манипулирует только с той частью записи с вариантами, которая связана с текущим значением компонента-селектора, ложится на совесть программиста. Значение селектора можно менять в любой момент, но неразумно обращаться к переменным в вариантной части записи после изменения компонента-селектора. [5]
Оператор варианта case в языке Паскаль используется для ветвления на произвольное число ветвей в зависимости от значения некоторого выражения, называемого селектором. Значение селектора обязательно должно совпасть с одним из значений меток варианта, следующих за ним, поскольку в противном случае диагностируется ошибка. [6]
Синтаксическая диаграмма оператора CASE. [7] |
Каждое отличное от других значение селектора может появляться в качестве константы только в одном элементе CASE-списка. Желательно, чтобы любое возможное значение селектора, имеющего перечислимый или ограниченный тип, было указано в некотором элементе CASE-списка, так как нельзя предсказать поведение оператора выбора в случае, когда селектор примет значение, не совпадающее ни с одной константой CASE-списка. Однако, согласно стандарту языка Паскаль, предложенному Институтом инженеров по электротехнике и радиоэлектронике, возникновение такой аномальной ситуации должно сопровождаться выработкой сообщения об ошибке во время выполнения программы. [8]
По завершении выполнения выбранной ветви ( операторах) управление передается на оператор, следующий за оператором варианта case. Стандарт на язык Паскаль требует, чтобы значение селектора совпало со значением одной из меток варианта. Если значение селектора не совпадает со значением ни одной из меток варианта, то результат выполнения оператора варианта case не определен. Оператор варианта case в языке Паскаль не допускает использования аналога служебного слова default, имеющегося в операторе-переключателе switch в языке Си. Авторы ряда реализаций трансляторов с языка Паскаль почувствовали необходимость расширения оператора варианта case путем введения возможности использования служебного слова default С их легкой руки использование служебного слова default в операторе варианта case допускается теперь в большинстве реализаций трансляторов с языка Паскаль. [9]
Когда в сегментный регистр загружается значение селектора, связанный с ним регистр дескриптора автоматически обновляется необходимой информацией. В режиме реальной адресации только адрес базы обновляется непосредственным вычислением ( сдвигом значения селектора на 4 бита влево), так как размер сегмента и атрибуты в режиме реальной адресации фиксированы. В режиме реальной адресации с защитой базовый адрес, размер и атрибуты обновляются согласно содержимому дескриптора сегмента, расположенного в памяти и индексированного в соответствующей таблице по селектору. [10]
Тип константы должен соответствовать типу селектора. Оператор, стоящий после двоеточия (:), выполняется в том случае, если значение селектора совпадает со значением константы или если его значение попадает в диапазон значений. [11]
Рассмотрим элементы этой конструкции. После слов SELECT CASE находится заключенное в круглые скобки выражение, называемое селектором оператора SELECT. Значение селектора может оказаться в одном из списков значений, находящихся в круглых скобках после слов CASE. Ветвь CASE DEFAULT отвечает всем не перечисленным в списках значениям выражения. При выполнении оператора SELECT вначале вычисляется значение селектора. Затем выбирается тот список значений, которому принадлежит полученное значение, и выполняются соответствующие операторы. [12]
Оператор выбора указывает, что должен быть исполнен тот оператор, метка которого равна текущему значению селектора. В качестве селектора служит выражение, которое должно вырабатывать значение скалярного типа или отрезка такового. Если значение селектора не совпадает ни с одной меткой варианта, выполняется ( если оно есть) предложение иначе, а при отсутствии иначе - следующий оператор. Операторные скобки иначе и конец образуют блок, аналогичный составному оператору. [13]
По завершении выполнения выбранной ветви ( операторах) управление передается на оператор, следующий за оператором варианта case. Стандарт на язык Паскаль требует, чтобы значение селектора совпало со значением одной из меток варианта. Если значение селектора не совпадает со значением ни одной из меток варианта, то результат выполнения оператора варианта case не определен. Оператор варианта case в языке Паскаль не допускает использования аналога служебного слова default, имеющегося в операторе-переключателе switch в языке Си. Авторы ряда реализаций трансляторов с языка Паскаль почувствовали необходимость расширения оператора варианта case путем введения возможности использования служебного слова default С их легкой руки использование служебного слова default в операторе варианта case допускается теперь в большинстве реализаций трансляторов с языка Паскаль. [14]
Синтаксическая диаграмма оператора CASE. [15] |