knu/csc/appl-math/c3s2/sys-prog

синтез і аналіз мовних процесорів

Зміст:

Лексичний аналіз в мовних процесорах

Призначення: перетворення вхідного тексту програми з формату зовнішнього представлення в машинно-орієнтований формат — послідовність лексем.

Нагадаємо, що лексема — це ланцюжок літер елементарний об’єкт програми, що несе певний семантичний зміст. В подальшому кожну лексему будемо представляти як пару

В більшості мов програмування для визначення класів лексем достатньо скінчених автоматів.

Скінчені автомати

Недетермінований скінчений автомат — це п’ятірка де

Якщо — скінчений автомат, то пара називається конфігурацією автомата . Оскільки скінчений автомат — це дискретний пристрій, він працює по тактам. Такт скінченого автомата задається бінарним відношенням , яке визначається на конфігураціях:

Мова яку розпізнає скінченний автомат

Скінчений автомат розпізнає (допускає) ланцюжок , якщо

де — рефлексивно-транзитивне замикання бінарного відношення .

Mова, яку допускає автомат (розпізнає автомат )

Способи визначення функції переходів

На практиці, при визначенні скінченого автомата , використовують декілька способів визначення функції , наприклад:

Табличне визначення функції — це таблиця де тобто

Діаграма переходів скінченого автомата — це невпорядкований граф , де — множина вершин графа, а — множина орієнтованих дуг, причому з вершини у вершину веде дуга позначена , коли . На діаграмі переходів скінченого автомата це позначається так:

img-1

В подальшому, на діаграмі переходів скінченого автомата елементи з множини заключних станів будемо позначити так:

img-2

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

img-3

Зауваження. Цей автомат неповний, на два нижні праві вузли потрібно довісити “UL”-частину яка висить на вузлі “1..9”.

З побудованого прикладу видно, що приведений автомат не повністю визначений.

Детерміновані скінченні автомати

Скінчений автомат називається детермінованим, якщо містить не більше одного стану для любого та .

Теорема. Для довільного недетермінованого скінченого автомата можна побудувати еквівалентний йому детермінований скінчений автомат , такий що

Доведення: Нехай — недетермінований скінчений автомат

Детермінований автомат побудуємо таким чином:

  1. , тобто імена станів автомата — це підмножини множини .

  2. .

  3. складається з усіх таких підмножин , що .

  4. .

Доводимо індукцією по , що , тоді і тільки тоді, коли .

Зокрема, , для деякого , тоді і тільки тоді, коли .

Таким чином, .

Побудований нами автомат має дві властивості: він детермінований та повністю визначений. До того ж кількість станів цього автомата .

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

  1. У чому призначення лексичного аналізу?

  2. Що таке недетермінований скінчений автомат?

  3. Яку мову розпізнає скінченний автомат?

  4. Які два способи визначення функції переходів ви знаєте?

  5. Спробуйте “зламати” вищенаведений автомат для цілочислових констант мови C (зверніть увагу на зауваження).

  6. Що таке детермінований скінчений автомат?

  7. Сформулюйте і доведіть теорему про детермінізацію скінченного автомата.

  8. Нехай функція переходів не однозначна, але у той же час набуває не багато різних значень на одному наборі аргументів, наприклад не більше двох, тобто для довільних і . Чи можна тоді отримати кращу оцінку зверху на кількість станів еквівалентного детермінованого автомату ніж ?

(традиційні відповіді можна переглянути у коментарях у вихідному коді цієї сторінки)

Назад до лекцій

Назад на головну