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

РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ СОЦИАЛЬНЫЙ УНИВЕРСИТЕТ

Факультет информационных технологий ю.П.Кораблин Денотационная семантика языков программирования

Методические указания для самостоятельной работы студентов

специальностей 230100.62 и 230105.65

Москва 2010

Денотационная семантика языков программирования

В этом пособии будет рассмотрена стандартная денотационная семантика языков программирования императивного типа, т.е. языков, в которых имеется концепция машинного состояния, которое изменяется командами.

  1. Семантические определения

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

С Cmd ( команды )

E Exp ( выражения )

c Com ( примитивные команды )

p Prе ( примитивные предикаты )

Тогда синтаксис языка L, может быть задан следующим образом:

C ::= c | e | if E then C0 else C1 fi | C0; C1

E ::= p | true | false | if E0 then E1 else E2 fi.

Результатом выполнения команды является изменение состояния, и в качестве подходящего значения команды мы будем брать функции изменения состояния. Таким образом, если S - множество состояний, то значением команды будет элемент из области S → S.

Предположим, что выражение не имеет побочного эффекта, т.е. вычисление выражения не производит изменения состояния. Ограничим также область значений выражений областью истинностных значений

Т = {true,false, ⊥}.

Результат выражения зависит от состояния. Таким образом, значением выражения будет элемент из области S → T. Из вышесказанного следует, что семантическими областями (областями значений) для языка L являются:

t  T ( истинностные значения )

σ S ( машинные состояния )

γ  (S → S) ( значения команд )

ω  (S → T) ( значения выражений )

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

Определение Для x  P, где P - область, содержащая Т как слагаемое (P = P1+P2+... +Pn), и z, y  D, где D – некоторая область значений.

Определение Функция f: A → B называется строгой (записывается strict f), если для ⊥∈ A f(⊥) = ⊥ ∈ B, т.е.

Семантические функции команд ℂ: Cmd ⟶ (S ⟶ S) определяются следующим образом:

, где - функция, ассоциируемая с командой "c";

- тождественная функция, (т.е. I ≡ λσ.σ);

= λσ.𝔼 σ ⟶ ℂ σ, ℂ σ;

= ℂ ∘ ℂ .

Здесь и далее двойные скобки "  " и "  " используются для выделения синтаксических конструкций, к которым применяется семантическая функция. Семантическая функция 𝔼, определяющая значения выражений языка L, будет определена ниже.

Для лучшего понимания пункта, определяющего семантику условной команды, зададим состояние σ, к которому применяется соответствующая функция. Тогда:

= 𝔼 σ ⟶ ℂ σ, ℂ σ,

т.е. функция 𝔼 применяется к состоянию σ, и результат используется для выбора альтернатив ℂ σ, i=0,1. ℂ σ означает применение соответствующей функции ℂ к состоянию σ.

Запись вида γ1∘γ0 в последнем пункте семантического определения означает функциональную композицию, т.е. (γ1∘γ0) = γ10σ).

Семантические функции для выражения языка L имеют аналогичное функциональное определение.

𝔼 : Exp → (S → T) и задается следующим образом:

𝔼 = strict ω, где ω – функция, ассоциированная с “p”;

𝔼 = strict(λσ.true);

𝔼 = strict(λσ.false);

𝔼 = λσ. 𝔼 σ ⟶ 𝔼 σ, 𝔼 σ.

Пусть, например, σ - подходящее состояние, т.е. σ ≢ ⊥. Тогда 𝔼 σ = true. Если же σ ≡ ⊥, то 𝔼 σ = ⊥.

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