Зміст:
Лексичний аналіз в мовних процесорах
Призначення: перетворення вхідного тексту програми з формату зовнішнього представлення в машинно-орієнтований формат — послідовність лексем.
Нагадаємо, що лексема — це ланцюжок літер елементарний об’єкт програми, що несе певний семантичний зміст. В подальшому кожну лексему будемо представляти як пару
В більшості мов програмування для визначення класів лексем достатньо скінчених автоматів.
Скінчені автомати
Недетермінований скінчений автомат — це п’ятірка де
-
— скінчена множина станів автомата;
-
— скінчена множина вхідних символів (вхідний алфавіт);
-
— початковий стан автомата;
-
— відображення множини в множину . Відображення як правило називають функцією переходів;
-
— множина заключних станів. Елементи з називають заключними або фінальними станами.
Якщо — скінчений автомат, то пара називається конфігурацією автомата . Оскільки скінчений автомат — це дискретний пристрій, він працює по тактам. Такт скінченого автомата задається бінарним відношенням , яке визначається на конфігураціях:
Мова яку розпізнає скінченний автомат
Скінчений автомат розпізнає (допускає) ланцюжок , якщо
де — рефлексивно-транзитивне замикання бінарного відношення .
Mова, яку допускає автомат (розпізнає автомат )
Способи визначення функції переходів
На практиці, при визначенні скінченого автомата , використовують декілька способів визначення функції , наприклад:
-
це табличне визначення ;
-
діаграма проходів скінченого автомата.
Табличне визначення функції — це таблиця де тобто
Діаграма переходів скінченого автомата — це невпорядкований граф , де — множина вершин графа, а — множина орієнтованих дуг, причому з вершини у вершину веде дуга позначена , коли . На діаграмі переходів скінченого автомата це позначається так:
В подальшому, на діаграмі переходів скінченого автомата елементи з множини заключних станів будемо позначити так:
Приклад. Побудуємо діаграму переходів скінченого автомата , який розпізнає множину цілочислових констант мови С.
Зауваження. Цей автомат неповний, на два нижні праві вузли потрібно довісити “UL”-частину яка висить на вузлі “1..9”.
З побудованого прикладу видно, що приведений автомат не повністю визначений.
Детерміновані скінченні автомати
Скінчений автомат називається детермінованим, якщо містить не більше одного стану для любого та .
Теорема. Для довільного недетермінованого скінченого автомата можна побудувати еквівалентний йому детермінований скінчений автомат , такий що
Доведення: Нехай — недетермінований скінчений автомат
Детермінований автомат побудуємо таким чином:
-
, тобто імена станів автомата — це підмножини множини .
-
.
-
складається з усіх таких підмножин , що .
-
.
Доводимо індукцією по , що , тоді і тільки тоді, коли .
Зокрема, , для деякого , тоді і тільки тоді, коли .
Таким чином, .
Побудований нами автомат має дві властивості: він детермінований та повністю визначений. До того ж кількість станів цього автомата .
Контрольні запитання
-
У чому призначення лексичного аналізу?
-
Що таке недетермінований скінчений автомат?
-
Яку мову розпізнає скінченний автомат?
-
Які два способи визначення функції переходів ви знаєте?
-
Спробуйте “зламати” вищенаведений автомат для цілочислових констант мови C (зверніть увагу на зауваження).
-
Що таке детермінований скінчений автомат?
-
Сформулюйте і доведіть теорему про детермінізацію скінченного автомата.
-
Нехай функція переходів не однозначна, але у той же час набуває не багато різних значень на одному наборі аргументів, наприклад не більше двох, тобто для довільних і . Чи можна тоді отримати кращу оцінку зверху на кількість станів еквівалентного детермінованого автомату ніж ?
(традиційні відповіді можна переглянути у коментарях у вихідному коді цієї сторінки)