Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все_пособие_редактир.doc
Скачиваний:
175
Добавлен:
31.10.2018
Размер:
2.51 Mб
Скачать
      1. Построение конечного автомата по регулярной грамматике

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

Если задана регулярная грамматика G = <N, T, P, S>, правила вывода которой имеют вид: А –> аВ или А–>а, где А, В ∈ N, а ∈ Т. Тогда конечный автомат А= <V, Q, δ, q0 , F>, задающий тот же самый язык, что порождает регулярная грамматика G , строится следующим образом:

    1. V=T;

    2. Q=N U {Z}, Z- заключительное состояние КА, не принадлежит N и T;

    3. q0= {S};

    4. F={Z}

    5. Отображение δ строится по правилам:

- каждому правилу подстановки в грамматике G вида А –> аВ ставится в соответствие команда (А,а) –> В;

- каждому правилу подстановки в грамматике G вида А –> а ставится в соответствие команда (А,а) –> Z.

Допустим обратный переход: конечному автомату А= <V, Q, δ, q0 , F>можно поставить в соответствие регулярную грамматику G = <N, T, P, S>, у которой:

  1. T=V;

  2. N=Q;

  3. S={ q0};

  4. Множество правил подстановки Р строится таким образом: каждой команде автомата (qi, a) –> qk ставится в соответствие правило подстановки qi –> а qk , если qk ∈Q, либо qi –> а , если qk ∈Z, где Z – заключительное состояние.

Вопросы

1. Что называется регулярным выражением?

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

3. Что такое регулярное множество?

4. Как можно доказать эквивалентность двух регулярных выражений?

5. Как можно доказать эквивалентность двух языков?

4. Формальные языки и грамматики

4.1 Цепочки символов. Операции над цепочками символов

Цепочка символов – это произвольная последовательность символов, записанных один за другим. Понятие символа (или буквы) является базовым в теории формальных языков.

Цепочки символов обозначаются греческими буквами: ,,.

Цепочка – это последовательность, в которую могут входить любые допустимые символы. Цепочка – это необязательно некоторая осмысленная последовательность символов. Последовательность «аввв..аагрьь ,.. лл» - тоже пример цепочки символов.

Для цепочки символов важен состав и количество символов в ней, а также порядок символов в цепочке. Один и тот же символ может произвольное число раз входить в цепочку, Поэтому цепочки «а» и «аа », а также « аб » и «ба» - это различные цепочки символов. Цепочки символов и равны (совпадают ),=, если они имеют один и тот же состав символов, одно и тоже их количество и одинаковый порядок следования символов в цепочке.

Количество символов в цепочке называется длиной цепочки. Длина цепочки символа  обозначается как |. Очевидно, что если =, то и .

Основной операцией над цепочками символов является операция конкатенации (объединения или сложения) цепочек.

Конкатенация (сложение, объединение) двух цепочек символов - дописывание второй цепочки в конец первой. Конкатенация цепочек  и  обозначается как. Выполнив конкатенацию цепочек просто: например, если= «аб», а= «вг», то  = «абвг».

Так как в цепочке важен порядок символов, то операция конкатенации не обладает свойством коммутативности, то есть в общем случае  и  такие, что ≠ Также очевидно, что конкатенация обладает свойством ассоциативности, то есть ()).

Еще одна операция - итерация (повторение) цепочки n раз, где n N, n>0-это конкатенация цепочки самой с собой n раз. Итерация цепочки n раз обозначается какⁿ . Для операции повторения справедливы следующие равенства ∀ : ¹ =, ²=, ³=, …и т.д.

Среди всех цепочек символов выделяется одна особенная - пустая цепочка. Пустая цепочка символов – это цепочка, не содержащая ни одного символа. Пустую цепочку обозначают греческой буквой  (в литературе ее иногда обозначают латинской буквой e или греческой ε ).

Для пустой цепочки справедливы следующие равенства:

 ││=0;

  1. ∀: ==;

  2. 1;

4. ∀ n ≥ 0: ⁿ;

5. ∀ :º=.