Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекц-3-Комп.doc
Скачиваний:
5
Добавлен:
23.08.2019
Размер:
481.79 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ, МОЛОДІ ТА СПОРТУ

ХМЕЛЬНИЦЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ

Кафедра системного програмування

КУРС ЛЕКЦІЙ

з навчальної дисципліни

«Основи теорії компіляції»

Для студентів 4 курсу

напряму «Комп’ютерна інженерія»

Заслухано та затверджено на

засіданні кафедри

5 Січня 2012 року,

протокол № 7

Зав. кафедри ________________ Поморова О.В.

Викладач_____________________Гнатчук Є. Г.

Секретар засідання_______________Хрущ Л.Ф.

Хмельницький 2012

ЛЕКЦІЯ №3

з «Основи теорії компіляції»

(назва дисципліни)

Формальні граматики і мови. Первинні поняття.

Типи формальних мов і граматик

(тема лекції)

Навчальний час (години, на які разрахована тема) 2 год.

ПЛАН ЛЕКЦІЇ

    1. . Визначення формальної граматики і мови. Первинні поняття. Приклади, що ілюструють первинні поняття.

    2. . Порожня мова. Типи формальних мов і граматик. Граматики типу 0. Граматики типу 1. Граматики типу 2. Граматики типу 3. Висновок у КС-граматиках і правила побудови дерева висновку.

    3. . Синтаксичний розбір. Ліве і праве виведення. Неоднозначні й еквівалентні граматики. Способи завдання схем граматик. Рекомендації з побудови граматик. Опис списків. Приклад побудови граматик.

Рекомендована література

  1. Джулій В.М., Савенко О.С., Муляр І.В. Системне програмне забезпечення: Навчальний посібник.- Хмельницький: ТУП, 2003 – 270с. (С. 48-52).

  2. А.Ахо, Р. Сети, Д.Ульман Компиляторы. Принципы, технологии, инструменты. Пер. с англ. – Издательский дом «Вильямс», 2003. – 768с. (С. 44-56).

  3. Волкова И.А Руденко Т.В. Формальные грамматики и языки. Элементы теории трансляции. Издательский отдел МГУ им. Ломоносова. – 2001. – 99 с. (С. 3-18).

  4. Пратт Т., Зелковиц М. Языки программирования: разработка и реализация. Издательство: Питер, 2002. – 688 с.

  5. Антонов А.В. Системный анализ. Учебник для вузов. -М.: Высшая школа, 2004. – 454 с.

  6. Мозговой М.В. Классика программирования: алгоритмы, языки, автоматы, компиляторы. Практический подход. Издательство: Наука и Техника, 2006. – 320 с.

  7. Веревкин А. П., Кирюшин О.В. Теория систем. Издательство: УГНТУ, 2003. – 100 с.

    1. Визначення формальної граматики і мови. Первинні поняття. Приклади, що ілюструють первинні поняття

Словник чи алфавіт – це кінцева множина неподільних у поточному розрізі символів. Символи, що входять до алфавіту називають літерами алфавіту.

Наприклад: алфавіт А={a,b,c,+,1} містить 5 літер, а алфавіт B={00,01,10,11} містить 4 літери, кожна з яких складається з двох символів.

Ланцюжком символів або словом в алфавіті називається будь-яка скінчена послідовність літер цього алфавіту, а кількість літер, з яких складається слово, називають довжиною слова. Порожнім ланцюжком називається ланцюжок, що не містить жодного символу. Для позначення його будемо використовувати символ .

Більш формально ланцюжок символів в алфавіті V визначається у такий спосіб.

  1.  - ланцюжок в алфавіті V.

  2. Якщо - ланцюжок в алфавіті V і a – символ цього алфавіту, то a – ланцюжок в алфавіті V.

  3.  - ланцюжок в алфавіті 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