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

1.3. Формальний опис семантики мови sipl

Семантика задає значення (смисл) програми. Наш приклад показує, що смисл програми – перетворення вхідних даних у вихідні. У математиці такі перетворення називають функціями. Тому до семантичних понять відносять поняття даних, функцій та методів їх конструювання. Такі методи називаються композиціями, а відповідна семантика часто називається композиційною. Будемо вживати термін композиційна семантика, тому що саме композиції і визначають її властивості. Композиційна семантика є певною конкретизацією функціональної семантики тому, що базується на тлумаченні програм як функцій.

Перейдемо до розгляду композиційної семантики мови SIPL.

1.3.1. Дані

Базові типи даних – множини цілих чисел, булевих значень та змінних (імен):

  • Int={ . . . , -1, 0, 1, 2, . . . };

  • Bool={true, false};

  • Var={…, M, N, … }.

Похідні типи – множина станів змінних (наборів іменованих значень, наборів змінних з їх значеннями):

  • State=VarInt.

Приклади станів змінних: [M8, N16], [M3, X4, Y2, N16].

Визначимо тепер операції на базових типах даних. Щоб відрізнити операції від символів, якими вони позначаються, їх пишуть жирним шрифтом або вводять спеціальні позначення. Ми тут оберемо другий варіант, вводячи нові позначення для операцій на типах даних.

Операції на множині Int. Символам +, –,  відповідають операції add, sub, mult (додавання, віднімання, множення). Це бінарні операції типу Int2Int.

Операції на множині Bool. Символам ,  відповідають операції or, neg. Це бінарна операція типу Bool2Bool (диз’юнкція) та унарна операція типу Bool Bool (заперечення).

У мові також є операції змішаного типу. Символам операцій порівняння =, > відповідають операції eq, gr. Це бінарні операції типу Int2  Bool.

Вивчення властивостей даних та операцій у математиці відбувається на основі поняття алгебри. В першому наближенні алгебру можна тлумачити як множину із заданими на ній операціями. Для нашої мови маємо наступні алгебри.

Алгебра цілих чисел: A_Int=<Int; add, sub, mult>.

Алгебра булевих значень: A_Bool=<Bool; or, neg>.

Якщо додати операції порівняння, отримаємо двоосновну алгебру базових даних:

A_Int_Bool =<Int, Bool; add, sub, mult, or, neg, eq, gr>.

Для опису мови SIPL треба додати ще одну основу – множину станів змінних. На цій основі задана бінарна операція накладання  (для цієї операції іноді вживається термін «накладка»). Ця операція за двома станами будує новий стан змінних, до якого входять усі іменовані значення з другого стану та і ті значення з першого стану, імена яких не входять до першого стану. Ця операція подібна до операції копіювання каталогів із спеціальним випадком однакових імен файлів у двох каталогах. У цьому випадку файл із першого каталогу замінюється файлом з тим же іменем з другого каталога.

Наприклад:

[M8, N16]  [M3, X4, Y2]= [M3, N16, X4, Y2].

Уведемо відразу і відношення розширення  станів новими іменованими значеннями. Наприклад,

[M8, N16]  [M8, X4, Y2, N16].

Це відношення не включаємо в алгебри, пов’язані з мовою SIPL, бо воно в цій мові безпосередньо не використовується, але буде корисним для доведення властивостей програм цієї мови.

Для створення та оперування із станами змінних треба визначити дві функції: іменування x: IntState та розіменування x: StateInt, які мають параметр xVar:

  • x(n)=[xn];

  • x(st)=st(x).

Тут і в подальшому вважаємо, що nInt, stState. Перша функція іменує іменем x число n, створюючи стан [xn], друга бере значення імені x у стані st. Сама формула ґрунтується на тому факті, що стани змінних можуть тлумачитись як функції виду VarInt. Функція розіменування є частковою. Вона не визначена, якщо x не має значення у стані st.

Наприклад:

  • M(5)=[M5];

  • Y([M3, X4, Y2])=2;

  • Y([M3, X4]) не визначене.

Крім того, введемо

  • параметричну функцію-константу арифметичного типу : StateInt, таку що (st)=n (nInt);

  • тотожну функцію id: StateState, таку, що id(st)=st.

Отримали багатоосновну алгебру даних мови SIPL

A_Int_Bool_State =<Int, Bool, State;

add, sub, mult, or, neg, eq, gr,  x, x, , id, >,

яка подана на рис. 1.3.

Зауваження 1.4. Є ще одна основа – Var. Оскільки ніяких операцій на цій основі у мові SIPL не задано, тому цю основу до алгебри даних не включаємо, але імена з Var використовуємо як параметри операцій іменування та розіменування.

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