![](/user_photo/2706_HbeT2.jpg)
- •Затверджено Вченою радою факультету кібернетики Протокол № __ від __ ______ 2010 р.
- •1. Синтаксис та семантика. Мова sipl. Композиційна семантика
- •1.1. Синтаксис мови sipl
- •1.2. Композиційна семантика мови sipl
- •1.2.2. Функції
- •1.2.3. Композиції
- •1.2.4. Програмні алгебри
- •1.3. Побудова семантичного терму програми
- •1.4. Доведення коректності програм
- •1.5. Розв’язки типових задач
- •1.6. Розширення мови sipl: Введення булевих змінних
- •1.7. Приклади розв’язків задач.
- •1.8. Розширення мови sipl: Введення викликів функцій
- •1.9. Приклади задач
- •1.10. Завдання для самостійної роботи
- •1.11. Приклади завдань для контрольної роботи.
- •Тема 2. Формальні мови та граматики
- •2.1. Побудова мови за допомогою системи рівнянь з регулярними коефіцієнтами
- •2.2. Завдання для самостійної та контрольної роботи
- •2.3. Нормальні форми Хомського та Грейбах
- •2.4. Завдання для самостійної та контрольної роботи
- •Тема 3. Рекурсія та найменша нерухома точка. Неперервність операторів
- •Тема 4. Натуральна семантика
- •Тема 5. Аксіоматична семантика
- •Література
1.2. Композиційна семантика мови sipl
Семантика задає значення (смисл) програми. Наш приклад показує, що смисл програми – перетворення вхідних даних у вихідні. В математиці такі перетворення називають функціями. Тому до семантичних понять відносять поняття даних, функцій та методів їх конструювання. Такі методи називаються композиціями, а відповідна семантика часто називається композиційною. Будемо вживати термін композиційна семантика, тому що саме композиції і визначають її властивості. Композиційна семантика є певною конкретизацією функціональної семантики, бо базується на тлумаченні програм як функцій.
1.2.1. Дані
Базові типи даних – множини цілих чисел, бульових значень та змінних (імен):
Int={ . . . , -2, -1, 0, 1, 2, . . . }
Bool={true, false}
Var={X, Y, … }
Похідні типи – множина станів змінних (наборів іменованих значень, наборів змінних з їх значеннями):
State=Var Int
Приклади станів змінних: [M8, N16], [M3, X 4, Y2, N16].
Операції на базових типах даних. Щоб відрізнити операції від символів, якими вони позначаються, будемо записувати їх жирним шрифтом, або писати спеціальні позначення. Ми тут оберемо другий варіант, вводячи нові позначення для операцій на типах даних.
Операції на множині Int. Символам +, – , , відповідають операції add, sub, mult, div (додавання, віднімання, множення, ділення). Це бінарні операції типу Int2 Int.
Операції на множині Bool. Символам , , відповідають операції or, and, neg. Це бінарні операції типу Bool2 Bool (диз’юнкція та кон’юнкція) та унарна операція типу Bool Bool (заперечення).
В мові також є операції змішаного типу. Символам операцій порівняння <, , =, , , > відповідають операції less, leq, eq, neq, geq, gr. Це бінарні операції типу Int2 Bool.
Для опису мови SIPL треба додати ще одну основу – множину станів змінних. На цій основі задана бінарна операція накладання (для цієї операції іноді вживається термін накладка). Ця операція за двома станами будує новий стан змінних, до якого входять всі іменовані значення з другого стану, та ті значення з першого стану, імена яких не входять до другого стану. Ця операція подібна до операції копіювання каталогів з спеціальним випадком однакових імен файлів у двох каталогах. В цьому випадку файл з першого каталогу замінюється файлом з тим же іменем з другого каталогу.
Наприклад:
[M8, N16] [M3, X 4, Y2]= [M3, N16, X 4, Y2].
Введемо відношення розширення станів новими іменованими значеннями (іменними парами). Наприклад,
[M8, N16] [M8, X 4, Y2, N16].
Для створення та оперування із станами змінних треба визначити дві функції: іменування x: Int State та розіменування x: State Int, які мають параметр 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,
функції-константи бульового типу
,
: StateBool такі, що (st)=true, (st)=false,
тотожну функцію id: StateState, таку, що id(st)=st.
Отримали багатоосновну алгебру даних мови SIPL
A_Int_Bool_State =<Int, Bool, State; add, sub, mult, div, or, and, neg,
less, leq, eq, neq, geq, gr, x, x, , id, , , >.