Case<выражение> of
<десятичное_число> => Md(<десятичное_число>, s)
<переменная> =>if VARMAP(<переменная>, s) = undef
then error
else VARMAP(<переменная>, s)
<двоичное_выражение> =>
if(Me(<двоичное_выражение>.<выражение_слева>, s) = undef
OR Me(<двоичное_выражение>.< выражение_справа >, s) = undef)
then error
else if (<двоичное_выражение>.< оператор > = '+' then
Me(<двоичное_выражение>.<выражение_слева>, s) +
Me(<двоичное_выражение>.<выражение_справа>, s)
else Me(<двоичное_выражение>.<выражение_слева>, s) ×
Me(<двоичное_выражение>.<выражение_справа>, s).
Оператор присваивания - это вычисление выражения плюс присваивание его значения переменной, находящейся в левой части. Сказанное можно описать следующей функцией:
Ма(х = Е, s) º if Me(E, s) = error
then error
else s' = {<i1', v1'>, <i2', v2'>,..., <in', vn'>} where
for j = 1, 2, ..., n, vj' = VARMAP(ij', s) if ij <>x;
Me(E, s) ifij = x.
Отметим, что два сравнения, выполняющиеся в двух последних строках(ij <> x и ij = х), относятся к именам, а не значениям.
После определения полной системы для заданного языка ее можно использовать для определения смысла полных программ этого языка. Это создает основу для очень строгого способа мышления в программировании.
Денотационная семантика может использоваться для разработки языка. Операторы, описать которые с помощью денотационной семантики трудно, могут оказаться сложными и для понимания пользователями языка, и тогда разработчику следует подумать об альтернативной конструкции.
С одной стороны, денотационные описания очень сложны, с другой - они дают великолепный метод краткого описания языка.
Дата добавления: 2015-07-18; просмотров: 930;