- •Визначення меж лексем
- •1 Паралельний метод роботи лексичного аналізатора і синтаксичного зовсім не означає, що вони повинні будуть виконуватися як паралельні взаємодіючі процеси. Такий варіант можливий, але не обов'язковий.
- •Виконання дій, пов'язаних з лексемами
- •Автоматні граматики
- •Перетворення регулярної граматики до автоматному увазі
- •Приклад перетворення регулярної граматики до автоматному увазі
- •Кінцеві автомати Визначення кінцевого автомата
- •Граф переходів кінцевого автомата
- •3.3 Є недетерміновані ка.
- •Перетворення кінцевого автомата до детермінованому увазі
- •Регулярні вирази. Властивості регулярних виразів
- •Рівняння з регулярними коефіцієнтами
- •Властивості регулярних мов Основні властивості регулярних мов
- •Проблеми, розв'язні для регулярних мов
- •Лемма про розростанні для регулярних мов
Автоматні граматики
Серед усіх регулярних граматик можна виділити окремий клас - автомат ¬ ні граматики. Вони також можуть бути леволінейнимі і праволінейнимі. Леволінейние автоматні граматики G (VT, VN, P, S), V - VNuVT можуть мати правила двох видів: А Bt або А -> t, де A. BeVN, teVT.
Праволінейние автоматні граматики G (VT, VN, P, S), V = VNuVT можуть мати правила двох видів: А tB або А t, де A. BeVN, teVT.Різниця між автоматними граматиками і звичайними регулярними грама ¬ тиками полягає в наступному: там, де в правилах звичайних регулярних граматик може бути присутнім ланцюжок термінальних символів, в автоматних граматиках може бути присутнім тільки один термінальний символ.Будь автоматна граматика є регулярною, але не навпаки - не всяка регу ¬ лярная граматика є автоматною.
Доведено, що класи звичайних регулярних граматик і автоматних граматик майже еквівалентні.Це означає, що для будь-якої мови, який заданий регуляр ¬ ної граматикою, можна побудувати автоматну граматику, визначальну майже еквівалентний мова (зворотне твердження очевидно).Щоб класи автоматних і регулярних граматик були повністю еквівалент ¬ лентни, в автоматних граматиках дозволяється додаткове правило виду S-> \, де S - цільовий символ граматики. При цьому символ S не повинен встре ¬ чаться в правих частинах інших правил граматики.Тоді мова, заданий авто ¬ ароматних граматикою G, може включати в себе порожню ланцюжок: XeL (G). Автоматні граматики, так само як звичайні леволінейние і праволінейние граматики, задають регулярні мови.Оскільки реально використовувані мови, як правило, не містять порожню ланцюжок символів, різниця на порожню ланцюжок між цими двома типами граматик значення не має, і правила виду S -> ■ до далі розглядатися не будуть.
Існує алгоритм, який дозволяє перетворити довільну регуляр ¬ ву граматику до автоматному увазі - тобто побудувати еквівалентну їй автоматну граматику. Цей алгоритм розглянуто нижче.Він є исклю ¬ ве корисним, оскільки дозволяє істотно полегшити побудову розпізнавачів для регулярних граматик.
Перетворення регулярної граматики до автоматному увазі
Є регулярна граматика G (VT, VN, P, S), необхідно перетворити її в майже еквівалентну автоматну граматику G '(VT, VN', P ', S').Як вже було сказано вище, будемо розглядати леволінейние граматики (для праволі-лінійних граматик можна легко побудувати аналогічний алгоритм). Алгоритм перетворення простий і полягає він в такій послідовник ¬ ності дій:
Крок 1.Всі нетермінальні символи з безлічі VN граматики G перено ¬ сятся у безліч VN 'граматики G'.
Крок 2. Необхідно переглядати всі безліч правил Р граматики G.Якщо зустрічаються правила виду А -> ■ Ва1 (A, BeVN, ateVT або виду А -> ■ АІ AeVN, aieVT, то вони переносяться в безліч Р 'правил граматики G' без змін.
Якщо зустрічаються правила виду А Ва ^ .-. а,,, n> 1, A. BeVN, Vn> i> 0: VT,
то в безліч нетермінальних символів VN 'граматики G' додаються сім-
воли АЬА2 Ап_!, а в безліч правил Р 'граматики З додаються правила:
А Ап.! Ап An_! -> ■ Ап_2ап_!
А-2 - ^ А.
Ai - »Ва (
Якщо зустрічаються правила виду А - »aia2 ...ani n> 1, AeVN, Vn> i> 0: a, eVT, то в безліч нетермінальних символів VN 'граматики G' додаються симво ¬ ли А1, А2 ,..., АП_1, а в безліч правил Р 'граматики З додаються правила:
А Ап_! Ап Ап_! - »Ап_2ап_!
А-2 - ^ A.j3-2
A, -> at
Якщо зустрічаються правила виду А - »В або виду А X, то вони переносяться в безліч правил Р 'граматики С без змін.
Крок 3. Проглядається безліч правил Р 'граматики С. У ньому шукаються пра ¬ вила виду А - »В або виду А -» X.
Якщо знаходиться правило виду А - »В, то проглядається безліч правил Р 'граматики С.Якщо в ньому присутні правила виду В С, В Са, В а чи В -> ■ X, то в нього додаються правила виду А С, А Са, А -> • а і А -> • X соот ¬ повідно, VA, B, Ce VN ', Vae VT' (при цьому слід враховувати, що в Граммати ¬ ке не повинно бути співпадаючих правил,і якщо якесь правило вже присутні ¬ ет в граматиці G ',то повторно його туди додавати не слід).Правило А -> ■ У видаляється з безлічі правил Р '.
Якщо знаходиться правило виду А X (і символ А не є цільовим симво ¬ лом S), то проглядається безліч правил Р 'граматики G'.Якщо в ньому присутні правила виду В А чи В -> ■ Аа, то в нього додаються правила виду В-> 1іВ-^ а відповідно, VA, BeVN ', VaeVT (при цьому слід вчи ¬ ють, що в граматиці не повинно бути співпадаючих правил, і якщо якесь правило вже присутня у граматиці G ',то повторно його туди додавати не слід).Правило А -> ■ X видаляється з безлічі правил Р '. Крок 4. Якщо на кроці 3 було знайдено хоча б одне правило виду А - »В або А -> ■ X зо безлічі правил Р 'граматики G', то треба повторити крок 3, інакше перейти до кроку 5.
Крок 5. Цільовим символом S 'граматики G' стає символ S.Кроки 3 і 4 алгоритму, в принципі, можна не виконувати, якщо граматика не содер ¬ жит правил виду А В (такі правила називаються ланцюговими) або виду А - »X такі правила називаються ^-правилами). Реальні регулярні граматики зви ¬ но не містять правил такого виду.Тоді алгоритм перетворення граматики до автоматному увазі істотно спрощується. Крім того, ці правила можна було б усунути попередньо з допомогою спеціальних алгоритмів перетворення (ці алгоритми розглянуті далі, в розділі 4 «Синтаксичні аналізатори»).