Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ИНФ.doc
Скачиваний:
24
Добавлен:
06.11.2018
Размер:
1.56 Mб
Скачать

10. Теория конечных автоматов

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

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

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

  • работа конечного автомата отличается высоким быстродействием.

  • моделирование конечного автомата требует фиксированного объема памяти, что упрощает управление памятью.

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

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

Определение: Конечный автомат - это формальная система, которая задается с помощью следующих объектов [10]:

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

  • конечным множеством состояний;

  • функцией переходов, которая каждой паре ( текущее состояние, входной символ) ставит в соответствие новое состояние;

  • начальным состоянием;

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

Пример. Разберем работу контроллера, проверяющего четно или нечетно число единиц в произвольной цепочке, состоящей из нулей и единиц. Допустим, что соответствующий конечный автомат должен « допускать» все цепочки, содержащие нечетное число единиц и « отвергать » цепочки с четным их числом. Назовем этот автомат « контроллером четности ». Считаем, что символы, отличные от 0 и 1 нельзя подавать на вход автомата. Итак, входной алфавит контроллера есть множество {0, 1} . Считаем, что в конкретный момент времени конечный автомат имеет дело лишь с одним входным символом, а информацию о предыдущих символах входной цепочки сохраняет с помощью конечного множества состояний. В качестве множества состояний будем рассматривать множество { чет, нечет }, одно из этих состояний должно быть выбрано в качестве начального. Пусть им будет состояние {чет}, поскольку на первом шаге число прочитанных единиц равно нулю, а нуль есть четное число. При чтении очередного входного символа состояние автомата либо меняется, либо сохраняется прежним причем новое его состояние зависит от входного символа и текущего состояния. Такое изменение состояния называется переходом.

Работа автомата может описываться математически функцией переходов вида ( Sтек., x ) = Sнов. Иначе это можно записать следующим образом:

 ( чет., 0) = чет.  ( чет., 1) = нечет.

 ( нечет., 0) = нечет.  ( нечет., 1) = чет.

Контроллер имеет единственное допускающее состояние НЕЧЕТ, а ЧЕТ есть « отвергающее » состояние. Отразим последовательность переходов автомата при подаче на его вход цепочки 1101.

ЧЕТ  НЕЧЕТ  ЧЕТ ЧЕТ НЕЧЕТ

Таблица переходов такого автомата имеет вид:

0

1

чет

чет

нечет

нечет

нечет

чет

Определение. Конечный автомат - это формальная система

S = { A, Q, , ,V },

объекты которой следующие:

  • A - конечное множество входных символов (множество

терминалов);

  • Q - конечное множество внутренних состояний автомата

(множество нетерминалов);

  • V - конечное множество выходных символов (выходной алфавит);

  •  - функция переходов, для которой характерно A  Q  Q;

  •  - функция выходов, определяющая отображение вида :

A  Q  V.