- •5 Січня 2012 року,
- •Рекомендована література
- •Визначення формальної граматики і мови. Первинні поняття. Приклади, що ілюструють первинні поняття
- •Еквівалентні, тому що їх обидві породжує мова:
- •Порожня мова. Типи формальних мов і граматик. Граматики типу 0. Граматики типу 1. Граматики типу 2. Граматики типу 3. Висновок у кс-граматиках і правила побудови дерева висновку
- •Рекомендована література
- •Перелік додаткової літератури
- •Пратт т., Зелковиц м. Языки программирования: разработка и реализация. Издательство: Питер, 2002. – 688 с.
- •Мозговой м.В. Классика программирования: алгоритмы, языки, автоматы, компиляторы. Практический подход. Издательство: Наука и Техника, 2006. – 320 с.
МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ, МОЛОДІ ТА СПОРТУ
ХМЕЛЬНИЦЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
Кафедра системного програмування
КУРС ЛЕКЦІЙ
з навчальної дисципліни
«Основи теорії компіляції»
Для студентів 4 курсу
напряму «Комп’ютерна інженерія»
Заслухано та затверджено на
засіданні кафедри
5 Січня 2012 року,
протокол № 7
Зав. кафедри ________________ Поморова О.В.
Викладач_____________________Гнатчук Є. Г.
Секретар засідання_______________Хрущ Л.Ф.
Хмельницький 2012
ЛЕКЦІЯ №3
з «Основи теорії компіляції»
(назва дисципліни)
Формальні граматики і мови. Первинні поняття.
Типи формальних мов і граматик
(тема лекції)
Навчальний час (години, на які разрахована тема) 2 год.
ПЛАН ЛЕКЦІЇ
. Визначення формальної граматики і мови. Первинні поняття. Приклади, що ілюструють первинні поняття.
. Порожня мова. Типи формальних мов і граматик. Граматики типу 0. Граматики типу 1. Граматики типу 2. Граматики типу 3. Висновок у КС-граматиках і правила побудови дерева висновку.
. Синтаксичний розбір. Ліве і праве виведення. Неоднозначні й еквівалентні граматики. Способи завдання схем граматик. Рекомендації з побудови граматик. Опис списків. Приклад побудови граматик.
Рекомендована література
Джулій В.М., Савенко О.С., Муляр І.В. Системне програмне забезпечення: Навчальний посібник.- Хмельницький: ТУП, 2003 – 270с. (С. 48-52).
А.Ахо, Р. Сети, Д.Ульман Компиляторы. Принципы, технологии, инструменты. Пер. с англ. – Издательский дом «Вильямс», 2003. – 768с. (С. 44-56).
Волкова И.А Руденко Т.В. Формальные грамматики и языки. Элементы теории трансляции. Издательский отдел МГУ им. Ломоносова. – 2001. – 99 с. (С. 3-18).
Пратт Т., Зелковиц М. Языки программирования: разработка и реализация. Издательство: Питер, 2002. – 688 с.
Антонов А.В. Системный анализ. Учебник для вузов. -М.: Высшая школа, 2004. – 454 с.
Мозговой М.В. Классика программирования: алгоритмы, языки, автоматы, компиляторы. Практический подход. Издательство: Наука и Техника, 2006. – 320 с.
Веревкин А. П., Кирюшин О.В. Теория систем. Издательство: УГНТУ, 2003. – 100 с.
Визначення формальної граматики і мови. Первинні поняття. Приклади, що ілюструють первинні поняття
Словник чи алфавіт – це кінцева множина неподільних у поточному розрізі символів. Символи, що входять до алфавіту називають літерами алфавіту.
Наприклад: алфавіт А={a,b,c,+,1} містить 5 літер, а алфавіт B={00,01,10,11} містить 4 літери, кожна з яких складається з двох символів.
Ланцюжком символів або словом в алфавіті називається будь-яка скінчена послідовність літер цього алфавіту, а кількість літер, з яких складається слово, називають довжиною слова. Порожнім ланцюжком називається ланцюжок, що не містить жодного символу. Для позначення його будемо використовувати символ .
Більш формально ланцюжок символів в алфавіті V визначається у такий спосіб.
- ланцюжок в алфавіті V.
Якщо - ланцюжок в алфавіті V і a – символ цього алфавіту, то a – ланцюжок в алфавіті V.
- ланцюжок в алфавіті V тоді і тільки тоді, коли він є такий в силу п.п.1 та 2.
Якщо і ланцюжки, то - називається конкатенацією (чи зчепленням) ланцюжків і .
Наприклад, якщо:
= ab і =cd, то =abcd.
Для будь-якого ланцюжка вірний вираз:
==.
Реверсом ланцюжка називається ланцюжок, символи якого записані в зворотному порядку.
Реверс ланцюжка будемо позначати R. Наприклад, якщо:
=abcdef, то R=fedcba.
Для порожнього ланцюжка:
=R.
n-м ступенем ланцюжка (будемо позначати n) називається конкатенація n ланцюжків :
0=; n=n-1=n-1.
Довжину ланцюжка будемо позначати . Довжина =0.
Мова в алфавіті V – це підмножина скінчених ланцюжків в цьому алфавіті.
Позначимо через V* множину, що містить усі ланцюжки в алфавіті V, включаючи порожній ланцюжок .
Наприклад, якщо:
V={0,1}, то V*={, 0, 1, 00, 01, 11, 10, 000, 001, 011,…}.
Позначимо через V+ множину, що містить усі ланцюжки в алфавіті V крім порожнього ланцюжка .
Отже:
Декартовим добутком AB множин A та B називається множина:
Зрозуміло, що кожна мова в алфавіті V є підмножиною множини V*.
Відомо кілька різних способів опису мов. Один з них використовує породжуючі граматики.
Формальною породжуючою граматикою G називають наступну четвірку об’єктів:
G=(VT, VN, P, S),
де:
VT – алфавіт термінальних символів (терміналів). Літери цього алфавіту називаються термінальними символами, з них будуються ланцюжки, що породжуються граматикою;
VN – алфавіт нетермінальних символів (не терміналів), що не перетинається з VT. Літери цього алфавіту використовуються при побудові ланцюжків. Вони можуть входити у проміжкові ланцюжки, але не повинні входити у результат породження;
P – множина правил висновку чи породжуючих правил наступного виду: , де і - ланцюжки, побудовані з літер алфавіту , який має назву повний алфавіт (словник) граматики G.
S – початковий символ граматики, .
У множині правил граматики можуть зустрічатися правила з пустою правою частиною , тому, для уникнення невизначеності домовимось записувати таке правило у вигляді: .
Для запису правил висновку з однаковими лівими частинами:
будемо користуватися скороченим записом:
Кожне і (і = 1, 2, ..., n) будемо називати альтернативою правила висновку з ланцюжка .
Приклад граматики:
G1= ({0,1}, {A, S}, P, S),
де P складається з правил:
S 0A1
0A 00A1
A .
Визначення.
Нехай r = правило граматики G і =/ // - ланцюжок символів, причому .
Тоді ланцюжок =/ // може бути отриманим з ланцюжка шляхом застосування правила r (тобто заміною в ланцюжку на ).
У цьому випадку кажуть, що ланцюжок безпосередньо виведений з ланцюжка та позначають .
Наприклад:
ланцюжок 00А11 безпосередньо виведений з 0А1 у граматиці G1.
Якщо задана послідовність ланцюжків = (0, 1, … n) таких, що існує послідовність безпосередніх виведень:
0 1, 1 2, ..., n-1 n,
то таку послідовність називають виведенням довжини n n з 0 в граматиці G та позначають 0 *n.
Наприклад:
S 000A111 у граматиці G1, тому що існує виведення S 0A1 00A11 000A111. Довжина виведення – 3.
Мовою, що породжена граматикою G=(VT, VN, P, S), називається множина L(G)= { VT*S }.
Іншими словами, L(G), це всі ланцюжки в алфавіті VT, що виведені з S за правилами P.
Наприклад:
L(G1)={0n1n |n>0}.
Ланцюжок (VT VN)*, для якої S , називається сентенціальною формою в граматиці G=(VT, VN, P, S).
Таким чином, мову, яку складає граматика можна визначити як множину термінальних сентиціальних форм.
Граматики G1 і G2 називаються еквівалентними, якщо L(G1)=L(G2).
Наприклад:
G1=({0,1},{A, S}, P1, S) i G2=({0,1},{S}, P2, S),
де
P1: 0A1 P2:S 0S1|01
0A 00A1
A