Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
14
Добавлен:
27.03.2016
Размер:
141.31 Кб
Скачать

Доведено, що будь-який недетермінований КА може бути перетворений в детермінований КА так, щоб їх мови співпадали [3, 7. 26] (говорять, що ці НО еквівалентні).

Окрім перетворення в детермінований КА будь-який КА може бути мінімізований - для нього може бути побудований еквівалентний йому детермінований КА з мінімально можливою кількістю стані. Алгоритми перетворення КА в детермінований КА і мінімізації КА детально описані [3, 7, 26]. Можна написати функцію, що відображає функціонування будь-якого детермінованого КА. Щоб запрограмувати таку функцію, досить мати змінну, яка б відображала поточний стан КА, а переходи з одного стану в інший на основі символів вхідного ланцюжка можуть бути побудовані за допомогою операторів вибору. Робота функції повинна продовжуватися до тих пір, поки не буде досягнутий кінець вхідного ланцюжка. Для обчислення результату функції необхідно після її завершення проаналізувати стан КА Якщо це один з кінцевих станів, то функція виконана успішно і вхідний ланцюжок приймається, якщо ні, то вхідний ланцюжок не належить заданій мові. Проте в загальному випадку завдання лексичного аналізатора ширше, ніж просто перевірка ланцюжка символів лексеми на відповідність її вхідній мові. Він повинен правильно визначити кінець лексеми (про це було сказано вище) і виконати ті або інші дії по запам'ятовуванню розпізнаної лексеми (занесення її в таблицю лексем). Набір виконуваних дій визначається реалізацією компілятора. Звичайно ці дії виконуються відразу ж при виявленні кінця розпізнаваної лексеми.

У вхідному тексті лексеми не обмежені спеціальними символами. Визначення меж лексем - це виділення тих рядків в загальному потоці вхідних символів для яких треба виконувати розпізнавання. Якщо межі лексем завжди визначаються (а вище була прийнята саме така угода), то їх можна визначити по заданих термінальних символах і по символах почала наступної лексеми. Термінальні символи - це пропуски, знаки операцій, символи коментарів, а також роздільники (коми, крапки з комою і ін.). Набір таких термінальних символів може варіюватися залежно від вхідної мови. Важливо відзначити, що знаки операцій самі також є лексемами і необхідно не пропустити їх при розпізнаванні тексту.

Таким чином, алгоритм роботи простого сканера можна описати так:

  • є видимим вхідний потік символів програми на початковій мові до виявлення чергового символу, що обмежує лексему;

  • для вибраної частини вхідного потоку виконується функція розпізнавання лексеми;

  • при успішному розпізнаванні інформація про виділену лексему заноситься в таблицю лексем, і алгоритм повертається до першого етапу;

  • при неуспішному розпізнаванні видається повідомлення про помилку, а подальші дії залежать від реалізації сканера: або його виконання припиняється, або робиться спроба розпізнати наступну лексему (йде повернення до першого етапу алгоритму).

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

30

Соседние файлы в папке Методична література