Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
172.54 Кб
Скачать

6.2. Значение последовательных выражений.

Раздел определяет значение операторов CF Pascal, таких как: присваивание, пустой оператор, оператор BEGIN, WRITE, READ и простых процедур.

Новые идеи: Семантика операторов.

Последовательные программы не имеют операторов IF или WHILE, поэтому поток управления проходит от первого до последнего оператора. Для каждого вида операторов CF Pascal будет определено его частное значение, которое соответствует преобразованиям над состояниями выполнения, выполняемым данным оператором. Мы будем использовать Box-нотацию для обозначения частного значения оператора.

6.2.1. Оператор присвоения.

Значение некоторого оператора присвоения является функцией из одного состояния выполнения в другое. В таблице выполнения оператор присвоения заставляет идентификатор в своей левой части быть связанным с новой величиной, полученной из выражения справа.

Box-нотация может быть расширена, чтобы обозначать значение выражения в правой части оператора присвоения. Частное значение такого выражения – это значение, взятое для данного состояния выполнения. Если оператор присвоения:

Ch1 := Ch2;

выражение справа – символьное выражение, представленное переменной, и ее значение доступно в данном состоянии выполнения. Рассмотрим значение символьной переменной, используя следующий пример.

В состоянии, содержащем пару Ch2B, символьная переменнаяCh2 имеет значение B. Таким образом, для идентификатора W, объявленного как CHAR, частным значением выражения W для состояния s является W(s).

W = {<s, s(W)>}

Например:

Ch ({INPUT <††, ††R>, OUTPUT <††, ††W>,ChF, V1C})

= {INPUT <††, ††R>, OUTPUT <††, ††W>,ChF, V1C}(Ch)

= F

Значение символьного литерала вычислить легче, потому что оно никак не зависит от состояния выполнения. Вне зависимости от того, что в состоянии выполнения, значением символьного литерала является сам литерал.

‘A’ (s) = A

‘B’ (s) = B

и т.д.

Определение частного значения символьного выражения позволяет нам рассмотреть определение частного значения оператора присвоенияс идентификатором V в левой части и выражением E в правой части:

V:= E = {<s, t>: t = (s – {<V, c >: c - символ})  {<V, E (s)>}}

Разность множеств удаляет старое значение V из состояния выполнения, объединение добавляет соответствующее новое значение.

Для идентификаторов V1 и V2 и символьного выражения, представленного литералом ‘A’, определение будет выглядеть как:

V1 := V2 ={<s, t>: t = t такое же как s за исключением V1 (t) = V2(s)}

V1 := ‘A’ ={<s, t>: t = t такое же как s за исключением V1 (t) = A}

Примеры:

V1 := ‘B’ ({V1A, …}) = {V1B, …}

V2 := V1 ({V1A, V2B ,…}) = {V1A, V2A, …}

V1 := V2 ({V1?, V2A ,…}) = {V1A, V2A, …}

V1 := V2 ({V1A, V2? ,…}) = {V1?, V2?, …}

Области определения и значений для рассмотренных частных значений приведены в следующей таблице.

Часть программы

Область определения

Область значений

программа

список строк

список строк

заголовок программы

список строк

состояния выполнения

точка

состояния выполнения

список строк

блок

состояния выполнения

состояния выполнения

объявление

состояния выполнения

состояния выполнения

оператор

состояния выполнения

состояния выполнения

символьное выражение

состояния выполнения

символьное значение

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]