Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТПфунк_Лекція_08_09.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
174.08 Кб
Скачать

9.4.1. Порядок построения формальной модели семантики языка программирования sMalL согласно ранее представленному формальному описанию синтаксиса языка в терминах бнф

1. Прежде всего, необходимо дать определение синтаксических доменов (т.е. доменов, характеризующих основные синтаксические категории) для идентификаторов (домен Ide), выражений (домен Exp) и команд (домен Com).

2. Следует представить определение вычислительной модели на основе синтаксических доменов.

3. Необходимо перейти к определению семантических функций (E для домена Exp, C для домена Com и т.д.), которые отображают синтаксические конструкции языка программирования в соответствующие им семантические представления.

4. Следует сформулировать определение семантических предложений в терминах смены состояний программы.

Заметим, что при выполнении программы (в частности, написанной на языке программирования SMalL) происходит изменение состояния памяти (m, memory), которое в простейшем случае характеризует соответствие идентификаторов и значений (то есть, по сути, связывание переменной со значением), либо имеет значение unbound (характеризующее отсутствие связи идентификатора со значением, т.е. аналог свободной переменной).

В соответствии с намеченной схемой рассуждений перейдем к описанию синтаксических доменов, которые в полной мере определяют синтаксис языка SMalL:

Ide = {I | I - идентификатор};

Com = {C | C - команда};

Exp = {E | E - выражение}.

Совокупность всех возможных идентификаторов языка SMalL организуем в домен Ide, команд - в домен Com, и, наконец, выражений - в домен Exp.

9.4.2. Вычислительная модель на основе состояний программы языка sMalL

Для наглядности она представлена в виде следующей таблицы 9.1:

Таблица 9.1. Вычислительная модель на основе состояний программы языка SMalL

Параметр

Домен

Соотношение

Состояние

State

(s) State=Memory

Память

Memory

(m) Memory = Ide -> [Value+{unbound}]

Значение

Value

(v) Value=Int+Bool

Заметим, что состояние программы в произвольный момент времени определяется состоянием "памяти" абстрактной машины той или иной формы. При этом под памятью понимается отображение из домена идентификаторов в домен значений (т.е. аналог связывания переменной со значением в ламбда-исчислении). Для корректной обработки исключительных ситуаций, возникающих в случае свободных переменных, вводится дополнительный элемент unbound. Домен значений представляет собой дизъюнктную сумму доменов, содержащих существующие в языке SMalL типы Int и Bool.

9.5. Описание семантических предложений

9.5.1. Семантические предложения для выражений

Приведем семантические предложения для выражений языка программирования SMalL:

E : Exp -> [State -> [[Value, State] +

{error}]];

E[E]s = (v,s'),

если v - значение E в s, s'- состояние после означивания;

E[E]s = error,

если возникает ошибка несоответствия типов.

Из приведенных соотношений следует, что вычисление значения выражения языка программирования SMalL приводит к такому изменению состояния, что происходит связывание переменной со значением, либо (в случае невозможности связывания по причине несоответствия типов переменной и значения) генерируется сообщение об ошибке. При этом состояние программы изменяется с s на s'.