Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методы трансляции.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.99 Mб
Скачать

Глава 3. Регулярные грамматики и языки.

Параграф 1. Описание регулярных языков.

Пункт 1. Регулярные выражения.

Регулярная грамматика – это КС-грамматика с правилами вида и , где и , причем и могут быть одинаковыми нетерминалами. Допускается также правило при условии, что не появляется в правых частях правил.

В теории формальных языков рассматриваются праволинейные и леволинейные грамматики, которые отличаются только положением (справа и слева) нетерминала в правой части правила. Отличие их от определенной нами регулярной грамматики в том, что , то есть может быть строкой терминалов, в том числе и пустой.

Язык называется регулярным, если он может быть порожден регулярной грамматикой.

Справедливы следующие утверждения: Если и - регулярные языки, то замыкание Клини , сцепление и объединение - тоже регулярные языки. Это свойство замкнутости регулярных языков относительно указанных операций.

Метод проверки регулярности заданного языка.

В основе метода лежит лемма о разрастании языка, смысл которой в следующем:

В достаточно длинной строке регулярного языка всегда можно найти непустую подстроку, повторение которой произвольное количество раз порождает новые строки того же языка.

Также удобным средством формального определения регулярных языков (множеств) являются регулярные выражения.

Регулярные выражения над некоторым алфавитом определяются следующим образом:

1) - регулярное выражение (обозначает пустое регулярное множество );

2) - регулярное выражение (обозначает регулярное множество , состоящее из пустой строки);

3) - регулярное выражение (обозначает множество );

4) если и - регулярные выражения, обозначающие множества и , то посредством операций над выражениями определяются выражения следующих трех видов:

а) или - регулярное выражение (обозначает объединение ), где символ | или + называют операцией или (альтернативы);

б) или - регулярное выражение (обозначает множество ), где символ «точка» называют операцией сцепления (конкатенации);

в) - регулярное выражение (обозначает множество ), где символ «*» называют операцией итерации.

Перечислим операции в порядке убывания их старшинства: итерация, сцепление, или. Для изменения порядка операций используют круглые скобки.

Соответствие между регулярными языками и регулярными выражениями устанавливает теорема Клини: каждому регулярному языку из соответствует регулярное выражение над множеством .

Пункт 2. Свойства регулярных выражений.

Два регулярных выражения равны, если они определяют одно и то же множество.

Рассмотрим основные алгебраические свойства регулярных выражений:

№ п/п

Свойство

№ п/п

Свойство

1

10

2

11

3

12

4

13

5

14

6

15

7

16

8

17

9

18

Параграф 2. Конечный автомат.

Пункт 1. Определение конечного автомата.

Конечный автомат (КА) – это простейший распознаватель без вспомогательной памяти. Его входная головка читает символы входной ленты и перемещается на одну ячейку вправо на каждом шаге работы автомата. КА имеет конечное множество управляющих состояний, среди которых выделены начальное состояние и заключительные состояния.

КА создается для конкретного регулярного языка. Закончив просмотр входной строки, КА должен выдать заключение о том, принадлежит или не принадлежит эта строка соответствующему языку. КА является эффективным способом определения регулярных языков.

Конечный автомат определяется пятеркой объектов:

, где

- конечное множество состояний автомата;

- конечное множество допустимых входных символов;

- функция переходов: отображение множества в множество , то есть ,где - множество всех подмножеств множества (степень множества );

- начальное состояние автомата, ;

- множество заключительных состояний, .

Функция переходов служит для определения очередного состояния КА по текущему состоянию и текущему входному символу :

.

Из определения функции переходов следует, что она неоднозначна, так как текущей паре соответствует множество очередных состояний КА. КА с такой функцией переходов является недетерминированным (НКА). Если в качестве функции переходов использовать отображение , то соответствующий КА будет детерминированным (ДКА). ДКА является частным случаем НКА.

Пара , где - текущий остаток входной строки, называется конфигурацией автомата . Конфигурация , где - полная входная строка, называется начальной, а пара , где , называется заключительной конфигурацией.

Шаг автомата можно представить отношением |- на конфигурациях. Тогда, если одним из значений функции переходов является , то можно писать для всех .

Эта запись говорит о том, что если автомат находится в состоянии и входная головка обозревает входной символ , то автомат может делать шаг, за который он переходит в состояние и сдвигает головку на одну ячейку вправо.

Кроме того, также будем рассматривать транзитивное замыкание и рефлексивно-транзитивное замыкание отношения .

Тогда справедливо утверждение, что автомат допускает (принимает) строку , если существует путь по конфигурациям для некоторого . Следовательно, язык , принимаемый конечным автоматом , формально можно определить так:

Параграф 3. Преобразование конечных автоматов.

Пункт 1. Задачи преобразования.

На практике более предпочтительным является детерминированный КА. Также желательно, чтобы КА не содержал лишних состояний. Кроме того, переход к конечным автоматам с указанными свойствами не должен приводить к изменению языка, принимаемого КА. В связи с этим возникают две основные задачи эквивалентного преобразования КА:

    1. преобразование недетерминированного конечного автомата в детерминированный конечный автомат;

    2. минимизация КА.

Разрешимость таких преобразований формулируется следующими утверждениями:

  1. для любого НКА существует ДКА, принимающий тот же регулярный язык.

  2. каждое регулярное множество распознается единственным для данного множества ДКА с минимальным числом состояний.

Конечный автомат может содержать лишние состояния двух сортов: недостижимые состояния – состояния, к которым нет пути из начального состояния, и эквивалентные состояния – состояния, дублирующие друг друга.

Конечный автомат, не содержащий недостижимых и эквивалентных состояний, называют приведенным, или минимальным КА. Минимальный КА обладает наименьшим из возможных количеством состояний. Два состояния и КА называются эквивалентными, если, начиная с состояния или , КА допускает одни и те же строки. Существуют условия, которые позволяют выявить эквивалентные состояния. По условию подобия все состояния первоначально разбиваются на 2 группы: заключительные и незаключительные. Последующие разбиения выполняются по условию преемственности, по которому все входные символы, принятые в эквивалентных состояниях и , переводят КА в эквивалентные состояния, то есть преемники и должны быть эквивалентны. После завершения деления на группы эквивалентности они фиксируются как состояния нового, минимального КА. В заключение строится функция переходов минимального КА по функции переходов исходного КА.

Пункт 2. Устранение недостижимых состояний.

Рассмотрим алгоритм устранения недостижимых состояний. Алгоритм состоит в следующем.

Вход: КА .

Выход: КА без недостижимых состояний.

  1. Поместить начальное состояние КА в список достижимых состояний .

  2. Для новых элементов списка достижимых состояний пополнить список группой их состояний-преемников, отсутствующих в списке.

  3. Повторять п.2, пока список достижимых состояний не перестанет меняться.

  4. Исключить из множества состояний КА все состояния, отсутствующие в списке достижимых состояний: .

  5. Исключить недостижимые заключительные состояния и функции переходов, содержащие недостижимые состояния: .

Пункт 3. Объединение эквивалентных состояний.

Рассмотрим алгоритм объединения эквивалентных состояний. Если исходный КА освобожден от недостижимых состояний, то алгоритм дает минимальный КА.

Вход: КА без недостижимых состояний.

Выход: Минимальный КА .

  1. Разбить множество на две группы неэквивалентных состояний по условию подобия (заключительные и незаключительные).

  2. Разбить очередную группу состояний на группы неэквивалентных состояний по условию преемственности (для каждого входного символа).

  3. Выполнять п.2, пока остается хотя бы одна группа состояний, которую можно разбить.

  4. Обозначить очередную оставшуюся неразбитой группу состояний (она содержит только эквивалентные состояния) и включить обозначение в таблицу новых обозначений состояний.

  5. Выполнять п.4, пока остается хотя бы одна необозначенная группа.

  6. Определить эквивалентный КА в новых обозначениях.

Порядок разбиения на группы не влияет на правильность решения.

Пункт 4. Построение детерминированного КА.

Рассмотрим алгоритм преобразования недетерминированного КА в эквивалентный детерминированный. Оба КА принимают один и тот же язык.

Вход: Недетерминированный КА .

Выход: Детерминированный КА .

  1. Пометить первый столбец таблицы переходов ДКА начальным состоянием (множеством начальных состояний) НКА .

  2. По множеству состояний , помечающему столбец таблицы переходов , в котором позиции еще не заполнены, определить те состояния , которые могут быть достигнуты из при каждом входном символе . Поместить каждое найденное множество (в том числе ) в соответствующие позиции столбца таблицы переходов . Формально: .

  3. Для каждого нового множества (кроме ), записанного в позиции столбца , проверить наличие столбца в таблице переходов КА . Если столбца нет, добавить его.

  4. Если в таблице переходов КА есть столбец с незаполненными позициями, перейти к пункту 2.

  5. В множество КА включить каждое множество, помечающее столбец таблицы переходов и содержащее КА .

  6. Составить таблицу обозначений множеств состояний и определить КА в новых обозначениях.

Рассмотренный алгоритм обеспечивает отсутствие недостижимых состояний получаемого ДКА, но не гарантирует его минимальности.

Параграф 4. Взаимосвязь способов определения регулярных языков.

Пункт 1. Построение КА по регулярному выражению.

Конечный автомат можно получить из регулярного выражения путем построения функции переходов или диаграммы состояний автомата. Узлы диаграммы помечают произвольными уникальными именами, например и т.д. или и т.д. Дуги диаграммы именуют символами алфавита языка.