Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЕОРІЯ ЦИФРОВИХ АВТОМАТІВ ТА ФОРМАЛЬНИХ МОВ..doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
4.72 Mб
Скачать

12.6. Приклади побудови спадного розпізнавача

Приклад 1. Побудувати спадний розпізнавач для оператора присвоювання арифметичного виразу. Арифметичний вираз містить: ідентифікатор і, :=, (, ), ;. Кількість вкладених дужок не обмежена.

Приклади ланцюжків оператора присвоювання:

i := і+(і+і)+(і+і);

i :=і+і;

i :=і+(і+(і+і)).

1. Будуємо правила граматики. Праву частину оператора присвоювання позначимо нетермінальним символом А. Перше правило матиме вигляд: I i := A;. Нетермінальний символ А є списком з роздільником. Елементом списку є ідентифікатор і, а роздільником є знак «+». Окрім того, список А може бути розміщеним у дужках. Нетермінальний символ С використовуємо для рекурсії.

Таким чином, маємо:

I i := A; (1)

A iC (2)

C +A (3)

A (А)C (4)

C $. (5)

2. Визначаємо, чи містить наша граматика непродуктивні символи, а саме знайдемо правило, в правій частині якого розташовано термінальний символ або символ $. {C} – продуктивний символ. Знайдемо правила, в правій частині котрих містяться символи, що вже занесені в список. Якщо такі правила існують, то додаємо в список нетермінальні символи, які розміщені в лівій частині правила:

{C A}

{C A}

{C A I}

Таким чином, у список потрапили всі нетермінальні символи, отже непродуктивних символів немає.

3. Шукаємо недосяжні символи.

Заносимо в список початковий символ граматики {I}.

Шукаємо правило, ліва частина якого вже занесена в список. Додаємо нетермінальні символи правої частини:

{I A}

{I A C}

У список потрапили всі нетермінальні символи, отже, недосяжних символів немає.

4. Дана граматика містить правила, що анулюють, та правила, права частина котрих починається з нетермінального символу, отже, вона не може бути розділеною та слаборозділеною граматикою. Визначимо належність даної граматики до LL(1)-граматики.

Аналізуючи складені нами правила, дійдемо висновку, що ліво-рекурсивних правил немає.

5. Побудуємо функцію ПЕРШ:

ПЕРШ (I і:= A;) = {і}

ПЕРШ (A iC) = {і}

ПЕРШ (C +A) = {+}

ПЕРШ (A (А)C) = {(}

ПЕРШ (C $) = {$}.

6. Побудуємо функцію СЛІД:

Згідно з першим правилом СЛІД(А) ={;}. Згідно з чевертим правилом СЛІД(А) ={)}. Згідно з другим правилом СЛІД(С) = СЛІД (А). Згідно з третім правилом СЛІД(А) = СЛІД (С). Має місце зацикленість. Отже, СЛІД(А) = СЛІД (С) = {;}  {)} = {;, )}.

7. Побудуємо множину ВИБІР. Для всіх правил, крім правила, що анулює, множина ВИБІР дорівнює функції ПЕРШ. Для правила, що анулює, множина ВИБІР дорівнює функції СЛІД.

ВИБІР(I і:= A;) = ПЕРШ (I і:= A;) = {і}

ВИБІР(A iC) = ПЕРШ (A iC) = {і}

ВИБІР(C +A) = ПЕРШ (C +A) ={+}

ВИБІР(A (А)C) = ПЕРШ (A (А)C) = {(}

ВИБІР(C $) = СЛІД(C)  {$} = СЛІД(A)  {$} = {;, )}

Дана граматика є LL(1)-граматикою, тому що для правил, які починаються з однакових нетермінальних символів, множина ВИБІР не містить однакових термінальних символів.

8. Будуємо команди магазинного автомата (розпізнавача):

1)   f(s, i, I) = (s, ;A:=) 7)    f(s, ;, ;) = (s, $)

2)    f(s, i, A) = (s, C) 8)    f(s, ), )) = (s, $)

3)   f(s, +, C) = (s, A) 9)   f(s, :=, :=) = (s, $)

4)   f(s, (, A) = (s, C)А) 10)  f(s, $, h0) = (s, $)

5)   f*( s, ;, C) = (s, $)

6)   f*( s, ), C) = (s, $)

Кількість команд для кожного правила визначається числом елементів множини ВИБІР. Оскільки п’яте правило є правилом, що анулює, то команди магазинного автомата 5 – 6 виконуються без зрушення вхідної головки. Команди 8 – 9 будуються для термінальних символів « ; », « ) » та « := », які розташовані в середині та в кінці правил. Команда 10 використовується для переходу в заключний стан.

9. Розпізнаємо ланцюжок i:=i+(i+i); відповідно до побудованих правил:

(s, i:=i+(i+i);$, h0I) ├ 1

(s, :=i+(i+i);$, h0;A:=) ├ 10

(s, i+(i+i);$, h0;A) ├ 2

(s, +(i+i);$, h0;C) ├ 3

(s, (i+i);$, h0;A) ├ 4

(s, i+i);$, h0;C)A) ├ 2

(s, +i);$, h0;C)С) ├ 3

(s, i);$, h0;C)A) ├ 2

(s, );$, h0;С)C) ├ 6

(s, );$, h0;C)) ├ 9

(s, ;$, h0;C) ├ 5

(s, ;$, h0;) ├ 8

(s, $, h0) ├ 11

(s, $, $)

Ланцюжок розпізнано.

Приклад 2. Побудувати спадний розпізнавач для оператора виведення write або writeln. Оператор може містити в дужках список ідентифікаторів і та коментарів ‘t.

Приклади ланцюжків:

write(‘t’,і);

writeln(‘t’,і, і);

write(і, і).

1. Будуємо правила граматики. Нетермінальним символом А позначимо частину ланцюжка, яка знаходиться після термінальних символів write або writeln. Нетермінальним символом В позначимо список операторів і та коментарів ‘t‘ з роздільником «,». Нетермінальний символ С використаємо для рекурсії.

I write A; (1)

I writeln A; (2)

A (B) (3)

A $ (4)

B tC (5)

B iC (6)

C , B (7)

C $ (8)

2. Дана граматика не містить марних символів та ліворекурсивних правил.

3. Дана граматика містить правила, що анулюють, та правила, права частина яких починається з нетермінального символу, отже, вона не може бути розділеною та слаборозділеною граматикою. Визначимо належність даної граматики до LL(1)-граматики.

ВИБІР(I write A;) = ПЕРШ(I write A;) = {write}

ВИБІР(I writelnA;) = ПЕРШ(I writelnA;) = {writeln}

ВИБІР(A (B)) = ПЕРШ (A (B)) = {(}

ВИБІР(A $) = СЛІД(А) = {$,;}

ВИБІР(B tC) = ПЕРШ (B tC) = {}

ВИБІР(B iC) = ПЕРШ(B iC) = {i}

ВИБІР(C , B) = ПЕРШ(C , B) = {,}

ВИБІР(C $) = СЛІД(С) = СЛІД(В) = {),$}

Дана граматика є LL(1)-граматикою, тому що множина ВИБІР для правил, які починаються з однакових лівих нетермінальних символів, не містить однакових термінальних символів.

4. Будуємо команди розпізнавача:

1)    f (s, write, I) = (s, h0;A)

2)    f (s, writeln, I) = (s, h0;A)

3)    f (s, (, A) = (s, h0)B)

4)    f *(s, ; , A) = (s, $)

5)    f *(s, $, A) = (s, $)

6)    f (s, ‘, B) = (s, Ct)

7)    f (s, i, B) = (s, C)

8)    f (s, , , C) = (s, B)

9)     f *(s, ),C) = (s, $)

10)    f *(s, $, C) = (s, $)

11)    f (s, ; , ;) = (s, $)

12)    f (s, ) , )) = (s, $)

13)    f (s, ’, ‘) = (s, $)

14)    f (s, t, t) = (s, $)

15)    f (s, $, h0) = ($, $)

5. Розпізнаємо заданий ланцюжок:

(s, writeln(‘t’,і, і);$ h0I) ├1

(s, (‘t’,і,і);$ h0;A) ├3

(s, ‘t’,і,і); $ h0;)B) ├6

(s, t’,і,і);$ h0;)C’t) ├14

(s, ’,і,і);$ h0;)C’) ├13

(s, ,і,і);$ h0;)C) ├8

(s, і,і);$ h0;)B) ├7

(s, ,і);$ h0;)C) ├8

(s, і);$, h0;)B) ├7

(s, );$, h0;)C) ├9

(s, );$, h0;) ) ├12

(s, ; $, h0;) ├11

(s, $, h0) ├15

($, $, $)

Ланцюжок розпізнано.

Контрольні запитання

1. Як працює спадний розпізнавач?

2. Яка граматика називається розділеною або простою?

3. Які типи команд розпізнавача можуть бути зіставлені з кожним правилом граматики?

4. Яка граматика називається слаборозділеною?

5. Як будується функція ПЕРШ(µ)?

6. Як будується функція СЛІД(µ)?

7. Як будується множина ВИБІР(B µ)?

8. Які граматики називаються LL(K)–граматиками?

9. Як будуються команди розпізнавача для LL(K)–граматик?

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

СПИСОК ЛІТЕРАТУРИ

  1. О.Е. Акимов. Дискретная математика: логика, группы, графы/ О.Е. Акимов. – М.: Лаборатория Базовых Знаний, 2001.

  2. О.П. Кузнєцов. Дискретная математика для инженера/ О.П Кузнєцов., Д.М. Адельсон-Вельский. – 2-е изд. – М: Энергоатомиздат, 1988. – 488 с.

  3. Ю.М. Коршунов Математические основы кибернетики/ Ю.М. Коршунов: учебное пособ. для втузов. М.: Энергия,1980. 376с.

  4. Ф.А. Новиков Дискретная математика для программистов/ Ф.А. Новиков: учебник. – СПб: Питер, 2000. – 304 с.

  5. Е.П.Липатов. Теория графов и ее применения/ Е.П Липатов. – М.: Знание, 1986. – 32 с.

  6. И.Б. Сироджа. Комбинаторные задачи оптимизации на графах: Учебное пособ. по курсу "Спецглавы математики". – Харьков: ХАИ, 1991. – 84 с.

  7. В.А. Евстигнеев. Применение теории графов в программировании/ В. А. Евстигнеев. – М.: Наука, 1985. – 200 с.

  8. В.Н. Нефедов. Курс дискретной математики/ В.Н Нефедов, В.А. Осипова. – М.: Наука, 1992.

  9. Л.М. Лихтарникова. Математическая логика: Курс лекций. Задачник-практикум и решения/ Л.М. Лихтарникова, Т.Г. Сукачева. – СПб, 1988.

  10. С.Г. Гиндикин. Алгебра логики в задачах/ С.Г. Гиндикин. – М., 1972.

  11. Н. Кристофидес. Теория графов. Алгоритмический поход/ Н. Кристофидес. – М.: Мир, 1978.

  12. Р.Уилсон. Введение в теорию графов/ Р.Уилсон. – М.: Мир, 1977.

  13. Д. Кук . Компьютерная математика/ Д. Кук, Г. Бейз. – М.: Наука, 1990.

  14. Лекции по теории графов/ Емеличев В.А. и др. – М.: Наука, 1990.

  15. О. Оре. Теория графов/ О.Оре. – М.: Наука, 1980.

  16. С.П. Гаврилов Сборник задач по дискретной математике/ С.П. Гаврилов, А.А. Сапоженко. – М.: Наука, 1978.

  17. Лавров И.А. Задачи по теории множеств, математической логике и теории алгоритмов./ И.А. Лавров, Л.Л Максимов. – М.: ФИЗМАТЛИТ, 2001.

  18. В.И. Игошин. Задачи и упражнения по математической логике и теории алгоритмов/ В.И. Игошин. – М.: Издательский центр "Академия", 2007.

  19. Карпов Ю.Г. Теория автоматов/ Ю.Г. Карпов. – СПб.: Питер, 2002.

  20. Гавриленко С.Ю. Основи побудови компіляторів: навч. посіб./ С.Ю. Гавриленко, М.І.Главчев, А.М. Філоненко. – Харків: Курсор, 2005. – 107 с

  21. Системне програмування. Системні сервісні компоненти /Дерев’янко О.С., Межерицький С.Г., Гавриленко С.Ю., Клименко А.Н. – Харків: НТУ "ХПІ", 2009. – 160 с.

  22. И.А. Волкова. Формальные языки и грамматики. Элементы теории трансляции/ И.А. Волкова, Т.В. Руденко. – М.:МГУ, 1999. – 62 с.

  23. А.В. Бржезовский Лексический и синтаксический анализ. Формальные языки и грамматики. – Л.: ЛИАП, 1990. – 62 с.

  24. Альфред Ахо. Компиляторы. Принципы, технологии, инструменты/ Альфред Ахо, Равви Сети, Джеффри Ульман.– М., СПБ., К., 2001. – 768 с.

ЗМІСТ

ВСТУП . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

1. ГРАФИ. ОСНОВНІ ПОНЯТТЯ ТА ВИЗНАЧЕННЯ . . . . . . . . . . . . .5 1.1. Визначення графа. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2. Типи скінченних графів. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.3. Суміжність та інцидентність . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

1.4. Способи задання графів. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10

1.5. Маршрути і підграфи. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12

1.6. Зв'язність і роздільність. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13

1.7. Характеристики графів. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

1.8. Дерева і ліс. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

1.9. Приклади задач, які використовують зважені графи . . . . . . . . . . . . . .19

2. ЛОГІКА. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

2.1. Логіка висловів. Загальні поняття . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33

2.2. Формули алгебри висловів. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

2.3. Розв'язання «логічних» задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2.4. Застосування алгебри логіки в теорії автоматів. Схеми перемикачів 40

2.5. Логіка першого порядку (логіка предикатів). Загальні поняття . . . . 42

2.6. Інтерпретація формул логіки предикатів. . . . . . . . . . . . . . . . . . . . . . . 43

2.7. Передуюча нормальна форма. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

2.8. Логіка реляційна. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46

2.9. Нечітка логіка. Загальні поняття. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47

2.10. Нечітка алгебра. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49

2.11. Нечітке числення. . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51

3. БУЛЕВІ ФУНКЦІЇ. ОСНОВНІ ЗАКОНИ АЛГЕБРИ ЛОГІКИ. . . .58

3.1. Цифрові автомати в схемотехніці та програмуванні. . . . . . . . . . . . . . 58

3.2. Висловлювання, предикати, булеві функції. . . . . . . . . . . . . . . . . . . . . 59

3.3. Схемні реалізації булевих функцій . . . . . . . . . . . . . . . . . . . . . . . . . . . .62

3.4. Найбільш поширені булеві функції. . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

3.5. Основні закони алгебри логіки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65