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

6.1.4. Значение объявлений.

Синтаксическим объектом, располагающимся между заголовком программы и финальной точкой является блок CFPascal. Частное значение блока преобразует начальное состояние выполнения для блока в конечное. Это преобразование может иметь несколько отдельных частей: декларация переменных и процедур, и корневое выражение BEGIN блока.

Декларация изменяет состояние выполнения, добавляя к нему один или несколько идентификаторов. До выполнения декларации идентификаторы не существуют, после декларации они могут иметь значения. Частное значение декларации изменяет область определения состояния выполнения, добавляя идентификатор. Будет удобно отдельно разделять декларации для типов CHAR, TEXT и PROCEDURE.

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

Для переменной N типа CHAR определим:

VAR N: CHAR = {<s, t>: t = s  {<N, x>} для любого символьного значения x}

Строка N соответствует синтаксису <идентификатора> и строка VAR N: CHAR формально должна быть представлена как:

V = †VAR† & N & †CHAR†

При использовании символа ? для обозначения значения N:

VAR N: CHAR = {<s, t>: t = s  {<N, ?>} }

не так очевидно, что любые символьные значения образуют пары с N. Например, пусть s будет аргументом VAR N: CHAR, тогда s будет:

s  {ChA},

s  {ChB},

для всех возможных символьных значений.

Хотя VAR N: CHAR не является функцией, VAR N: CHART является функцией, потому что ее пары имеют вид:

<s  {NA}, s>

<s  {NB}, s>

и каждому аргументу соответствует уникальное значение.

Значение декларации файловых переменных аналогично. Пусть N – идентификатор, определим:

VAR N: TEXT = {<s, t>: t = s  {N<x, y, z>} для некоторых строк x, y и некоторого z  {R,W}}

Сокращенная форма записи присоединяет 3-список <?,?,?> к вновь созданному идентификатору.

Объявления более, чем одной переменной являются прямым обобщением рассмотренног. К состоянию выполнения добавлается несколько идентификаторов, каждый в паре с неопределенным символьным значением или 3-списком.

Это может быть выражено композицией:

VAR Сh1, Ch2: CHAR = VAR Сh1: CHAR ◦ VAR Ch2: CHAR

= {<s, t>: t = s  {Ch1?}  {Ch2?}}

которая включает пары, такие как

<s, s  {Ch1C}  {Ch2F}>

и все остальные комбинации двух символьных значений.

Предположим, что

x = {INPUT <††, ††R>, OUTPUT <††, ††W>}

является аргументом отношения VAR Сh: CHAR, тогда x образует пары в отношении для

{INPUT <††, ††R>, OUTPUT <††, ††W>}  {Chс}

для всех символьных значений c. Представим это в виде формулы:

VAR Сh: CHAR ({INPUT <††, ††R>, OUTPUT <††, ††W>})

= { INPUT <††, ††R>, OUTPUT <††, ††W>, Ch?}

Объявление процедур, насколько нам в данный момент известно, не изменяет количество в столбцов в таблице выполнения. Когда позднее идентификатор процедуры используется в в процедурном выражении, вызывается <тело> процедуры. Задача объявления процедуры - записать информацию, которая сделает возможными действия описанные в процедуре. Этот текст присоединяется к идентификатору процедуры подобно значению из таблицы выполнения для переменной.

Для идентификатора процедуры N и тела T, определим:

PROCEDURE N; T = {<s, t>: t = s  {<N, T>}}

При определении значения декларативной части и значений других частей программы мы принимаем, что программа и ее части синтаксически корректны. Строки, не соответствующие синтаксическим и контекстным правилам, не могут иметь значений.

Вычисляя значения только синтаксически корректных программ, мы исключаем из рассмотрения все затруднения связанные с неправильным синтаксисом. Например, если бы было возможным повторное объявление идентификатора, необходимо было бы описать и рассматривать такую ситуацию. Но поскольку это синтаксическая ошибка, семантическое определение не рассматривает такую возможность.

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