Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_ТАиФЯ.doc
Скачиваний:
46
Добавлен:
14.03.2016
Размер:
429.06 Кб
Скачать

Задания на лабораторные работы Лабораторная работа 1. «Абстрактный синтез конечных автоматов»

- Опишите заданный язык регулярными выражениями,

- постройте конечный автомат по полученным регулярным выражениям,

- опишите заданный язык автоматной грамматикой.

Варианты описания языков

1) Цепочка символов апроизвольной длины, после которой следует символb;

цепочка символов апроизвольной длины, после которой следует символс;

цепочка символов bпроизвольной длины, после которой следует символа.

2) Цепочка пар символов а bпроизвольной длины, после которой следует символb;

цепочка пар символов bапроизвольной длины, после которой следует символс;

символ с.

3) Произвольная цепочка символов из а,b,с, заканчивающаяся нааbс;

произвольная цепочка символов из а,b,с, заканчивающаяся насbа.

4) Три подряд пришедших символа ав произвольной цепочке изаиb, после которых следуетb;

три подряд пришедших символа bв произвольной цепочке изаиb, после которых следуета;

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

5) Произвольное число символов амежду двумя символамиb;

произвольное число символов bмежду двумя символамис;

три подряд пришедших символа с.

6) Произвольная цепочка символов 0и1, заканчивающаяся тремя символами1;

произвольная цепочка символов 0и1, заканчивающаяся тремя символами0.

7) Произвольная цепочка чередующихся символов 0и1, после которой следует «.»;

цепочка длины, кратной 3, из символов 0между двумя символами «.»;

два символа «.».

8) Цепочка четной длины из 0между двумя1;

цепочка нечетной длины из 1между двумя0;

две 1подряд.

9) 1между двумя цепочками из0,четной длины каждая;

0между двумя цепочками из1,четной длины каждая.

10) Произвольная цепочка из 0и1, заканчивающаяся на101;

произвольная цепочка из 0и1, заканчивающаяся на010.

Лабораторная работа 2. «Программная реализация конечных автоматов»

На известном вам языке программирования разработайте программную реализацию конечного автомата, построенного в лабораторной работе 1.

Лабораторная работа 3. «Средства автоматической генерации лексических анализаторов»

Разработайте программную реализацию автомата с помощью Flexпо регулярным выражениям, написанным в лабораторной работе 1.

2. Автоматы с магазинной памятью и контекстно-свободные языки

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

входная лента

стек

Управляющая

таблица

Рис. 8. Структура автомата с магазинной памятью

Управляющей таблицей в этой структуре названо некое подобие таблицы переходов конечного автомата. Схема на рисунке предполагает, что входные символы, размещенные на входной ленте, поставлены теперь в заголовках столбцов управляющей таблицы, а внутренние состояния – в заголовках ее строк. Текущее внутреннее состояние автомата определяется содержанием вершины стека, а прочая информация в стеке – это данные о предыдущих внутренних состояниях автомата. Ячейки управляющей таблицы содержат несколько больше информации, чем просто внутреннее состояние, в которое должен перейти автомат. Для того, чтобы можно было воспользоваться хранящейся в стеке историей переходов автомата, очевидно, необходимо не только добавлять данные в стек, но и удалять данные из стека, когда часть этой истории становится ненужной в определении дальнейшего поведения автомата. Поэтому содержание управляющей таблицы составляют команды какого-либо изменения содержания стека, перемещения по входной ленте, а также завершения процесса распознавания входной строки с выводом о ее принадлежности или непринадлежности языку, принимаемому автоматом.

Формальные языки, для которых может быть построен распознаватель в виде автомата с магазинной памятью, образуют класс контекстно-свободных языков (КС-языков). Характерной особенностью грамматик языков такого класса является вид их правил:

U::=α,

где UV,α(VT)* (α– произвольная строка из терминалов и/или нетерминалов или пустая строка), а контекстно-свободными эти грамматики и описываемые ими языки называются потому, что, как следует из их правил, в сентенциальной форме символU может быть заменен строкойα(или наоборот) независимо от какого-либо сопровождающего их контекста.

Практический интерес, с точки зрения программной реализации, представляют детерминированные автоматы с магазинной памятью, т.е. такие, с помощью которых задача распознавания (разбора) заданной строки решается за один просмотр этой строки без возвратов и перебора вариантов решения. Во внешнем виде управляющей таблицы детерминированность автомата проявляется в том, что каждая ячейка содержит ровно одну команду. К сожалению, не для любого КС-языка может быть построен именно детерминированный распознаватель. К наиболее распространенным КС-языкам, подлежащим детерминированному анализу, относятся LL(1)- иLR(1)-языки, которые описываются, соответственно,LL(1)- иLR(1)-грамматиками. Коротко используемую аббревиатуру можно прокомментировать так. Первая букваLозначает, что анализатор, использующий грамматику, просматривает анализируемую строку слева направо. Вторая букваLилиRозначает, соответственно, использование грамматики для построения левого или правого разбора (вывода заданной строки с заменой в сентенциальных формах, соответственно, левых или правых нетерминалов). Число 1 в скобках указывает на то, что в разбираемой строке для принятия правильного решения на каждом шаге разбора анализатору достаточно «видеть» один текущий символ.