Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОГРАММНАЯ ИНЖЕНЕРИЯ.docx
Скачиваний:
115
Добавлен:
09.09.2018
Размер:
2.83 Mб
Скачать

2.7 Построение ка для языка, заданного регулярным выражением.

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

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

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

В начале работы автомат находится в начальном состоянии q0. Работа

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

входной цепочки. V+ α β → ∈ λ Ɐ

Мгновенным описанием (МО), или конфигурацией автомата M называется пара (q, w), где q ∈ Q – состояние УУ, w ∈ V* – неиспользованная часть входной цепочки (т.е. символ, обозреваемый считывающей головкой и все символы справа от него). Тогда пара (q0, w) называется начальной конфигурацией для цепочки w, а конфигурация (q, λ) является заключительной, или допускающей,

если q ∈ F (т.е. q – одно из заключительных состояний автомата).

Цепочка w допускается автоматом M, если (q0,w)├─*(q, λ) для некоторого q ∈ F, т.е. получив на вход эту цепочку, автомат из начальной конфигурации может перейти в заключительную.

δ (q,a) = {p} Вариант 1

V

a

Q

q

p

Вариант 2

Пример.

M ( {q0}, {0,1}, δ, q0, {q0} )

S → 0S | 1S | λ

Например, цепочку из двух символов (q0, 10)├ (q0, 0)├ (q0, λ) . Конфигурация является заключительной, цепочка прочитана. КА её допустит

(q0, 20)├ stop, КА символа (2) такого не знает, перехода не совершит, цепочку не прочитает

10 ∈ L (m)

20 ∉ L (m), L(m) – язык задаваемого автомата

2.8 Преобразование грамматик и цель преобразований.

В общем случае для КС-грамматик невозможно проверить их однозначность и эквивалентность. Но для конкретных случаев бывает можно и нужно привести заданную грамматику к некоторому определённому виду таким образом, чтобы получить грамматику,

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

1) упрощение правил грамматики;

2) облегчение создания распознавателя языка.

В теории языков программирования основой является создание компилятора для языка,

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

V+ α β → ∈ λ Ɐ

Приведёнными (или грамматиками в каноническом виде) называются

грамматики, которые не содержат недостижимых и бесплодных символов,

циклов и пустых правил ( λ -правил).

Рассмотрим некоторую грамматику G(VT,VN,P,S) и дадим необходимые определения.

Нетерминальный символ A∈VN называется бесплодным (или бесполезным), если из него нельзя вывести ни одной цепочки терминальных символов, т.е. { α | A →* α, α ∈ VT*} = ø

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

Символ x ∈ (VT∪VN) называется недостижимым, если он не

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

λ -правилами, или правилами с пустой цепочкой, называются все правила грамматики вида A→ λ, A∈VN. Грамматика G называется грамматикой без λ -правил, если в ней нет правил вида (A→ λ), A∈VN, A ≠ S, и существует только одно правило (S→ λ) ∈P, если λ ∈L(G) и при этом S не встречается в правой части ни одного правила грамматики G. Для упрощения процесса построения распознавателя цепочек языка L(G) любую грамматику целесообразно привести к виду без λ -правил.

Циклом в грамматике G называется вывод вида A→*A, A∈VN.

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

Таким образом, для того чтобы преобразовать произвольную КС-грамматику к каноническому виду, необходимо выполнить следующие действия (причём именно в том порядке, каком они перечислены):

  • удалить все бесплодные символы;

  • удалить все недостижимые символы;

  • удалить λ -правила;

  • удалить цепные правила.