КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Опис семантичних речень
Тема 8. Семантика мов програмування Синтаксис кортежу (<вираз>,..., <вираз>) Приклад 1: (1, 2*1, 2*2*1) Приклад 2: (1, true, 0, false)
Синтаксис опису змінних і функцій Опис змінної: <опис>::= val <ідентифікатор> = <вираз> Опис функції: <опис>::= fun <ідентифікатор> <ідентифікатор> = <вираз>
Приклад 1. val x=2; Приклад 2. fun fact n = if n<2 then 1 else n * fact (n - 1); Приклад 3. fun f (x,y) = x*x + y*y;
3 види семантик: 1) операційні семантики – переходи абстрактної машин из одного стану в інший: SECD-машина, КАМ 2) пропозиційні семантики – множина формул, що описує стани програми: аксіоматичний метод Хоара і метод індуктивних тверджень Флойда 3) денотаційні семантики – абстракції функцій, що оперують станами програми: теорія обчислень Дана Скотта (семантичні домени)
8.3.1. Теорія обчислень Д.Скотта
Для побудови теорії необхідно: 1) перерахувати стандартні домени 2) визначити кінцеві домени 3) визначити конструктори доменів
4) комбінування доменів з використанням конструкторів (існує 4 типи конструкторів) 8.3.2. Визначення способів комбінування доменів Означення 1. Під функціональним простором з домена D1 в домен D2 розумітимемо домен [D1->D2], що містить всі можливві функції з областю визначення з домена D1 і областю значень з домена D2:
[D1 -> D2] = {f | f: D1 -> D2}. Означення 2. Під декартовим (або, прямим) добутком доменів D1, D2,... Dn будемо розуміти домен всіх можливих n -ок виду
[D1 × D2 ×... × Dn]= {(d1 × d2 ×... × dn) | d1 Î D1, d2 Î D2, dn Î Dn...,}. Означення 3. Під послідовністю D* будемо розуміти домен всіх можливих кінцевих послідовностей виду d=(d1,d2,...,dn) з елементів d1,d2,...,dn,... домену D, где n>0. Означення 4. Під диз'юнктною сумою будемо розуміти домен з визначенням
[D1+D2+...+Dn]={ (di, i) | di Î Di, 0<i<n+1 },
де належність елементів di компонентам Di однозначно встановлюється спеціальними функціями належності.
8.4. Формалізація семантики мови|язик| функціонального програмування SML|
SMalL
1. E::= true | false | 0 | 1 | I | -E | E1==E2 | E1+E2
2. С::= I=E | if (E) C1 else C2 | while (E) C | C1;C2
8.4.1. Порядок побудови формальної моделі семантики мови програмування SMalL згідно раніше представленому формальному опису синтаксису мови в термінах БНФ
Ide = {I | I - ідентифікатор}; Com = {C | C - команда}; Exp = {E | E - вираз}.
8.4.2. Обчислювальна модель на основі станів програми мови SmalL
Таблиця 8.1. Обчислювальна модель на основі станів програми мови SmalL
8.5.1. Семантичні речення для виразів
E: Exp -> [State -> [[Value, State] + {error}]];
E[E]s = (v,s'),
якщо v - значення E в s, s'- стан після означування;
E[E]s = error,
якщо виникає помилка невідповідності типів.
8.5.2. Семантичні речення для команд
С: Com -> [State -> [ State + {error}]].
8.5.3. Семантичні речення для денотатів:
1. констант цілочисельного типу мови SMalL: E[0]s = (0,s); E[1]s = (1,s);
2. констант логічного типу мови SMalL: E[true]s = (true,s); E[false]s = (false,s);
3. ідентифікаторів мови SMalL: E[I]s = (m,I=unbound) error, -> (m,I,s).
4. виразів мови SMalL
4.1. денотат заперечення
E[-E]s=(E[E]s=(v,s')) (isBool -> (not v,s'),error,error;
4.2. денотат присвоювання
E[E1=E2]s=(E[E1]s=(v1,s1)) -> (E[E2]s1= (v2,s2)) -> (v1 = v2,s2),error),error;
4.3. денотат додавання
E [E1+E2]s = (E [E1] s=(v1,s1)) -> (E [E2]s1 = (v2,s2)) -> (IsNum v1 and IsNum v2 -> v1+v2,s2),error), error),error.
5. Самостійно розробити семантичні речення для денотатів команд мови програмування SMalL.
Дата добавления: 2014-01-07; Просмотров: 391; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |