Введение в теорию программирования. Объектно-ориентированный подход



             

Семантика основных конструкций языка программирования C# - часть 2


Далее, сформулируем вычислительную модель на основе состояний программы языка C#, для наглядности систематизировав ее в виде следующей таблицы:

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

ПараметрДоменСоотношение
СостояниеState (s) State = Memory
ПамятьMemory (m) Memory = Ide
[Value + (unbound)]
ЗначениеValue (v) Value = Int + Bool

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

В соответствии с намеченной схемой рассуждений, перейдем к описанию семантических предложений, которые описывают значение денотатов (т.е. правильно построенных конструкций) языка C#.

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

E : Exp -> [State -> [[Value ( State] + {error}]];

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

если

v - значение E в s,

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

E[E]s = error,

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

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

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

С:Com->[State->[State+{error}]].

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




Содержание  Назад  Вперед