Войти на сайт

или
Регистрация

Навигация


2.4 Автоматы и регулярные языки

Для автомата можно определить язык (множество слов) в алфавите Σ, который он представляет – так называется множество слов, при вводе которых автомат переходит из начального состояния в одно из состояний множества F.

Теорема Клини гласит, что класс языков, представимых конечными автоматами, совпадает с классом регулярных языков. Кроме того, этот класс совпадает с классом языков, задаваемых регулярными грамматиками.

 


3. Функциональные модели и блок-схемы решения задачи

 

Функциональные модели и блок-схемы решения задачи представлены на рисунках 4 – 7.

Условные обозначения:

·          cur – текущее слово;

·          char – текущий символ;

·          text – входное слово;

·          funct – функция смены состояний;

·          start – начальное состояние;

·          end – список конечных состояний.

Рисунок 4 – Функциональная модель решения задачи для функции KA


Рисунок 5 – Функциональная модель решения задачи для функции function1


Рисунок 6 – Функциональная модель решения задачи для функции function2


Рисунок 7 – Функциональная модель решения задачи для функции isOneof

 


4. Программная реализация решения задачи

 

; Тестовый конечный автомат – функция, преобразуюцая состояние

; Аргументы: 'cur' – текущее состояние

; 'char' – текущий символ

; Возвращаемое значение: новое состояние

(defun function1 (cur char)

(cond

((and (eq char `a) (eq cur `qb)) `q1)

((and (eq char `b) (eq cur `qb)) `q2)

((and (eq char `c) (eq cur `q1)) `qe)

((and (eq char `c) (eq cur `q2)) `qe)

(t `q0)

)

)

; Тестовый конечный автомат – функция, преобразуюцая состояние

; Аргументы: 'cur' – текущее состояние

; 'char' – текущий символ

; Возвращаемое значение: новое состояние

(defun function2 (cur char)

(cond

((and (eq char `a) (eq cur `qb)) `q1)

((and (eq char `b) (eq cur `qb)) `q2)

((and (eq char `c) (eq cur `qb)) `q3)

((and (eq char `a) (eq cur `q1)) `q1)

((and (eq char `b) (eq cur `q2)) `q2)

((and (eq char `c) (eq cur `q3)) `q3)

(T nil)

)

)

; Функция проверки, является ли 'char' элементом 'set' (необходима для остановки)

; Алгоритм проверки:

; 1. 'set' пусто => нет

; 2. 'char' совпадает с головой 'set' => да

; 3. 'char' является злементом хвоста 'set' => да

; 4. 'set' – не список => нет

(defun isOneOf (set char)

(cond

((eq set nil) nil)

((eq char (car set)) T)

((isOneOf (cdr set) char) T)

(T nil)

)

)

; Непосредственно конечный автомат

; Аргументы: 'begin' – начальное состояние

; 'end' – список конечных состояний

; 'move' – функция смены состояний

; 'text' – входное слово

; Возвращаемое значение: 'Correct' – входное слово допустимо

; 'Incorrect' – входное слово недопустимо

; Алгоритм:

; 1. Лента пуста и

; а. текущее состояние финальное => слово допустимо

;  б. текущее состояние не финальное => слово недопустимо

; 2. Текущий символ допустим и лента не пуста => движемся дальше

(defun KA (begin end move text)

(cond

((eq text nil)

(cond

((isOneOf end begin) `Correct)

(T `Incorrect)

)

)

(T (KA (funcall move begin (car text)) end move (cdr text)))

)

)

(setq input_stream (open «d:\\text.txt»:direction:input))

; входное слово

(setq text (read input_stream))

; функция смены состояний

(setq funct (read input_stream))

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

(setq start (read input_stream))

; список конечных состояний

(setq end (read input_stream))

(close input_stream)

(setq output_stream (open «d:\\KA.txt»:direction:output))

(print (KA start end funct text) output_stream)

(terpri output_stream)

(close output_stream)


5. Пример выполнения программы

Пример 1

Рисунок 8 – Входные данные

Рисунок 9 – Выходные данные

Пример 2

Рисунок 10 – Входные данные

Рисунок 11 – Выходные данные


Пример 3.

Рисунок 12 – Входные данные

Рисунок 13 – Выходные данные


Заключение

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

Часто понятие состояний и машин состояний используется для спецификации программ. Так, при проектировании программного обеспечения с помощью UML для описания поведения объектов используются диаграммы состояний. Кроме того, явное выделение состояний используется в описании сетевых протоколов.

Итогом работы можно считать созданную функциональную модель реализации конечных автоматов. Созданная функциональная модель и ее программная реализация могут служить органической частью решения более сложных задач.


Список использованных источников и литературы

1.    Бронштейн, И.Н. Справочник по математике для инженеров и учащихся втузов [Текст] / И.Н. Бронштейн, К.А. Семендяев. – М.: Наука, 2007. – 708 с.

2.    Дехтярь, М.И. Введение в схемы, автоматы и алгоритмы. [Электронный ресурс] / М.И. Дехтярь. – М.: Наука, 2002. С. 642.

3.    Конечный автомат [Электронный ресурс] – Режим доступа: http://ru/wikipedia.org/wiki/Конечный_автомат.

4.    Мозговой, М.В. Классика программирования: алгоритмы, языки, автоматы, компиляторы. Практический подход. / М.В. Мозговой. – М.: Наука и Техника, 2006. С. 320.

5.    Семакин, И.Г. Основы программирования. [Текст] / И.Г. Семакин, А.П. Шестаков. – М.: Мир, 2006. C. 346.

6.    Симанков, В.С. Основы функционального программирования [Текст] / В.С. Симанков, Т.Т. Зангиев, И.В. Зайцев. – Краснодар: КубГТУ, 2002. – 160 с.

7.    Степанов, П.А. Функциональное программирование на языке Lisp. [Электронный ресурс] / П.А. Степанов, А.В. Бржезовский. – М.: ГУАП, 2003. С. 79.

8.    Хювенен Э. Мир Лиспа [Текст] / Э. Хювенен, Й. Сеппянен. – М.: Мир, 1990. – 460 с.


Информация о работе «Лисп-реализация конечных автоматов»
Раздел: Информатика, программирование
Количество знаков с пробелами: 14593
Количество таблиц: 2
Количество изображений: 12

Похожие работы

Скачать
232852
0
0

... с приглашением по запросу (в машинной графике)required parameter обязательный параметрrequired space обязательный пробел (в системах подготовки текстов)requirements specification 1. техническое задание 2. описание требований к программному средствуrerun перезапуск, повторный запускreschedule переупорядочивать очередь (о диспетчере операционной системы)reschedule interval период переупорядочения ...

Скачать
35700
0
1

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

Скачать
231244
5
6

... По теореме 9.3 в силу результатов шагов 3 и 8. (Шаг 10). Имеет место свойство (9.4) по теореме 9.5 в силу результатов шагов 1 и 9. Литература к лекции 9. 9.1. С.А. Абрамов. Элементы программирования. - М.: Наука, 1982. С. 85-94. 9.2. М. Зелковец, А. Шоу, Дж. Гэннон. Принципы разработки программного обеспечения. - М.: Мир, 1982. С. 98-105. Лекция 10. ТЕСТИРОВАНИЕ И ОТЛАДКА ПРОГРАММНОГО ...

Скачать
16288
2
8

... характер, однако, в этом случае возникает проблема, связанная с понятием окончания игры.   1. Постановка задачи Задача заключается в разработке алгоритма, по которому компьютер сможет играть в «Морской бой» с максимальным качеством, и при этом не подглядывая расположение флота игрока. Дополнительное и очевидное условие: при каждой новой игре вне зависимости от размещения сил противника ...

0 комментариев


Наверх