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

advertisement
Самарский государственный архитектурно - строительный университет
Прохорова О.В.
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
Часть 1.
Курс лекций
Самара - 2012
1
УДК 62-50 (076.5 )
Информационные технологии: Учебное пособие к курсу лекций для
студентов специальности Информационные системы и технологии
/ Сост. О.В. Прохорова. - Самара: СГАСУ, 2012. - 129c.
Изложены базовые знания, необходимые для понимания специфики
реализации процессов в вычислительной технике и передаче информации по сетям
телекоммуникаций. Приведены контрольные вопросы с целью закрепления
понимания материала.
2
Оглавление
1. Модели дискретных структур. Комбинационные схемы ...........................................................................4
1.1. Введение ................................................................................................................................................4
1.2. Функции алгебры логики ......................................................................................................................9
1.3. Булева алгебра. Функциональная полнота .......................................................................................14
1.4. Минимизация функции алгебры логики ............................................................................................17
1.5. Функции k-значной логики...................................................................................................................20
1.6. Основные понятия трехзначной логики.............................................................................................24
1.7. Представление k-значных функций в виде нормальных форм .....................................................25
1.8. Двоичное кодирование переменных и функций трехзначной логики .............................................27
1.9. Элементная база комбинационных схем .........................................................................................31
1.10. Программная реализация логических функций и автоматов .......................................................35
2. Формальные языки и грамматики ............................................................................................................40
2.1. Введение в теорию формальных языков и грамматик.....................................................................40
2.2. Выводы цепочек формального языка. Деревья КСГ ......................................................................45
2.3. Основные понятия теории формальных языков и грамматик .........................................................47
2.4. Приведение грамматик ......................................................................................................................50
2.4. Операции над языками .......................................................................................................................56
2.5. Право-линейная и автоматная грамматики .....................................................................................59
3. Теория автоматов .....................................................................................................................................61
3.1. Введение ..............................................................................................................................................61
3.2. Способы представления конечных автоматов ................................................................................64
3.3. Минимизация числа состояний автомата ........................................................................................69
3.4. Использование сети Петри при переходе от грамматики к автомату.............................................74
3.5. Сети Петри. Маркировка ....................................................................................................................77
3.6. Классификация сетей Петри ..............................................................................................................82
3.7. Синхронные и асинхронные автоматы ..............................................................................................87
3.8. Модели автоматов Мили и Мура .......................................................................................................89
3.9. Кодирование автомата ......................................................................................................................90
3.10. Элементная база синтеза комбинационных схем ..........................................................................98
3.11. Структурный синтез автомата .......................................................................................................104
4. Отдельные вопросы теории вычислительных процессов .................................................................116
4.1. Автоматы с магазинной памятью .....................................................................................................116
4.2. Комбинационные схемы обнаружения ошибок ..............................................................................124
4.3. Пространство сообщений. Коды обнаружения и исправления ошибок ........................................128
Контрольные вопросы ..............................................................................................................................132
Л И Т Е Р А Т У Р А ......................................................................................................................................136
3
1. Модели дискретных структур. Комбинационные схемы
1.1. Введение
Рассмотрим некоторое устройство с
n входами и m выходами. На
каждый вход может быть подан произвольный символ из конечного алфавита
X=(x1 .. x k ), который назовем входным алфавитом. Совокупность символов,
поданных на вход устройства образует входные слова P1 над алфавитом X.
Один из символов
алфавита
X соответствует пустому символу. Если на
некоторый вход устройства подается пустой символ, то физически это означает
отсутствие какого-либо возбуждения по данному входу. На выходе устройства
появляются выходные слова Qj над алфавитом Y=(y 1 ... yl ), который назовем
выходным алфавитом.
...
m выходов
Pi —> Qj
...
Элементарный такт
n входов
работы устройства
входе устройства входного слова
следующий: при появлении на
Pi устройство выдает на выходах
комбинацию выходных символов, то есть слово Qj.
Пусть работа устройства полностью определяется лишь входным словом,
тогда его работа может быть описана в виде следующей таблицы:
4
Таблица 1.1
P1
Qj1
P2
Qj2
......
.....
P kn
Qjkn
В таблице есть kn строк по числу различных входных слов длиной n над
алфавитом X размерности k.
Определение. Устройство, условия работы которого описываются в виде
табл. 1.1 называется конечным автоматом без памяти или комбинационной
схемой.
Автомат такого типа может рассматриваться как устройство, кодирующее
слова над алфавитом X словами над алфавитом Y. Конечный автомат без
памяти является наиболее простым логическим устройством дискретного типа.
Зададимся конечным алфавитом S = (S1 ... Sq ), который называется
алфавитом внутренних состояний. Пусть работа устройства полностью
описывается входным словом и внутренним состоянием, в котором находится
устройство в определенный такт работы, тогда пара (P i, St) однозначно
определяет выходное слово и внутреннее состояние, в которое устройство
перейдет в следующий такт работы, то есть определяет пару (Qj, Sh). Работа
такого устройства полностью описывается таблицами:
5
P1
P2
...
P kn
P1
P2
...
P kn
S1
Qj 1
Qj q+1
S2
Qj 2
Qj q+2
...
S1
Sj 1
Sj q+1
...
S2
Sj 2
Sj q+2
Таблица 1.2
...
Sq
...
Qj q
...
Qj 2q
...
...
Qj knq
Таблица 1.3
...
Sq
...
Sj q
...
Sj 2q
...
...
S knq
Табл. 1.2 определенному входному слову Pi и состоянию St ставит
в
соответствие выходное слово Qjt. Табл.1. 3 определяет внутреннее состояние
устройства в следующий такт работы автомата.
Определение. Устройство, работа которого описывается табл.1.2 и
табл. 1.3, называется конечным автоматом с глубиной памяти q.
Конечный автомат
с памятью и без нее является устройством
детерминированного типа. Описание его работы в виде таблиц есть задание
жесткого алгоритма его работы. Но существует более сложный класс
автоматов – это автоматы стохастического типа. В автоматах стохастического
типа вместо однозначного соответствия P i -> Qj или
(P i , S t) -> ( Qj , Sr ) рассматривается лишь вероятность замены Pi на Qj
или (P i ,S t) на ( Qj , Sr ) . Эта вероятность для случая автомата без памяти
6
задается
с помощью следующей стохастической матрицы, представленной
таблицей:
P1
P2
...
P kn
Qj1
a1 1
a21
Qj2
a12
a22
Qj3
a13
a23
...
...
...
Таблица 1.4
Qjm
a1jm
a2jm
akn1
akn2
a kn3
...
ak n j m
Здесь элемент ai
j
определяет вероятность появления слова Qj на выходе
автомата, если на его вход подано слово Pi . При этом действуют следующие
условия:
jm
0  ai j  1
и
a
ij
1
j 1
Пример.
Рассмотрим процедуру кодирования информации в устройстве оптического
сложения двух цветов. Символы алфавита X и Y должны быть закодированы
двоичным кодом и принимать значения только 0 и 1. Пусть алфавит X
представлен следующим образом: X = (желтый, синий, красный), а алфавит Y
представлен:
Y = (желтый, синий, красный, зеленый, оранжевый,
фиолетовый). В качестве устройства преобразования цвета выберем конечный
автомат без памяти с двумя входами и одним выходом. Его работу зададим
таблицей (алгоритмом):
7
Таблица 1.5
желтый + желтый
желтый + синий
синий + желтый
желтый + красный
красный + желтый
синий + синий
синий + красный
красный + синий
красный + красный
—> желтый
—> зеленый
—> зеленый
—> оранжевый
—> оранжевый
—> синий
—> фиолетовый
—> фиолетовый
—> красный
Автомат в данном случае будет представлять собой устройство для
оптического сложения двух цветов. Чтобы построить алгоритм его работы,
пронумеруем символы алфавитов X и Y. Для этого первоначально сопоставим
каждому цвету целое десятичное число от 0 до 5, а именно: желтому - 0,
синему - 1, красному - 2, зеленому - 3, оранжевому - 4, фиолетовому - 5.
Результаты кодировки представлены таблицей
0
0
1
0
2
1
1
2
2
0
1
0
2
0
1
2
1
2
—> 0
—> 3
—> 3
—> 4
—> 4
—> 1
—> 5
—> 5
—> 2
000000
000001
001000
000010
010000
001001
001010
010001
010010
—> 000
—> 011
—> 011
—> 100
—> 100
—> 001
—> 101
—> 101
—> 010
Двоичное кодирование алфавита заменяет каждую из 6 десятичных цифр
ее эквивалентом в двоичной системе исчисления – кодом в три символа.
8
1.2. Функции алгебры логики
Рассмотрим множество векторов X = {<x1... xn>}. Будем предполагать,
что координаты этих векторов могут принимать значения 0 или 1. Таким
образом, множество X состоит из 2n
векторов. Произведем отображение
множества X в множество Y = {0, 1} [1].
Определение. Функцией алгебры логики называется
функция, дающая
однозначное отображение X в Y.
Определение. Если две функции алгебры логики f1(x1... xn) и
f2( x1... xn) принимают на всех наборах значений аргументов одинаковые
значения, то их называют равными
Определение. Функция f(x1... xn) существенно зависит от аргумента xi , если
имеет место соотношение : f(x1... xi-1 , 0, xi+1 ... xn)  f(x1... xi-1 , 1, xi+1 ... xn) . В
противном случае xi - фиктивный аргумент.
Теорема 1. Число различных функций алгебры логики, зависящих от n
аргументов конечно и равно 2n.
Приведем иллюстрацию сказанного на основе анализа таблицы:
x1, x2,..., xn
00...00
00...01
00...10
...
11...11
Таблица1.6
f(x1, x2,..., xn )
a1
a2
a3
...
a2 n
Как показывает таблица, задавая тот или иной конкретный двоичный набор
аргументов, задается одна из возможных функций алгебры
логики,
9
принимающая значение 0 или 1. Различное число таких наборов равно 2 n.
Следовательно, число функций будет равно 2n.
Рассмотрим геометрическую интерпретацию области определения функции
алгебры логики. Сопоставим наборам аргументов алгебры логики точки nмерного пространства. Тогда множество 2n таких наборов определит
множество вершин n- мерного единичного куба. Таким образом, множество
вершин n- мерного единичного куба есть область определения функций
алгебры логики. Пусть вершина А соответствует набору
( х1 = 1, х2 = 1, х3 = 1 ), а вершина B - набору ( х1 = 1, х2 = 1, х3 = 0 ).
Тогда графически это может быть представлено следующим рисунком:
X3
A
0
X2
B
X1
Рис. 1.1. Геометрическая интерпретация области определения логических
функций
Рассмотрим
основные функции, которые играют основную роль в
построении функций алгебры логики и ее приложениях:
1. f = X.
2. f = X
10
3. f = 0.
4. f = 1.
5. f = X v Y.
6. f = X  Y.
7. f = X  Y (равенство, эквивалентность).
8. f = X  Y (импликация).
9. f = X  Y (стрелка Пирса, функция Вебба).
10. f = X | Y (штрих Шеффера).
11. f = X  Y (сложение по модулю 2).
Эти одиннадцать функций алгебры логики позволяют строить новые
функции, при этом используется два подхода: - подстановка в функцию новой
функции вместо аргументов и переобозначение аргументов.
Определение. Функция, полученная из f1 ... fk путем применения возможно
многократно указанных двух подходов называется суперпозицией функций
f1 ... fk.
Пример. Представить в виде таблицы функцию
f (X1,X2 ) = { ( X1  X2 ) v (X1  X2 ) } = X1 | X2.
Решение.
X1
0
0
1
1
X2
0
1
0
1
X1  X2
1
0
0
0
X1  X2
0
1
1
0
X1 | X2.
1
1
1
0
Пример. Показать, что
11
X1  X2 = X1 v X2 на основе построения и сравнения
функций по таблицам истинности.
Решение.
X1
0
0
1
1
X2
0
1
0
1
X1  X2
1
1
0
1
X1
1
1
0
0
X1 v X2
1
1
0
1
Аналогично можно показать, что сложение по модулю 2:
X1  X2 =  ( (X1 v X2) & (X1 v X2 ) ).
А функция эквивалентности: X  Y = (X1 v X2) & (X1 v X2 ),
т.е. эти 2 функции связанны отношением отрицания.
(X1 ) = X.
X1 & X2 =  (X1 v X2).
X1 v X2 =  (X1 & X2).
Рассмотрим свойства конъюнкции, дизъюнкции и отрицания.
1. Коммутативность
x1 & x2 = x2 & x1.
x1 v x2 = x2 v x1.
2. Ассоциативность
12
x1 v (x2 v x3) = (x1 v x2) v x3.
x1 & (x2 & x3) = (x1 & x2) & x3.
3. Дистрибутивность
x1 & (x2 v x3) = (x1 & x2) v ( x1 & x3 ).
x1 v (x2 & x3) = (x1 v x2) & ( x1 v x3 ).
Отметим также важные соотношения:
X v X = X, X & X = X, X v 1 = 1, X & 1 = X,
X v 0 = X, X & 0 = 0, X v X = 1, X & X = 0.
Положим x  = { X , если  = 1; X , если  = 0 } .
Утверждение. Любая функция алгебры логики кроме 0 может быть
представлена в форме
f(x 1...xn) =  x1  & x2 ... & xn

При этом дизъюнкция в правой части берется только по тем
(1.1)
наборам
аргументов, на которых функция, заданная таблично, обращается в 1.
Определение. Представление функции алгебры логики в виде (1.1)
называется ДСНФ - дизъюнктивной совершенной нормальной формой.
Для построения ДСНФ необходимо выполнить следующие шаги:

выбрать в таблице истинности заданной функции все наборы аргументов,
на которых функция равна 1;
13

выписать соответствующие этим наборам конъюнкции, при этом, если
аргумент xi входит в данный набор как 1, то он записывается без
изменений, если же, как 0 , то берется x i ;

все полученные конъюнкции объединяются под знаком дизъюнкции.
1.3. Булева алгебра. Функциональная полнота
Определение. Алгеброй над множеством логических функций с двумя
бинарными операциями, обозначаемыми как логическое умножение ‘ & ‘ и
логическое сложение ’v ’ и одной унарной операцией (отрицанием)
' ‘ называется булевой алгеброй.
Будем обозначать ее символом B. Рассмотрим свойства булевой алгебры.
1. Замкнутость
для  A и B  B
A v B  B
A & B  B
2. Коммутативность
A&B=B &A
Av B=BvA
3. Ассоциативность
A v ( B v C) = (A v B) v C
4. Дистрибутивность
14
A & ( B v C) = (A & B) v (A & C)
A v ( B & C) = (A v B) & (A v C)
5. Идемпотентность
A v A = A & A = A.
6. Булева алгебра содержит элементы 0,1 , такие что для всякого
элемента A  B справедливо:
A v 0 = A,
A & 0 = 0,
Av 1 =1
A & 1 = A.
7. Для каждого элемента A  B существует элемент A , такой что
A v A =1
A & A =0.
8. Закон поглощения
A & (A v B) = A v A & B = A.
9. Закон Де Моргана
 ( A v B ) = A & B
 ( A & B ) = A v B.
Определение. Система функций f1, f2... fn  B называется полной, если
любая функция  из B представима в виде суперпозиции функций f1, f2... fn.
Определение. Система функций f1, f2... fn  B , являющаяся полной,
называется базисом.
15
Определение. Минимальным базисом называется базис, для которого
удаление хотя бы одной из функций fi
превращает систему функций в
неполную.
Можно показать, что системы функций { &, } и { , } - полные.
Система функций { &, , } является полной, но избыточной, так как она
сохраняет свойства полноты и при удалении из нее & или .
За не
избыточность системы функций { &, } и { , } приходится платить
избыточностью формул (повышением сложности функций).
Определение. Алгебра над множеством логических функций с двумя
бинарными операциями & и  называется алгеброй Жегалкина.
Свойства алгебры Жегалкина
1. Коммутативность
x  y=yx
2. Дистрибутивность
x & (y  z)= x & y  z & x
3. Идемпотентность
xx=0
x0=x
Для алгебры Жегалкина характерно
 =x1
xy=x&yxy
16
Определение. Формула, имеющая вид полинома по модулю 2 называется
полиномом Жегалкина для функции алгебры логики.
Замечание. От булевой формулы всегда можно перейти к полиному
Жегалкина.
1.4. Минимизация функции алгебры логики
Работа автомата может быть полностью описана с помощью следующей
системы функций алгебры логики [2]:
y1= f1 (x1 ... xn )
y2= f2 (x1 ... xn )
...
ym= fm (x1 ... xn ).
Здесь
Pi = ( X1, X2, ...,Xn ); Qj = ( y1, y2, ...,ym ) - соответственно входное и
выходное слово. Работа автомата может быть задана либо в виде конечных
таблиц, либо в виде аналитической записи функций fi .
Проблема полноты системы функций эквивалентна проблеме выбора
стандартного набора элементов, из которого будет строиться автомат (блок
вычислительной техники), при этом все функции fi должны быть выражены
через базисные функции. Уменьшение числа функций в базисе приводит к
уменьшению стандартных элементов, на которых строится схема, однако, при
этом увеличивается общее число элементов схемы и возникает задача
о
17
“простейшем” представлении логических функций через систему базисных
функций. Для этого используют методы минимизации:
 метод вынесения за скобки;

метод неопределенных коэффициентов;

метод с использованием карт Карно;

метод Мак - Класки;

метод Блэка.
Рассмотрим метод минимизации СДНФ с помощью карт Карно. Карта
Карно - это диаграмма, состоящая из 2n квадратов, где n - число переменных.
Клетка карты - одна из возможных конъюнкций, входящих в СДНФ.
Минимизация на основе карт Карно осуществляется путем локализации на
карте прямоугольных областей из числа клеток кратного 2.
Для работы с картой необходимо по таблице истинности составить СДНФ,
затем для каждой элементарной конъюнкции проставить 1 в соответствующие
клетки
карты.
Затем
единицы
объединяются
таким
образом,
чтобы
минимизировалось число логических сложений, умножений или отрицаний,
что важно для экономного конструирования ЭВМ.
Для двух переменных:
Для трех переменных:
a
a
a
a
c
b
b
b
c
b
b
b
18
Для четырех переменных:
a
a
c
d
c
d
c
d
c
d
b
b
b
Пример. Для логической функции заданной таблицей
x1
1
1
1
1
0
x2
1
1
0
0
1
x3
1
0
1
0
1
f
1
1
1
1
1
построить карту Карно и на ее основе минимизировать функцию.
Решение. Построим карту согласно описанным выше правилам.
19
x1
x2
x1
1
x2
1
1
f = x1 v x2 & x3
1
x3
1
x3
x3
Рассмотрим пример представления простейшей функции картой Карно:
a
a
c
1
1
d
c
1
1
d
f=b
c
1
1
d
c
1
1
d
b
b
b
1.5. Функции k-значной логики
Для описания дискретных устройств наряду с булевыми функциями
применяются функции, у которых аргументы и сами функции принимают
значения из множества, содержащего k элементов (0,1.. k-1) [1].
Определение. Функция, принимающая значения из множества
20
{0,1.. k-1}, аргументы которой также принимают значения из этого множества,
называется функцией k-значной логики.
Булева функция есть функция двухзначной логики. Функция
k - значной логики может быть задана таблицей истинности вида:
x1
x2
0
...
xn
f(x1... xn)
0
0
f(0,0,...,0)
0
0
1
f(0,0,...,1)
0
1
0
f(0,1,...,0)
0
1
1
f(0,1,...,1)
...
...
...
...
k-1
k-1
k-1
f(k-1,k-1,...k-1)
...
Число k - ичных наборов длины n равно k
n и на каждом из них значение
функции может задаваться k способами, поэтому число функций k - значной
n
логики определяется числом k . Аналогично двузначной логике в k - значной
логике выделяются элементарные функции:
1. Квазиконъюнкция
  min( x , x )
&
1
2
2. Квазидизъюнкция
  max( x1 , x 2 )
3. Сумма по модулю k
21
{x1 x2}mod
k
Значение функции равно остатку от деления суммы x1 + x2 на k..
4. Произведение по модулю k
{x1x2}mod
k
Значение функции равно остатку от деления произведения x 1 и x2 на k.
5. Функция Вебба, (стрелка Пирса  ),
{max(x1, x2)+1}mod
k
6. Цикл (циклическое отрицание)
~x  {x  1}
mod k
7. Функция инверсии
x  k  1  x.
В алгебре k - значной логики действуют законы аналогичные законам
булевой алгебры. Кроме того к элементарным функциям относятся следующие
характеристические функции:

k  1,   x
 ( x)  
  (0,1,..., k  1)
 0,   x

22

1,   x
 ( x)  
0,   x

 = ( 0, 1, ..., k-1).
Построим таблицы, задающие введенные элементарные функции. В
трехзначной логике f =0, f = 1, f = 2 будут представлять собой константы.
x1
x2

&

x1  x2
x 1 x2
x1 x2
0
0
0
0
1
0
0
0
1
0
1
2
1
0
0
2
0
2
0
2
0
1
0
0
1
2
1
0
1
1
1
1
2
2
1
1
2
1
2
0
0
2
2
0
0
2
0
2
0
2
1
1
2
0
0
2
2
2
2
2
0
1
1
x
0
1
2
x
~x
0
2
0
0
2
1
1
0
2
0
1
2
2
0
0
2
0
0
23
1.6. Основные понятия трехзначной логики
Трёхзначная логика была исторически первой многозначной логикой, и
является
простейшим
расширением
двузначной
логики.
Перечень
истинностных значений трёхзначной логики помимо «истинно» и
«ложно» включает также третье значение, которое трактуется как
«неопределено», «неизвестно» или «ошибочно». В последнем случае
логику обычно называют частичной.
Важным свойством трёхзначных логик, отражающим их адекватность,
является то, что все они представляют собой расширения классической
двузначной логики.
В трехзначной логике имеют место следующие соотношения:
1.   x = x
2. x & x = x
3. x & 0 = 0
4. x & 2 = x
 xx
5. x 
 0 x
6. x 
 22
7. x 
8. x  1 = x
9. x  0 = 0
10. x  0 = x
~
11. x  ~x  ~x  2
24
~
~
12. ~x  x
Функции квази-дизъюнкции, квази-конъюнкции и отрицания связаны
между собой формулами де Моргана.
x
~
X
~~
X
~
X  X
~
~
X  X
~ ~
~
X  X
0
1
2
1
2
2
1
2
0
2
1
2
0
1
2
2
0
1
2
2
0
0
2
0
2
0
1
0
0
2
1.7. Представление k-значных функций в виде нормальных форм
Теорема 2. Любая функция k - значной логики может быть представлена
в виде СДНФ:
f(x1,..., xn ) = v 1( x1 ) & 2( x2 ) &... n( xn) & f ( 1, 2,..., n )
или в виде - формы:
f( x1,..., xn) =  1 ( x1 ) & 2 ( x2 )... & n ( xn )  f ( 1,...,n).
Пример. Для функции, заданной таблицей истинности
25
x1
x2
f
0
0
0
0
1
1
0
2
2
1
0
0
1
1
0
1
2
0
0дд 2
0
0
2
1
1
2
2
0
составить СДНФ и - форму.
Решение. Заметим, что значения xi в таблице соответствуют индексам i
при функциях i и i. И в соответствии с выше обозначенными формулами
можно записать:
f( x1, x 2 ) = 0( x1 ) & 1( x2 ) & 1 v 0( x1 ) & 2( x2 ) & 2
v 2( x1 ) & 1( x2 ) & 1.
f( x1, x 2 ) = 0( x1 ) & 1( x2 )  1  0( x1 ) & 2( x2 )  2

2( x1 ) & 1( x2 )  1.
26
1.8. Двоичное кодирование переменных и функций трехзначной логики
Закодируем аргументы следующим образом:
x
1
2
0
0
0
1
0
1
2
1
0
Откуда следует, что для записи и передачи любого троичного переменного
необходимо использовать две двоичные переменные v1, v2. При этом функции
i(x) будут кодироваться следующим образом: i’, i’’ по 2-м выходам
соответственно.
x
1
2
 0’
0’’
 1’
1’’
 2’
2’’
0
0
0
0
1
0
0
0
0
1
0
1
0
0
0
1
0
0
2
1
0
0
0
0
0
0
1
*
1
1
*
*
*
*
*
*
Удобно доопределить i’ на наборе <1,1> нулями, тогда получим
0’ = 1’ = 2’ = 0; 0’’ = 1 & 2; 1’’ = 1 & 2; 2’’ = 1 & 2.
Один из способов моделирования трехзначной логики заключается в
создании функциональных элементов с тремя устойчивыми состояниями, то
27
есть с квантованием сигнала по трем уровням, при этом принята следующая
система аналогий:
 положительный потенциал - 0;
 нулевой потенциал - 1;
 отрицательный потенциал - 2.
Практически, в полупроводниковых схемах для трехзначной функции
справедливо:
 положительным потенциалом считается потенциал >= 1.5В.
 нулевым потенциалом считается потенциал по модулю <= 0.6В.
 отрицательным - потенциал <=- 1.5 В.
Пример. Построить таблицу истинности для функций
X1  X2,
Закодировать
в
минимизировать
двоичной
и
X1  X2.
системе
построить
для
координат,
одной
из
представить
выбранных
СДНФ,
функций
комбинационную схему в базисе (&,V,  ).
28
Решение.
X1
X1 X2
X2
X1  X2
V1
V2
V3
V4
f1
f2
f3
f4
0
0
0
0
0
0
0
0
0
0
0
1
0
1
0
0
0
0
1
0
1
0
0
0
0
0
1
1
*
*
*
*
0
1
0
0
0
1
0
0
0
1
0
1
1
0
0
1
0
1
1
0
0
0
1
0
0
1
1
1
*
*
*
*
1
0
0
0
1
0
0
0
1
0
0
1
0
0
1
0
1
0
1
0
0
1
0
1
1
0
1
1
*
*
*
*
1
1
0
0
*
*
*
*
1
1
0
1
*
*
*
*
1
1
1
0
*
*
*
*
1
1
1
1
*
*
*
*
Таким образом, функцию f( x1,x2 ) можно представить следующим образом:
f( x1,x2 ) = < f1 (v1,v2,v3,v4 ), f2 (v1,v2,v3,v4 ) > .
f1 = v1 v2 v3 v4 v v1 v2 v3 v4 v v1 v2 v3 v4,
29
f2 = v1 v2 v3 v4 v v1 v2 v3 v4 v v1 v2 v3 v4 .
Как следует из кодировки функции, логическая схема ее реализующая должна
иметь два выхода и четыре входа. Прежде чем приступить к построению
схемы необходимо выполнить минимизацию сформированных функций f1, f2.
Выполним действия относительно одной из функций, например, f1. Составим
карту Карно.
v1
v1
v1
v1
*
*
v4
*
*
*
v4
v2
*
*
v2
1
V2
V2
1
v3
v4
v4
1
v3
v3
v3
Для того чтобы минимизировать слабо определенную функцию в карте Карно
проставляют специальный знак, например, * в местах характерных наборам,
на которых функция не определена, затем * меняют на 1 в тех клетках,
прямоугольники составленные из которых уменьшили бы число конъюнкций,
дизъюнкций и отрицаний. Сказанное позволяет записать:
f1 = v2 & v4 v v3 & v1 & v2 v v3 & v4 & v1.
Аналогично составляются функции f2, f3, f4. Схемная реализация функции f1
примет вид:
30
v1
v2
v3
v4
&
&
&
&
&
&
&
1
1
f1
1.9. Элементная база комбинационных схем
Компьютер есть сложное техническое устройство, состоящее из простых
элементов. Любой
электронный логический блок компьютера состоит из
вентилей (логических устройств, базовых логических схем), объединяемых по
правилам и законам (аксиомам) булевой алгебры в схемы, модули.
Логический вентиль (вентиль) – это своего рода элемент, из которого состоят
электронные узлы ЭВМ. Он работает по принципу крана, открывая или
закрывая путь сигналам.
31
Логические схемы предназначены для реализации различных функций алгебры
логики и реализуются с помощью трех базовых логических элементов
(вентилей, логических схем, переключательных схем). Они воспроизводят
функции полупроводниковых схем.
Логические функции отрицания, дизъюнкции и конъюнкции реализуют
логические схемы, называемые инвертором, дизъюнктором и конъюнктором.
Логическая функция "инверсия", или отрицание, реализуется логической
схемой (вентилем), называемой инвертор.
Принцип его работы можно условно описать следующим образом: если,
например, "0" или "ложь" отождествить с тем, что на вход этого устройства
скачкообразно поступило напряжение в 0 вольт, то на выходе получается 1 или
"истина", которую можно также отождествить с тем, что на выходе снимается
напряжение.
Аналогично, если предположить, что на входе инвертора будет напряжение 1
("истина"), то на выходе инвертора будет сниматься 0 вольт.
Функцию отрицания можно условно отождествить с электрической схемой
соединения в цепи с лампочкой (рис. 1.2), в которой замкнутая цепь
соответствует 1 ("истина") или х = 1, а размыкание цепи соответствует 0
("ложь") или х = 0.
32
Рис. 1.2. Электрический аналог схемы инвертора
Дизъюнкцию
реализует логическое устройство (вентиль) называемое
дизьюнктор
Дизъюнктор условно изображается схематически электрической цепью вида
(рис. 1.3)
Рис. 1.3. Электрический аналог схемы дизъюнктора
Конъюнкцию
реализует
логическая
схема
(вентиль),
называемая
конъюнктором.
Конъюнктор можно условно изобразить схематически электрической цепью
вида (рис. 1.4:
33
Рис. 1.4. Электрический аналог схемы конъюнктора
Схематически инвертор, дизъюнктор и конъюнктор на логических схемах
различных устройств можно изображать условно следующим образом (рис. 1.5
– 1.7 ). Есть и другие общепринятые формы условных обозначений.
Условные обозначения вентилей:
&
x
⌐X
Рис. 1.5.Схема инвертора
x
&
xy
y
Рис. 1.6. Схема конъюнктора
34
x
1
X vY
y
Рис. 1.7. Схема дизъюнктора
Из указанных простейших базовых логических элементов собирают,
конструируют сложные логические схемы ЭВМ, например, сумматоры,
шифраторы, дешифраторы и др. Большие (БИС) и сверхбольшие (СБИС)
интегральные схемы содержат в своем составе (на кристалле кремния
площадью в несколько квадратных сантиметров) десятки тысяч вентилей. Это
возможно
и потому, что базовый набор логических схем (инвертор,
конъюнктор,
дизъюнктор)
является
функционально
полным
(любую
логическую функцию можно представить через эти базовые вентили),
представление
логических
констант
в
них
одинаково
(одинаковы
электрические сигналы, представляющие 1 и 0) и различные схемы можно
"соединять" и "вкладывать" друг в друга (осуществлять композицию и
суперпозицию схем).
1.10. Программная реализация логических функций и автоматов
Представление автомата схемой, состоящей из логических элементов
наиболее исследованный вид структурной реализации автомата. Другой ее вид
- реализация
программой. Программа вычисляет (реализует)
логические
функции f(x1, ..., xn) = y, если для любого двоичного набора    1,..., n ) при
начальном состоянии элементов памяти x1 = 1 , x2 = 2 ,..., xn = n программа
35
через конечное число шагов останавливается и в ячейке y лежит величина
f(1, 2, ..., n ). Если под сложностью схемы, реализующей автомат, обычно
понимается число элементов схемы, то под сложностью программ можно
понимать:
 число команд в тексте программы;
 объем промежуточной памяти;
 время вычисления программы, которое характеризуется двумя величинами:
1
n
1. Средним временем t ср 
n
2
  p ()

2. Максимальным временем t max  max(  p (  )) ,
где сумма и максимум берутся по всем 2 n наборам, а
p - время работы
программы на одном наборе .
Рассмотрим 2 типа программ: операторные и бинарные. Операторная
программа не содержит условных переходов, порядок ее команд в точности
соответствует нумерации элементов в схеме, а система команд соответствует
базису схемы. Элементы схемы нумеруются числами 1,..., n таким образом,
чтобы на любом пути от входа к выходу номера элементов возрастали. При
этом номер 1 получит один из входных элементов, а номер n - выходной
элемент.
Пусть элемент схемы ei реализует функцию i
и
к его входам
присоединены выходы элементов ej1 , e j2 , ..., e jm (некоторые из них, возможно,
являются входами схемы ), тогда выход такого элемента можно записать:
ai = i ( ej1 , e j2, ..., e jm ) при i  n, а выход схемы может быть записан:
y = i( ej1, e j2, ..., e jm ) при i = n. Такая программа будет реализовывать работу
заданной схемы. Проблема синтеза операторных программ сводится к
36
проблеме синтеза схем, то есть к вопросам функциональной полноты и
минимизации схем. Поскольку операторная программа не содержит условных
переходов, то время ее выполнения на любом наборе одно и то же, отсюда
t max = t ср.
Бинарные программы это программы, состоящие из команд типа
y = ;
 = {0, 1} и условных переходов.
Замечание. Бинарные программы обладают двумя достоинствами по
сравнению с операторными:
1. Отсутствием промежуточной памяти в процессе работы программы.
Это позволяет реализовать бинарную программу на постоянных
элементах памяти.
2. Более высоким быстродействием.
Пример. Составить для функции f = x1 v x2 бинарную и операторную
программы.
Решение. Воспользуемся языком С++, будем иметь код:
void main()
{
bool f=0, x1,x2 ; // описание типа переменных
cout<<” Enter x1,x2\n”; // вывод на экран текста
cin>> x1>>x2; // ввод переменных
switch (x1) // оператор выбора
{
case 0: switch(x2)
{
case 0: f=1;
37
case 1: f=0;
}
case 1: f=1;
}
default: f=0;
cout>> ”\n f = “<<f ;
getch();
}
Операторная программа пишется в базисе {&,}. Для этого перепишем
заданную функцию, используя формулы де Моргана.
__
_________
__
f  ( x1  x2 )  x1  x2
void main()
{
bool f, x1,x2 ; // описание типа переменных
bool a,b;
cout<<” Enter x1,x2\n”; // вывод на экран текста
cin>> x1>>x2; // ввод переменных
a= 1-x1;
b= a  x2;
{ x1 }
{ x1  x 2 }
b= 1 - b;
f=b;
{ x1  x2 }
cout>> ”\n f = “<<f ;
getch();
}
38
Контрольный вопрос. Определить к какому типу программ относится
программа, фрагмент которой представлен оператором:
f = (x1) OR ( NOT (x3)) AND ((x5) AND (NOT (x4)));
39
2. Формальные языки и грамматики
2.1. Введение в теорию формальных языков и грамматик
С развитием вычислительной техники появилась необходимость в
построении теории формальных языков и грамматик - теории, которая
позволяла бы описывать и анализировать синтаксические свойства языков
программирования;
теории,
которая
бы
позволяла
преобразовывать
грамматики в автоматы, распознающие множества, задаваемые грамматиками.
Любой
понимать
язык
как
множеством
программирования
множество
правил.
цепочек
Множество
определенным правилам,
(алгоритмический
символов,
цепочек
язык)
задаваемое
символов,
можно
некоторым
построенных
по
образует формальный язык. Формальная
грамматика включает набор грамматических правил, с помощью которых
можно порождать и анализировать цепочки формального языка [3].
Пример. Пусть имеем
элементы формальной грамматики, играющие
роль членов предложения или частей речи:
< предложение>, < сказуемое >, < подлежащее >, < дополнение >,
< прилагательное>, < существительное >, < точка >
Пусть имеем словарь, состоящий из 5 символов:
{ Дом, Дуб, Заслоняет, Старый, . }
Считаем, что в грамматике имеются определенные
правила, содержащие
информацию о том, как из этих символов можно строить предложения языка.
Рассмотрим первое из таких правил.
1. <предложение>:

<подлежащее>
<сказуемое>
<дополнение> .
40
Оно интерпретируется следующим образом. Предложение может состоять
из подлежащего, за которым следует сказуемое, затем следует дополнение и
точка.
Правила,
позволяющие
последовательно
выражать
элементы
предложения основными символами заданного алфавита можно представить
следующим образом:
2. <подлежащее>:  <прилагательное> <существительное >
3. <дополнение>:  <прилагательное><существительное >
4. <сказуемое>:  ЗАСЛОНЯЕТ
5. <прилагательное>:  СТАРЫЙ
6. <cуществительное >:  ДОМ
7. <cуществительное >:  ДУБ
Применим предложенные правила для порождения (вывода )
предложения СТАРЫЙ ДУБ ЗАСЛОНЯЕТ СТАРЫЙ ДОМ.
Последовательность подстановок будет выглядеть следующим образом:
<предложение>:  <подлежащее> <сказуемое> <дополнение>.
(Применили 1правило).
<предложение>:  <прилагательное> <существительное >
<сказуемое> < дополнение >.
(Применили 2 правило ).
<предложение>:  СТАРЫЙ <существительное >
<сказуемое> < дополнение >.
(Применили 5 правило ).
41
<предложение>: 
СТАРЫЙ
ДУБ <сказуемое>
< дополнение >.
СТАРЫЙ
ДУБ ЗАСЛОНЯЕТ
< дополнение >.
(Применили 7 правило).
<предложение>: 
(Применили 4 правило).
<предложение>:

СТАРЫЙ
ДУБ
ЗАСЛОНЯЕТ
<прилагательное>
<существительное >.
(Применили 3 правило).
<предложение>:

СТАРЫЙ
ДУБ
ЗАСЛОНЯЕТ
СТАРЫЙ
<существительное >.
(Применили 5 правило)
<предложение>:

СТАРЫЙ
ДУБ
ЗАСЛОНЯЕТ
СТАРЫЙ
ДОМ.
(Применили 6 правило).
С помощью рассмотренной
грамматики можно вывести и другие
предложения. Например,
СТАРЫЙ ДОМ ЗАСЛОНЯЕТ СТАРЫЙ ДОМ.
СТАРЫЙ ДОМ ЗАСЛОНЯЕТ СТАРЫЙ ДУБ.
СТАРЫЙ ДУБ ЗАСЛОНЯЕТ СТАРЫЙ ДУБ.
Контрольный вопрос. Как нужно изменить правила грамматики, чтобы
последние три предложения не входили в язык?
42
Рассмотрим процедуру вывода (порождения) языка грамматикой на
примере дерева. Дерево показывает, какие правила применялись к различным
промежуточным элементам.
<предложение>
<подлежащее>
<сказуемое>
<дополнение>
<прилагат.> <сущест. 1>
старый
дуб
.
< прилагат.> <cущест. 2>
заслоняет
старый
дом
Дерево представляет собой синтаксическую структуру предложения. Из
него видно, что результирующая цепочка не зависит от порядка, в котором
делались замены промежуточных элементов. Элементы грамматики, такие как
подлежащее, существительное и другие, называются вспомогательными или
нетерминальными символами. В контекстно-свободной грамматике может
быть любое конечное число нетерминальных символов. Символы - дуб, дом,
старый, заслоняет в рассмотренной грамматике играют роль слов из словаря
языка и называются терминальными (основными) символами или просто
терминалами. Может существовать любое конечное число терминалов в
контекстно-свободной
грамматике.
В
языках
программирования
терминальными являются используемые в них слова и символы: DO, IF, + и
др.
В общем виде правила грамматики можно записать:
43
нетерминал  любая конечная цепочка терминальных и нетерминальных
символов или одних терминалов.
Цепочка справа от стрелки может быть пустой, что обозначается в
грамматике следующим образом: < F>  . Такое правило называется эпсилон
- правилом.
В отдельных языках программирования правила выглядят в соответствии
с записью:
< оператор >  IF < логическое выражение > THEN < оператор >
Один из нетерминальных символов всегда выделяется в качестве начального.
Его называют аксиомой грамматики. С него всегда должен начинаться вывод
цепочек языка.
Контекстно-свободная грамматика (КСГ) задается:
конечным множеством терминалов; - конечным множеством нетерминалов;
конечным множеством правил вида < A >  , где А - нетерминал,  цепочка терминальных и нетерминальных символов ( возможно пустая ) или
цепочка терминальных символов; нетерминал А называется левой частью
правила, а  - правой; одним нетерминальным символом, выделенным
в
качестве начального (аксиомой грамматики).
Проанализируем грамматику, правила которой имеют вид:
1. S  a A b S
3. A  A S c
2. S  b
4. A  
Из записи следует: { A,S } - словарь нетерминальных символов;
44
{a, b, c} - словарь терминальных символов;  - пустая цепочка и,
следовательно, не является символом грамматики. Правило 4 можно записать в
виде А . Аксиома грамматики – символ S.
Рассмотрим еще один способ записи правил формальной грамматики,
называемый формой Бэкуса-Наура:
1. <S>:= a <A> b <S> | b
2. <A>:= <A> <S> c | 
2.2. Выводы цепочек формального языка. Деревья КСГ
Правила грамматики задают способы подстановки цепочек. Подстановка
осуществляется заменой нетерминального символа в заданной цепочке на
правую часть правила, левой частью которого является такой нетерминал.
Рассмотрим грамматику с аксиомой грамматики < S > и правилами
вывода вида:
Если
1. S  a A B c
2. S  
3. A  c S B
2. 4. A  A b
5. B  b B
6. B  a
начать
вывод
цепочек
языка,
используя
первое
правило,
то
последовательность подстановок может быть следующей:
 SaA Bc
( 1 правило )
 SaAbBc
( 5 правило )
 SaAbbac
( 6 правило )
 SacSBbbac
( 3 правило )
 SacSabbac
( 6 правило )
 Sacabbac
( 2 правило )
45
В
рассмотренном
выводе
присутствует
семь
цепочек,
включая
начальную и заключительную.
Определение.
Язык,
задаваемый
грамматикой,
есть
множество
терминальных цепочек, которые можно вывести из начального символа
грамматики.
Построим дерево вывода
цепочки: a c a b a c , используя выше
рассмотренную грамматику.
S
a
A
B
A
c
b
S
B

a
c
a
Замечание. Для каждого дерева существует единственный левый и
правый выводы, то есть вывод, когда на каждом шаге заменяется самый левый
(правый) нетерминальный символ. Многие методы обработки языков
рассчитаны исключительно на левый (правый) выводы. В подобных случаях
пишут:
  LB
(L - left)
46
  RB
(R - right ).
Цепочке языка может соответствовать более чем одно дерево, так как
она может иметь разные выводы, порождающие разные деревья. Если одна
цепочка имеет несколько деревьев вывода, то говорят, что соответствующая
грамматика неоднозначна.
2.3. Основные понятия теории формальных языков и грамматик
Пусть задан алфавит V терминальных символов. Множество
всех
конечных слов или цепочек в алфавите V обозначим V*.
Формальный язык L над алфавитом V - это подмножество множества
V*, то есть L (V)  V* [ 3 ].
Конструктивное
описание
формального
языка
осуществляется
помощью формальных систем, называемых формальными
с
порождающими
грамматиками.
Определение. Формальной порождающей
грамматикой G называется
формальная система, описываемая с помощью четырех формальных объектов
{ V, W, P, S }, где V - словарь терминалов, W - словарь нетерминалов, причем
*
V  W = , P - множество правил вида   , где  и   ( V  W ) ,
S - аксиома грамматики.
Определение. Цепочка  называется выводимой из цепочки , если они
представимы в виде:
=   
=
47
и в грамматике существует правило вида   .
Определение. Цепочка  называется выводимой из , если существует
конечная последовательность цепочек вывода:
  0
0  1,
...,
k   , где цепочка i непосредственно выводима
из i-1 для всех i = 0,1,..., k-1.
Введем обозначение   G . Это значит, что  выводима из 
в грамматике G.
Определение. Языком L(G), порождаемым грамматикой G, называется
множество всех цепочек, выводимых из аксиомы грамматики.
Определение. Грамматики G1 и G2 эквивалентны тогда и только тогда,
когда они порождают один и тот же язык.
Классификация грамматик Холмского
Тип 0 - грамматика произвольного вида без ограничений на правила
вывода.
Тип 1 - контекстная грамматика. Контекстная грамматика, правила
которой имеют вид:
 A     , A  W*,   (V  W)*,
где  - непустая цепочка,  и  - контекст правила ( цепочки символов,
которые не заменяются и не изменяются при его применении).
Тип 2 - контекстно-свободная грамматика (КСГ), правила которой
имеют вид
48
A  ,
  (V  W)*.
Тип 3 - регулярная грамматика, все правила которой имеют вид:
AB
A  ,
  V,
B  W.
Определение. Язык, порождаемый грамматикой определенного типа ,
называют языком такого же типа.
Пример. Определить тип языка, цепочки которого имеют вид
{ a, aaa, aaaaa ... a2n-1 .... }.
Решение. Определим объекты грамматики и определим ее правила,
позволяющие строить цепочки заданного языка. Ими будут:
V = {a}, W = {S}, P = { S  a a S, S  a }.
Из всего следует, что это язык типа 2.
Пример. Определить тип языка булевых функций.
Решение. Грамматику зададим объектами:
G = {V, W, P, S}, V= { a, b, c, &, , , (, ) }, W = {S},
и правилами вида:
1. S  ( S & S )
4. S  a
49
2. S ( S  S )
5. S  b
3. S   S
6. S  c.
Анализ показывает, что это контекстно-свободная грамматика,
и язык, порождаемый ей, есть язык типа 2.
Пример. Определить тип языка, цепочки которого имеют вид
{ a n b n }.
Решение. Запишем правила, с помощью которых можно вывести цепочки
заданного языка. Они имеют вид:
S  a S b;
S  a b.
Как показывает анализ, заданный формальный язык принадлежит типу 2.
2.4. Приведение грамматик
Для одного и того же формального языка могут существовать различные
грамматики. Поэтому возникает проблема выбора грамматики, наиболее
подходящей по тем или иным свойствам, иначе проблема эквивалентного
преобразования грамматик к нужному виду. Желаемые свойства могут быть
такими как:
*
однозначность;
*
минимальное число правил или нетерминальных символов;
50
*
простота вывода.
Универсальных методов
свободных
грамматик
эквивалентных преобразований контекстно-
(КСГ)
не
существует
из-за
неразрешимости
алгоритмических проблем распознавания эквивалентности
свободных грамматик
контекстно-
и существенной неоднозначности контекстно-
свободных языков. Однако, существуют некоторые преобразования, которые
могут улучшать грамматику.
Определение.
Назовем
нетерминальный
символ
A выводимым
(достижимым), если существует S  *  A  и производящим, если A*, 
 V* ,  и  - произвольные цепочки,  - терминальная цепочка.
Определение. Нетерминальный символ называется существенным, если
он является достижимым и производящим. В противном случае, он называется
несущественным (бесполезным).
Покажем, что для
любой КСГ можно построить эквивалентную ей
приведенную контекстно-свободную грамматику. Для этого рассмотрим
алгоритм выделения достижимых символов:
1. Обозначим через M1 множество всех нетерминальных символов,
содержащихся в правых частях правил вида:
S  ,   (V  W)*.
Очевидно, что все символы M1 достижимы.
2. Mi = M1.
51
3. Определим Mi-+1 = Mi  Mi’, как множество, состоящее из
объединения множеств Mi и Mi’ , где Mi’ - множество всех
нетерминальных символов правых частей правил вида:
A  ,
A  Mi ,
  ( V  W )*.
4. Mi+1  Mi ? Если - да, то Mi = Mi+1 и переход к п. 3.
5. Окончание алгоритма.
Массив Mi+1 - множество достижимых символов и его размерность
k  W .
Пример. Для заданной грамматики вида:
S a B a
BaBCa
Bb
CbB
CaC
определить множество достижимых символов.
Решение. Найдем
множества Mi для заданной грамматики в
соответствии с представленным алгоритмом. Ими будут множества
M1 = {B, S},
M2 = M1  {C}, M3 = M2 = {B, S, С} - множество достижимых
символов.
Пример. Для заданной грамматики вида:
S A B A
BABCA
Bb
Aa
Cbb
DDA
DCA
52
определить множество достижимых символов.
Решение. Найдем
множества Mi для заданной грамматики в
соответствии с представленным алгоритмом. Ими будут множества M 1 = {A,
B, S},
M2 = M1  {C}, M3 = M2 = {A, B, S, С} - множество достижимых
символов. D - недостижимый символ, а значит бесполезный.
Замечание.
Нетерминальный
символ,
соответствующий
аксиоме
грамматики, всегда считается достижимым.
Рассмотрим алгоритм выделения производящих символов. Он работает
с конца вывода.
1. Обозначим через Q1 множество всех нетерминальных символов, для
которых в G имеются правила вида:
  ,
  V*,
A  W.
Все символы множества Q1 - производящие.
2. Qi = Q1 .
3. Qi-+1 = Qi  Qi‘, где Qi‘ - множество нетерминальных символов левых
частей правил, для которых в грамматике имеются правила вида: A 
,   (V  Qi)*.
4. Если Qi+1  Qi , то Qi = Qi+1 и переход к пункту 3.
5. Окончание алгоритма.
Qi+1 - множество производящих символов. Его мощность
m  W .
53
Пример. Для заданной грамматики вида:
S A D A
S B
DABcA
DCA
Cbb
ADC
DDA
A  a.
определить множество производящих символов.
Решение. Найдем
множества Qi для заданной грамматики в
соответствии с представленным алгоритмом. Ими будут множества Q1 = {A,
С}, Q2 = Q1 {D, S}, Q3 = Q2 = {A, D, S, С} - множество производящих
символов. B - непроизводящий символ, а значит бесполезный.
После преобразования грамматики по вышеописанным алгоритмам
получаем
грамматику,
не
содержащую
бесполезные
(несущественные)
символы.
Удаление цепных правил
Цепные правила - это правила вида :
A  B,
A, B  W. Назначение
процедуры удаления цепных правил состоит в сокращении памяти требуемой
под дерево вывода. Эта процедура состоит из 2-х этапов:
1. Для каждого нетерминального символа A  W составляется
множество WA, состоящее из нетерминальных символов, выводимых
из A, причем A  WA .
2. В грамматике выделяют не цепные правила вида:
  ,
  W.
54
Они записываются в новую грамматику для каждого   WA , для
которого существует выводимость  из .
Пример. Для заданной грамматики вида:
G = {V, W, A, P};
V={a};
W={A, B, C};
P = { A  B, B  C, C  a }
удалить цепные правила, сохранив основные свойства грамматики.
Решение. Найдем
множества Wi для заданной грамматики в
соответствии с представленным алгоритмом. Ими будут множества:
WA = {A, B, C}; WB = { B, C }; WC ={ C } .
Что позволяет записать новые правила грамматики, в которых нет цепных
правил, но сохраняется порождаемый формальный язык.
P’= {Aa, Ba, Ca}.
Пример. Для заданной грамматики вида:
G = {V, W, I, P};
V = {a, b};
W = { A, B, C, D, I };
P = { I  A, A  a C , I  B, B  C, C  D, D  b }
удалить цепные правила, сохранив основные свойства грамматики.
Решение. Найдем
множества Wi для заданной грамматики в
соответствии с представленным алгоритмом. Ими будут множества:
55
WI = { I, A, B, C, D }; WA = { C, D };
WB ={ C, D }; WC = { D }.
Что позволяет записать новые правила грамматики, в которых нет цепных
правил, но сохраняется порождаемый формальный язык.
P’ = { I  a C, A  a C , I  b, B  b, C  b, D  b }.
Замечание. Достоинство грамматик без цепных правил состоит в
отсутствии циклов в выводах и ни одна цепочка в выводе не повторяется.
2.4. Операции над языками
Класс контекстно-свободных языков замкнут относительно объединения
и не замкнут относительно пересечения и дополнения. Это говорит о том, что
теоретико-множественные операции, за исключением объединения, не имеют
естественной синтаксической интерпретации. С этой точки зрения большой
интерес представляют операции, связанные с подстановками языка в язык [ 3 ].
Пусть L0 - язык, заданный грамматикой:
G0 = {V0 , W0 , R0 , I 0},
a  V0;
L1 - язык, заданный грамматикой G1 = {V1 , W1 , R1 , I1} .
Определение. Подстановка языка L1 в язык L0 вместо символа a - это
операция, сопоставляющая языкам L0 и L1 язык L = L0 ( a  L1 ), состоящий
56
из всех цепочек L0, в которых
вместо символа a
подставлена некоторая
цепочка из L1.
Обобщением рассмотренной подстановки является подстановка
L = L0 ( a1  L1 , ... , ak  Lk) нескольких языков.
Пример. Пусть заданы языки вида:
L0 = { a, ( a + a ), ( a + a + a), ... }
L1 = { b, bb, bbb, ... }
требуется выполнить подстановку L1 в L0.
Решение. Подстановка L1 в L0 будет иметь вид:
L = L0 ( a  L1 ) = L = { b, bb, bbb,...,( b + b), (bb + b), ...}.
Определение. Конкатенация языков L0 и L1 - эта операция
L0L1, сопоставляющая языкам L0 и L1 язык L, содержащий цепочки,
представляющие собой парное сцепление цепочек языков L0 и L1.
Пример. Пусть заданы языки вида:
L0 = { a, (a+a), (a+a+a), ... } L1 = { b, bb, bbb, ... }
требуется выполнить конкатенацию L1 и L0.
Решение. Конкатенация L1 и L0 будет иметь вид:
57
L = L0L1 = { ab, abb, abbb, ( a+a )b, ...}.
Введем в рассмотрение степенные обозначения конкатенаций
LL=L2 ,
LLL=L3, ... .
Подстановки будем обозначать следующим образом:
L 2a  L (a  L )
L 'a  L
L 3a  L 2a (a  L )
Определение. Итерацией L* языка L называется язык вида:
L* = {  }  L  L2  ...  Ln ,
где {  } - пустая цепочка.
Замечание. Не следует путать язык, содержащий одну пустую цепочку,
с пустым языком, не содержащим ни одной цепочки, так как
L {} = {} L = L, а L =  для любого L.
58
2.5. Право-линейная и автоматная грамматики
Определение. Грамматика называется право -линейной, если правая
часть каждого правила содержит не более одного нетерминала, причем он
является самым правым символом.
Правила право линейной грамматики имеют вид:
A   B,
A  ,
  V* , B  W.
Определение. Грамматика называется автоматной, если ее правила
имеют вид:
A  x B, A  x,
Синтез
конечных
грамматикой,
A  ,
x  V,
автоматов,
предусматривает,
что
B W.
распознающих
такая
язык,
грамматика
порождаемый
должна
быть
автоматной.
Пример. Преобразовать грамматику, заданную правилами вида:
1. S  a A
4. A  a b b S
2. S  b c
5. A  c A
3. S  A
6. A  
к автоматной.
Решение. Последовательно будем вводить новые нетерминалы в
59
тех правилах, где необходимо обозначить цепочку нетерминалов и терминалов
или одних терминалов одним символом. Новые правила примут вид:
1. S  a A
6. S  
2. S  b К1
7. A  a K2
3. K1  c
8. K2  b K3
4. S  a K2
9. K3  b S
5. S  c A
10. A  c A
12. A  
60
3. Теория автоматов
3.1. Введение
Теория автоматов лежит в основе теории построения компиляторов.
Конечный
автомат
-
одно
из
основных
понятий.
Под
автоматом
подразумевается не реально существующее техническое устройство, хотя
такое устройство может быть построено, а некоторая математическая модель,
свойства и поведение которой можно имитировать с помощью программы на
вычислительной машине. Конечный автомат является простейшей из моделей
теории автоматов и служит управляющим устройством для всех остальных
видов автоматов. Конечный автомат обладает рядом свойств:
 конечный автомат может решать ряд легких задач компиляции.
Лексический блок почти всегда строится на основе
конечного
автомата.
 работа конечного автомата отличается высоким быстродействием.
 моделирование конечного автомата требует фиксированного объема
памяти, что упрощает проблемы, связанные с управлением памятью.
 существует ряд теорем и алгоритмов, позволяющих конструировать и
упрощать конечные автоматы.
В литературе существует несколько отличных определений конечного
автомата. Однако, общим в них является то, что конечный автомат
моделирует вычислительное устройство с фиксированным объемом памяти,
которое читает последовательности входных символов, принадлежащие
некоторому входному множеству. Принципиальные различия в определениях
связаны с тем, что автомат делает на выходе. Выходом автомата может быть
указание на то « допустима » или нет данная входная цепочка. « Допустимой »
61
называется правильно построенная или синтаксически правильная цепочка.
Например, цепочка, которая должна изображать числовую константу, считается
построенной неправильно, если она содержит две десятичные точки.
Определение. Конечный автомат - это
формальная система, которая
задается с помощью следующих объектов [3]:
 конечным множеством входных символов;
 конечным множеством состояний;
 функцией переходов, которая каждой паре (текущее состояние,
входной символ) ставит в соответствие новое состояние;

начальным состоянием;
 подмножеством состояний, выделенных в качестве допускающих или
заключительных.
Пример. Разберем работу контроллера, проверяющего четно или нечетно
число
единиц в произвольной цепочке, состоящей из нулей и единиц.
Соответствующий конечный автомат должен «допускать» все цепочки,
содержащие нечетное число единиц и «отвергать» цепочки с четным их
числом. Назовем этот автомат «контроллером четности». Считаем, что
символы, отличные от 0 и 1 нельзя подавать на вход автомата.
Итак, входной алфавит контроллера есть множество {0, 1} . Считаем,
что в конкретный момент времени конечный автомат имеет дело лишь с
одним входным символом, а информацию о предыдущих символах входной
цепочки сохраняет с помощью конечного множества состояний. В качестве
множества состояний будем рассматривать множество { чет, нечет }, одно из
этих состояний должно быть выбрано в качестве начального. Пусть им будет
62
состояние {чет}, поскольку на первом шаге число прочитанных единиц равно
нулю, а нуль есть четное число. При чтении очередного входного символа
состояние автомата меняется, причем новое его состояние зависит от входного
символа и текущего состояния. Такое изменение состояния называется
переходом. Может оказаться, что новое состояние совпадает со старым.
Работа автомата может описываться математически функцией переходов
вида
(Sтек., x ) = Sнов.
Иначе это можно записать следующим образом:
( чет., 0)= чет.
( чет., 1)= нечет.
( нечет., 0) = нечет.
( нечет., 1) = чет.
Контроллер имеет единственное допускающее состояние НЕЧЕТ, а ЧЕТ есть
« отвергающее » состояние. Отразим последовательность переходов автомата
при подаче на его вход цепочки 1101.
ЧЕТ 
1 НЕЧЕТ  1 ЧЕТ 0 ЧЕТ 1 НЕЧЕТ
Таблица переходов такого автомата имеет вид:
0
1
чет
чет
нечет
нечет
нечет
чет
Определение. Конечный автомат - это формальная система
S = { A, Q, , ,V },
объекты которой следующие:
A - конечное множество входных символов (множество терминалов);
63
Q - конечное множество внутренних состояний автомата (множество
нетерминалов);
V - конечное множество выходных символов (выходной алфавит);
 - функция переходов автомата из одного состояния в другое, для которой
характерно
A  Q  Q;
 - функция выходов, определяющая отображение вида:
A  Q  V.
3.2. Способы представления конечных автоматов
Конечный автомат можно представлять несколькими способами:
- ориентированным графом (графом состояний), в котором
состояния есть вершины графа, а дуги есть переходы между
состояниями:
a3,V3
q2
q4
a1,V1
a5,V6
q1
a3,V5
a2,V2
q3
q5
a4,V4
q6
a7,V8
ai - символы входного алфавита, вызывающие переходы; Vi
- символы
выходного алфавита; qi - состояния автомата.
- таблицей переходов, в которой по строкам располагаются
64
состояния автомата, а по столбцам - символы входного алфавита. Клетки
таблицы заполняют состояния, в которые переходит автомат под действием
входных символов, а также символы выходного алфавита, соответствующие
реакции автомата на входной символ. Например,
a1
q1
q2, V1
a2
a3
a4
a5
a6
q3, V2
начальное
состояние
q2
q4, V3
q3
q4
q5, V4
q5, V5
q5, V6
q5
q6, V7
q6
конечное
состояние
- матрицей переходов, которая представляет собой квадратную
матрицу, строки и столбцы которой соответствуют внутренним состояниям
автомата. Клетки матрицы заполняются входными символами ak ,при которых
автомат переходит из состояния qi
в состояние qj , а также выходными
символами, соответствующими паре (ak , qi ) . Например,
65
q1
q1
q2
q3
a1, V1
a2, V2
q4
q5
q6
начальное
состояние
q2
a3, V3
q3
a4, V4
q4
a3, V5
a5, V6
q5
a6, V7
q6
конечное
состояние
Определение. Детерминированным конечным автоматом называется
такой автомат, каждая клетка таблицы переходов которого не содержит
состояний больше одного. В противном случае
автомат называется
недетерминированным.
Определение. Конечный автомат называется полностью определенным,
если его таблица переходов не содержит пустых клеток. Иначе автомат
называют частично определенным.
66
Процедура приведения недетерминированного автомата
к детерминированному виду
1. В таблице переходов определяется клетка, в которой содержится
более чем одно состояние, например, qi и qj .
2. Строка i и строка j накладываются друг на друга, и в таблице
переходов появляется новая «склеенная» строка.
3. Если состояние qi или qj присутствует еще в какой-либо клетке
таблицы переходов, то соответствующая строка i или j сохраняется в
таблице, иначе удаляется после «склеивания».
Переход от не полностью определенного (частично определенного) автомата
к полностью определенному в некоторых случаях может осуществляться
заданием состояния ошибки, которое вносится во все пустые клетки таблицы.
Понятие изоморфизма двух автоматов
Пусть заданы два автомата:
ST ={ AT, QT,  T,  T, VT},
SR={ AR, QR,  R,  R,VR}.
Определение. Автоматы ST и SR изоморфны, если элементы множеств
входных символов, выходных символов, состояний одного автомата можно
переименовать так, что таблицы их переходов совпадут.
67
Определение. Пусть ST и SR - два автомата с одинаковыми входными и
выходными алфавитами. Состояния qT и qR называются эквивалентными, если
для любого , где  - входной символ, справедливы равенства
T (qT , ) = R (qR , ),
T (qT , ) = R (qR , ).
Определение. Состояние q’ QT и q’’ QR
называются псевдо
эквивалентными, если область определения q’ и q’’ одна и та же и в этой
области q’ и q’’ эквивалентны.
Определение. Автоматы ST и SR называются псевдо эквивалентными,
если для любого состояния автомата ST найдется псевдо эквивалентное
состояние автомата SR и наоборот.
Замечание. Для полностью определенных автоматов отношение псевдо
эквивалентности будет являться отношением эквивалентности.
Пример. Для автомата, заданного следующей таблицей переходов
a1
a2
a3
q1
2,0
-
3,-
q2
-
1,-
3,0
q3
2,1
1,-
3,0
определить наличие эквивалентных и псевдо эквивалентных состояний.
68
Решение. Рассмотрим состояния q2 и q 3 . Область определения для q2
принадлежит
области определения q3. Кроме того на всей области
определения q2 для   имеют место равенства
( q2,  )  ( q3,  ),
 ( q2,  )   ( q3,  ),
где ‘  ‘ - знак псевдоэквивалентности.
Состояние q3
может обрабатывать
больше входных символов, чем
состояние q2. Поэтому, если в автомате состояние q2 заменить состоянием q3, и
переход в q2 заменить на переход в q3, то получим автомат с большими
возможностями, чем предыдущий. В таком случае говорят, что q 3 покрывает
состояние q2.
Определение. Автомат ST покрывает автомат SR , если для  qi  QR
найдется состояние qi  QT , покрывающее его.
Переход от автомата
к покрывающему его автомату нельзя назвать
эквивалентным преобразованием.
3.3. Минимизация числа состояний автомата
Теорема. Для любого автомата существует минимальный автомат с
точностью до изоморфизма.
Алгоритм Мили
Пусть задан автомат S с n состояниями. На каждом шаге алгоритма будем
строить некоторое разбиение множества состояний Q на классы c ij, где i номер шага, j - номер класса. Разбиение на i + 1 шаге получается разбиением
классов, полученных на i шаге.
69
1. Два состояния q’ и q’’ относятся в класс c1j, если при    A для
функций выхода справедливо равенство
( q’,  ) = ( q’’,  ).
2. q’ и q’’ из класса cij относятся к классу ci+1,j , если для    A
найдется
такое
j,
для
которого
справедливы
следующие
отношения
принадлежности
( q’,  )  cij,
( q’’, )  cij.
Вычисления по пункту 2 алгоритма продолжаются до тех пор, пока
процесс разбиения на классы может быть продолжен, в противном случае
процесс останавливается, и полученные заключительные классы состояний
будут представлять собой классы эквивалентных состояний.
Пример. Для автомата, заданного таблицей переходов вида:
a1
a2
a3
q1
2,0
4,1
4,1
q2
1,1
1,0
5,0
q3
1,1
6,0
5,0
q4
8,0
1,1
1,1
q5
6,1
4,1
3,0
q6
8,0
9,1
6,1
q7
6,1
1,1
3,0
q8
4,1
4,0
7,0
q9
7,0
9,1
7,1
70
построить разбиение состояний на классы эквивалентности.
Решение. Построим классы c1j в соответствии с первым шагом
алгоритма:
c11 = { q1, q4, q6, q9 } , c12 = { q2, q3, q8 }, c13={ q5, q7 }.
Следующие классы будем выделять в соответствии с пунктом 2 алгоритма:
c21 = { q1, q6, q4}, c22 = { q9 }, c23 = { q2, q3, q8}, c24 = { q5, q7 };
c31 = { q1, q4 }, c32 = { q6 }, c33 = { q9 }, c34 = { q2, q3, q8},
с35 = { q5, q7 }; c41 = { q1, q4 }, c42 = { q6 }, c43 = { q9 },
c44 = { q2, q8 }, c45 = { q3 }, c46 = { q5, q7 }.
Из
эквивалентных состояний, принадлежащих одному классу,
оставляем
только одно состояние. В итоге, множество состояний минимизированного
автомата представится множеством {q1, q6, q9, q2,q3, q5 }. Следовательно, новая
таблица переходов будет иметь на три строки меньше, поскольку на три
состояния уменьшилось общее число состояний заданного автомата. Таблица
переходов минимального автомата будет следующей:
a1
a2
a3
q1
2,0
1,1
1,1
q2
1,1
1,0
5,0
q3
1,1
6,0
5,0
q5
6,1
1,1
3,0
q6
2,0
9,1
6,1
q9
5,0
9,1
5,1
71
Алгоритм минимизации автомата по методике Мура
1. В таблице переходов отыскиваются строки, у которых есть рабочие
состояния в одинаковых столбцах. Рабочим состоянием считается
состояние отличное от состояния ошибки. Состояния, которым
соответствуют такие строки, заносятся в группы.
2. Рабочие состояния каждой группы проверяются на эквивалентность.
3. Если
среди
рабочих
состояний
групп
установлена
эквивалентность, то состояния, образующие группу, считаются
эквивалентными.
Пример. Для автомата, заданного таблицей переходов вида:
q0
q1,3
q2
q4
q5
q6
q7
q8,19
q9,19
q10
q11
q12
q13
q14,17
q15,18
q16
q19
x0
q7
q2
x1
x2
x3
x4
x5
x6
q10
x7
q1,3
q4
q5
q6
q8,19
q9,19
q9,19
q0
q0
q19
q19
q11
q14,17
q12
q13
q19
q15,18
q16
q19
q19
72
построить минимальный автомат, используя методику Мура.
Решение. Построим группы состояний, подозреваемых на
эквивалентность, в соответствии с алгоритмом. Ими будут:
[ q4; q5; q6; q7 ] ; [ q8, 19; q 9, 19 ]; [ q13; q16 ]; [ q2; q11; q14,17 ].
Состояния
внутри
выделенных
групп
необходимо
проверить
на
эквивалентность. После проверки и удаления из групп состояний, не
удовлетворяющих условию эквивалентности, классы эквивалентных состояний
примут вид:
[ q5; q6; q7 ];
[ q8, 19; q 9, 19 ];
[ q13; q16 ].
Введем новые обозначения состояний автомата:
r0 = { q5, q6, q7};
r6 = { q10 }; r7 ={ q11 };
r1 = { q9,19, q8,19 };
r8 ={ q12 };
r2 = { q13, q16 };
r9 = { q14,17 };
r3 = { q1,3 };
r10 = { q15,18 };
r4 = { q2 };
r11 = { q19 } - заключительное состояние;
r5 = { q4 };
r12 = { q0 } - начальное состояние.
73
Таблица переходов минимального автомата примет вид:
x0
r0
r1
r2
r3
r4
r5
r6
r7
r8
r9
r10
r11
r12
x1
x2
x3
x4
x5
r12
r11
x6
x7
r1
r11
r4
r5
r0
r0
r9
r7
r8
r2
r10
r2
r0
r11
r6
r3
3.4. Использование сети Петри при переходе от грамматики к
автомату
Сеть Петри может отражать асинхронность, параллелизм,
недетерминированность вычислительных процессов,
а также динамику их
функционирования. Для модели вычислительного процесса, представленной
сетью Петри, характерны простой синтаксис,
наглядность в сочетании с
широкими функциональными возможностями [4].
Определение. Сеть Петри - формальная система S = { P, T, E, 0 },
определяемая совокупностью объектов: - конечным множеством позиций
P; - конечным множеством переходов T; - конечным множеством дуг Е,
74
E  ( P  T )  ( T  P ); - начальной маркировкой 0, отображающей
множество P на множество N, 0 : P  N,
Графическим
изображением
N = {0, 1, ...}.
сети
Петри
является
двудольный
ориентированный граф с двумя типами вершин P и T. Поставим в соответствие
нетерминальным символам грамматики позиции сети Петри, а терминальным переходы. Если в правой части некоторого правила имеет место конкатенация
терминалов, то в сети Петри между переходами, помеченными терминалами,
должны появляться дополнительные позиции.
Пример. Фрагмент сети Петри, соответствующий правилу
S  x7 x0 x1 A
с помощью элементов сети Петри представится следующим образом:
S
x7
S1
x0
S2
x1
A
Маркером (  ) отмечается позиция, соответствующая аксиоме
грамматики.
Пример. Построить сеть Петри для грамматики, правила которой имеют
вид:
S := Х7 Х0 Х1 <A> | Х7 Х3 Х7 < B> | Х0 < C>
A := Х7 <D> | Х7
B := Х7 <E> | Х7
C := Х7 <E> | Х7
D := Х4 < S> | Х5
E := Х4 <S> | Х5
75
Решение. Построим сеть в соответствии с известными правилами
построения сети. Граф примет вид:
x4
x0
S1
x7
S
x1
S2
x7
A
x7
x5
D
x7
x3
x7
S3
S4
x4
x7
B
x5
Z
E
x7
x0
x7
C
x7
Как показано на рисунке, в сеть введена заключительная позиция Z, в
которую направлены дуги из всех переходов, ранее не имевших исходящих дуг.
Анализ сети показывает, что в ней
имеются идентичные фрагменты.
Например, позиции A, B, C содержат равное количество выходных переходов
и они одинаковы (выходные переходы - x7), то же самое можно сказать
относительно
позиций D и E (выходные переходы - x4 и x5). Правила
функционирования сети Петри не изменятся, если склеить идентичные
фрагменты. Также попарно можно склеить позиции S1 и S3, но уже по
входным переходам. Этап склеивания соответствует минимизации числа
состояний автомата. Склеенный граф примет вид:
76
x4
S1, S3
x0
x7
x1
S2
A, B, C
S4
S
x3
x7
x7
D, E
x0
x7
x5
Z
3.5. Сети Петри. Маркировка
Множество входных и выходных позиций перехода ti  T обозначим
через
I(ti)
и O(ti) соответственно. Аналогично, записи I(pi)
и O(pi) есть
обозначения входного и выходного множеств переходов для позиции pi. Тогда
сеть Петри может быть задана как формальная система следующим образом:
S = < P, T, I, O, 0 > , где I =  I ( ti ) , O =  O ( ti ),
T
T
P = I  O.
Представление сети Петри в виде двудольного графа позволяет задать
структуру сети Петри статически. Динамика в модель вносится механизмом
77
смены
маркировки
(разметки)
позиций
и
соглашением о
правиле
срабатывания ( реализации ) переходов.
Начальная маркировка присваивает позициям сети Петри целые числа ( в
том числе нуль ).
На графе маркировка задается следующим образом: в позициях
проставляют определенное число точек, носящих название маркеров или
фишек. Передвижение маркеров по сети
осуществляется посредством
срабатывания ее переходов. Сработать может только возбужденный переход, то
есть такой переход ti  T, во всех входных позициях которого содержится хотя
бы по одному маркеру. Срабатывание перехода может произойти через любой
конечный промежуток времени после возбуждения перехода. Результатом
срабатывания является изъятие по одному маркеру из каждой входной позиции
срабатывающего перехода и добавление маркера во все его выходные позиции.
Изъятие маркеров и их перемещение считается мгновенным, с нулевой
задержкой. Срабатывание какого-либо возбужденного перехода вызывает
смену маркировки сети. Текущая маркировка сети понимается как состояние
сети в данный момент времени. Можно считать, что динамика поведения сети
Петри (ее функционирование во времени) адекватно может быть описана
моделью вида: S = < 0,  ,  >, где 0 - начальная маркировка;  отношение следования маркировок;  - множество допустимых маркировок
данной сети достижимых из 0.
Маркировка может задаваться вектором  = (1, ... n ), число компонент
которого соответствует числу позиций сети. Значение i - й компоненты i  n
есть натуральное число равное числу маркеров в позиции.
78
Пример. Для сети Петри, заданной в виде графа:
P1
P2
t1
P3
t2
P4
t3
t4
t5
P5
P6
P7
рассмотреть следование маркировок из 0.
Решение. Начальная маркировка имеет следующий вид:
0 = ( 2, 1, 0, 0, 0, 1, 0), где цифра есть число маркеров в соответствующей
позиции. По определению возбужденным переходом сети при маркировке 0
является переход t1. Его срабатывание приводит сеть в новое состояние
0  1, 1 =(1, 0, 1, 1, 0, 1, 0). Далее возбуждаются переходы t4, t2, t3. Из
переходов t2 и t3 может сработать только один, так как срабатывание одного
перехода снимает возбуждение другого. Рассмотрим все возможные варианты:
79
t
2
 1 
 2 ,
 2  (1,0,0,1,1,1,0),
t4
 1   3 ,
 3  (1,0,1,0,0,1,1).
Отметим, что в сети возможно одновременное срабатывание нескольких
переходов , например, ( t2, t4 ) или ( t3, t4 ) после срабатывания перехода t1.
Рассмотрим соответствующие этим вариантам состояния сети:
0  1  4, 4 = ( 1, 0, 0, 0, 1, 1, 1) - при срабатывании ( t2, t4 ),
0  1  4, 4 = (1, 0, 0, 0, 1, 1, 1) - при срабатывании ( t3, t4 ).
Для задания динамики сети Петри используют диаграмму достижимых
состояний (маркировок). Диаграмма представляет собой ориентированный
граф, вершины которого есть достижимые маркировки из множества M, а дуги
направлены из a в b . Дуги, если необходимо, помечают обозначением тех
переходов, срабатывание которых является причиной смены маркировки.
Пример. Построить
диаграмму достижимых состояний для сети
предыдущего примера.
80
Решение.
(2, 1, 0, 0, 0, 1, 0)
t1
(1, 0, 1, 1, 0, 1, 0)
t2t3
(t2t3)t4
(1, 0, 0, 1, 1, 1, 0)
t4
(1, 0, 0, 0, 1, 1, 1)
t5
(1, 1, 0, 0, 1, 1, 0)
t1
(0, 0, 1, 1, 1, 1, 0)
t4
t2t3
( 1, 0, 1, 0, 0, 1, 1)
t5
( 1, 1, 1, 0, 0, 1, 0)
t2t3
t2t3
t2t3
t4
t1
( 0, 0, 2, 1, 0, 1 ,0)
(t2t3)t4
(t2t3)t4
(0, 0, 0, 1, 2, 1, 0)
t4
(0, 0, 0, 0, 2, 1, 1)
t5
(0, 1, 0, 0, 2, 1, 0)
t2t3
(0, 0, 1, 0, 1, 1, 1)
t5
t2t3
t2t3
t4
( 0, 0, 2, 0, 0, 1 ,1)
t5
( 0, 1, 2, 0, 0, 1 ,0)
t2t3
( 0, 1, 1, 0, 1, 1 ,0)
(t2t3)t4 - означает, что одновременно может сработать одна из пар
переходов:
(t2t4)
или
(t3t4).
параллельности вычислительных
Диаграмма
отражает
возможность
процессов. В рассматриваемом примере
множество допустимых маркировок (состояний) равно 16. Причем из
выделенной в качестве начальной маркировки 0 достижима лишь одна
заключительная (тупиковая) маркировка T = ( 0, 1, 0, 0, 2, 1, 0), из которой
уже не может идти продвижение маркеров по сети. Это гарантирует
однозначное завершение процесса, моделируемого сетью. По диаграмме
81
можно проследить множество последовательностей срабатывания переходов
(траекторий процесса). Одна из возможных траекторий: t1 t3 t4 t5 t1 t4 t5 t2.
В общем случае, начальной маркировке может соответствовать несколько
результирующих маркировок. Достижение каждой из них возможно при
определенном распределении скоростей срабатывания переходов. В общем
случае в некоторых позициях сети Петри возможно накопление бесконечного
числа маркеров. Следовательно, множество допустимых состояний может не
быть конечным. В сети Петри может не существовать тупиковых маркировок.
Такого рода сетями моделируются циклические или автономные процессы.
3.6. Классификация сетей Петри
Классификация
сети
Петри
базируется
на
качественных
и
количественных ограничениях, накладываемых на допустимые конфигурации
(статические ограничения) и возможные типы маркирования (динамические
ограничения).
Динамические ограничения
1. Сеть Петри называется k ограниченной ( k > = 1 ), если на
множестве ее достижимых состояний не найдется ни одной позиции
pi  P, для которой ( Pi) > k ,то есть в которой не появляется более k маркеров.
a) сеть 2 - ограничена:
82
b) сеть не ограничена :
2. Cеть Петри называется безопасной, если она 1- ограничена.
3. Сеть Петри называется ограниченной, если найдется такое целое k,
для которого она k - ограничена.
4. Сеть Петри называется 1- консервативной, если в процессе
функционирования сети общее число маркеров в ней остается постоянным.
a) сеть не 1 - консервативная:
b) сеть 1 - консервативная:
83
5. Сеть Петри называется консервативной, если для любого перехода
tr  T существуют такие целые положительные коэффициенты ai и
aj ( ai, aj  0 ), не меняющие в процессе функционирования сети
Петри, при которых справедливо равенство: ai (Pi) = aj (Pj), где
суммирование производится по Pi  I(tr) и Pj  O(tr) соответственно.
a) сеть консервативная:


2 1 = 1 1 + 1 1
b) сеть не консервативная:
6. Сеть Петри называется устойчивой, если для всех t i, tj  T, ( ti  tj ) и
для любой допустимой маркировки, при которой ti и tj возбуждены,
срабатывание одного из них не может снять возбуждение другого.
a) сеть неустойчивая:
84
б) сеть устойчивая:
Статические ограничения
1. Сеть Петри называется сетью свободного выбора, если для любых
двух переходов, имеющих общую входную позицию, эта позиция
единственна для каждого перехода:
a) сеть свободного выбора:
б) сеть несвободного выбора:
2. Сеть Петри называется простой, если любая пара
85
ti, tj  T, ( ti  tj ) имеет не более одной общей входной позиции pi  P.
3. Сеть Петри называется маркированным графом, если каждая
позиция имеет только по одному входному и одному выходному переходу.
4. Сеть Петри называется автоматной, если каждый переход имеет не
более одного входа и выхода.
5. Сеть Петри называется бесконфликтной, если, либо для каждой ее
позиции существует не более одной исходящей дуги, либо если существует
позиция, являющаяся входом для более, чем одного перехода, она
является
одновременно и выходной для каждого такого перехода.
a) сеть бесконфликтная:
б) сеть конфликтная:
86
3.7. Синхронные и асинхронные автоматы
Время, в течение которого не происходит изменения состояния входа
автомата, обозначим через T, и в зависимости от того, чем определяется
длительность этого интервала времени, будем различать два класса автоматов:
синхронные и асинхронные.
Синхронный автомат характеризуется тем, что в
схеме существует
генератор тактовых (синхронизирующих) сигналов (ТГ) и входные сигналы
могут воздействовать на автомат лишь при наличии сигнала от тактового
генератора. Таким образом, величина T строго фиксирована.
ТГ
t
T

xj
t
вход автомата
t
T - длительность тактового импульса, - интервал между импульсами.
Автомат может воспринимать новое состояние входа лишь после того,
как он перешел в определенное внутреннее состояние. Поэтому частота
87
тактового генератора выбирается так, чтобы до появления следующего сигнала
от тактового генератора автомат успел перейти в соответствующее внутреннее
состояние. Обозначим через  время, необходимое автомату для перехода из
одного внутреннего состояния в другое. Тогда
автомата необходимо выполнение условия
для нормальной работы
 >> 
max,
где  = T + .
Состояние входа и внутреннее состояние автомата на протяжении времени Т
остаются неизменными.
Отметим, для синхронного автомата характерно:

входные сигналы воздействуют на автомат в фиксированный
момент времени (T = const);
 изменение внутреннего состояния автомата осуществляется в момент
времени t, когда нет воздействия входного сигнала.
В асинхронном автомате длительность интервала времени T, в течение
которого остается неизменным состояние входа, является переменной
величиной и определяется моментами изменения состояния входа. Считается ,
что изменение состояния входа асинхронного автомата может произойти лишь
после того, как автомат перешел в определенное внутреннее состояние . Для
этого требуется выполнение условия T
miin
>> 
max
, где T miin - наименьший
интервал времени, в течение которого сохраняется неизменным состояние
входа.
Для асинхронного автомата характерно:
 длительность интервала времени T - величина переменная и она
определяется моментами изменения состояния входа автомата.
88
 переход в новое внутреннее состояние осуществляется при неизменном
состоянии входа.
Замечание. Следует различать синхронный и асинхронный режимы
работы всего управляющего автомата и синхронные и асинхронные блоки. При
синхронном режиме работы автомата могут использоваться как синхронные,
так и асинхронные функциональные блоки.
3.8. Модели автоматов Мили и Мура
В классе синхронных конечных автоматов рассматриваются два типа
автоматов: модель Мура и модель Мили [5]. Модель Мили (автомат Мили)
описывается функцией переходов вида: q (t + 1) =  (a (t), q (t)) и функцией
выходов вида:  (t) =  (a (t), q (t)) , где a (t) - состояние входа, q (t) внутреннее состояние автомата. Состоянием автомата считаем пару
(a (t), q (t)).
Модель Мура (автомат Мура) определяется функцией переходов вида:
q (t + 1) =  (a (t), q(t )) и функцией выходов вида:  (t ) =  (q ( t )).
Выход автомата Мура определяется только внутренним состоянием автомата и
не зависит от состояния входа в момент времени t. Такой автомат может
рассматриваться как частный случай автомата Мили. Действительно, для
автомата Мура можно записать q (t ) =  ( a ( t - 1 ), q ( t - 1 ) ), следовательно,
(t) = ( a( t - 1), q( t - 1)).
Различие между автоматами Мили и Мура состоит в том, что в автомате
Мили состояние выхода возникает одновременно с вызывающим его
состоянием входа, а в автомате Мура - с задержкой на один такт.
89
Поведение синхронного автомата определяется уравнениями:
 модель Мили:
q ( t + 1 ) =  ( a ( t ), q ( t ) );  ( t + 1 ) =  ( a ( t + 1 ), q ( t+1) )
 модель Мура:
q ( t + 1 ) =  ( a ( t ), q ( t ) ); ( t + 1 ) = ( a( t ), q( t )).
Поведение асинхронного автомата определяется уравнениями:
q ( t + 1 ) =  ( a ( t + 1 ), q ( t ) );
 ( t + 1 ) =  ( a ( t + 1 ), q ( t + 1) ).
3.9. Кодирование автомата
Как правило, во многих случаях состояния входа и выхода автомата
являются закодированными и задача кодирования автомата сводится к
кодированию (размещению) его внутренних состояний [5]. Каждый реальный
элемент памяти вносит определенную задержку, которая зависит от свойств
данного элемента памяти. Элементы памяти даже одного типа могут иметь
различные задержки сигналов. Если на вход двух элементов памяти подать
одновременно
сигнал,
то
сигналы
на
выходах
могут
появиться
не
одновременно. С этим обстоятельством связано явление, которое называется
состязанием элементов памяти.
90
Каждому внутреннему состоянию автомата в результате кодирования
сопоставляется определенная кодовая комбинация, состоящая из нулей и
единиц. Кодовая комбинация характеризует состояние элементов памяти.
Пример. Как показано ниже на рисунке, автомат из внутреннего
состояния xi под действием состояния входа ar может попасть в состояние xj,
а также может попасть в состояния
xk
и
xl
в зависимости от того, какой
элемент памяти раньше изменит свое состояние, если возможность таких
переходов отражена в таблице переходов автомата
ar
xi
000
xk 0 1 0
ar
ar
ar
xj
100
ar
xl
001
ar
xm
101
Если затем при том же состоянии входа ar автомат из xk или xl перейдет
во внутренне состояние xj, то такие состязания элементов памяти называются
допустимыми (не критическими). Для того, чтобы при этом не искажалась и
функция выходов автомата, с состояниями ( ar, xk ) и ( ar, xl ) нужно сопоставить
то же состояние выхода, что и с состоянием ( ar, xj ). Если же автомат из xl или
xk при состоянии входа ar перейдет в какое-либо другое внутреннее состояние
или не изменит своего внутреннего состояния, то такие состязания являются
критическими, то есть недопустимыми. Речь идет о недетерминированном
конечном автомате.
91
Будем говорить, что автомат работает устойчиво, если в процессе его
работы не возникают критические состязания элементов памяти, в противном
случае - автомат будет работать не устойчиво, что не допустимо.
Кодирование состояний автомата можно выполнить двумя способами.
Первый
способ
предусматривает,
чтобы
всем
соседним
внутренним
состояниям, то есть таким, между которыми должны быть переходы,
приписывались соседние кодовые комбинации. Такой способ требует
повышенного числа элементов памяти. Второй способ касается кодирования,
допускающего некритические состязания элементов памяти. При таком
кодировании сокращается число элементов памяти по сравнению с первым
вариантом кодирования. Оба способа имеют свои преимущества и недостатки.
Рассмотрим первый вариант кодирования, при котором всем внутренним
состояниям,
между
которыми
в
таблице
переходов
есть
переходы
приписываются соседние кодовые комбинации, отличающиеся одной цифрой.
Пример. Закодировать состояния автомата, представленного следующей
таблицей переходов
(в таблице принято сокращение записи, т.е.
qi
представлено просто числом i):
q1
q2
q3
q4
q5
q6
q7
q8
a1
1
2
8
7
6
2
7
8
a2
2
2
2
4
5
6
5
6
a3
4
3
3
4
7
8
7
8
код
000
001
011
010
100
101
110
111
92
Решение. Из первой строки видно, что между состоянием q1 и q2 или q4
существуют переходы, значит, этим состояниям можно приписать следующие
кодовые комбинации: q1  000, q2  001, q4  010. Аналогично кодируются
оставшиеся
состояния.
Ниже
приведен
граф,
описывающий
последовательность кодирования состояний автомата.
1
2
3
8
4
7
5
Такой способ кодирования
6
может потребовать повышенного числа
элементов памяти из - за наличия большого числа переходов для возможно
одного состояния. В ряде случаев, допустив некритические состязания, можно
осуществить кодирование при меньшем числе элементов памяти.
Если в графе переходов имеется контур нечетной длины, то закодировать
такой автомат соседним кодом без введения дополнительных внутренних
состояний не возможно (направление следования при этом не имеет значения).
Пример. Для автомата, представленного таблицей переходов
q1
q2
q3
q4
q5
q6
q7
q8
a1
1
5
5
1
5
5
5
8
a2
2
2
4
4
2
7
7
2
a3
8
3
3
6
8
6
7
8
Код
000
001
011
010
101
110
111
100
93
закодировать внутренние состояния, допустив некритические состязания
элементов памяти.
Решение. Выполним кодировку состояний. Граф последовательности
кодирования показан на рисунке
2
3
4
6
7
1
8
5
Анализ кодировки показывает, что имеет место несоответствие,
возникшее между состояниями q3 и q5, которые являются смежными по
переходам, а их коды отличаются двумя переменными вместо желаемой одной.
То же самое можно сказать относительно состояний q6 и q5. Для устранения
этого недостатка кодирования изменим таблицу переходов соответствующим
образом, допустив не критические состязания элементов памяти, т.е. из
состояния q3 можно перейти в состояние q5 через состояние q2 и тогда
разница в коде будет равна 1, что и требуется. Аналогично поступаем с q6
заменив в нем состояние q5 на q7. Результат прослеживается на измененной
таблице переходов автомата
q1
q2
q3
q4
q5
q6
q7
q8
a1
1
5
2*
1
5
7*
5
8
a2
2
2
4
4
2
7
7
2
a3
8
3
3
6
8
6
7
8
94
Рассмотрим
другой
способ,
предусматривающий
введение
дополнительной вершины. Для этого обратимся к графу состояния исходного
автомата, который примет следующий вид
001
000 1
a2
2
011
a3
a3
3
a1
a1
100 8
a1
9
a2
a2
4
a1
010
a3
101 5
a1
111 7
a3
a1
a2
6
110
a1
Как видно из рисунка, переход из q3 в q5 по a1 может быть заменен
переходами по a1 из q3 в дополнительную вершину q9 и из q9 в q5.
Аналогичные действия можно провести и в отношении замены перехода по a1
из q6 в q5 переходами из q6 в q7 и из q7 в q5.
Определение. Число внутренних переменных кода, изменяющих свои
значения при переходе автомата из одного состояния в другое, называется
расстоянием по Хеммингу между этими кодами.
В большинстве случаев необходимо так закодировать внутренние
состояния, чтобы обеспечить устойчивую работу автомата и наибольшее
быстродействие при заданной надежности, наименьшем объеме памяти и
95
простой комбинационной схеме. Однако эта задача настолько сложна, что до
настоящего времени не удалось получить комплексного ее решения.
Наименьшее
число
синхронного автомата с N
переменных
необходимых
для
кодирования
внутренними состояниями определяется по
формуле:
n =] log2 N [,
где скобки ] [ обозначают операцию взятия ближайшего сверху целого числа.
Чем меньше внутренних переменных изменяется при каждом переходе,
тем проще реализуется функция переходов. В силу этого вариант размещения
состояний автомата может выполняться в соответствии
минимальности
с критерием
расстояния по Хеммингу по всем переходам. Суть такого
размещения заключается в максимально возможном использовании соседних
кодов. Такой способ кодирования избыточен и может потребовать
n = 2  ] log2 N [ - 1
кодируемых переменных.
96
Пример. Для автомата, заданного таблицей переходов:
x0
r0
r1
r2
r3
r4
r5
r6
r7
r8
r9
r10
r11
r12
x1
x2
x3
x4
x5
r12
r11
x6
x7
r1
r11
r4
r5
r0
r0
r9
r7
r8
r2
r10
r2
r0
r11
r6
r3
Код
0000
1000
0101
0110
0010
0100
1011
0011
0111
1111
1110
1100
1010
выполнить кодировку внутренних состояний, используя код минимальной
длины.
Решение. При кодировании соседними кодами может возникнуть ситуация,
когда все соседние коды уже заняты, а состояния еще не закодированы. Такая
ситуация требует увеличения расстояния по Хеммингу на следующем шаге
кодирования. Такой подход к кодированию показан в столбце « код»,
присоединенном к таблице переходов автомата. Направление кодировки может
быть прослежено на следующем графе:
r0
r1
r11
r12
r6
r7
r8
r4
r5
r3
r9
r10
r2
97
Оказалось, что из 18 возможных переходов 15 являются соседними с
расстоянием 1; два перехода имеют расстояние 2, а один переход с r10 на r2
имеет расстояние 3. Суммарное расстояние по Хеммингу для 18 переходов
равно 22. Возможно, что существует и другое более эффективное решение.
Рекомендуется
отбирается
делать
лучший
несколько
вариант
в
вариантов
смысле
кодирования,
минимальности
из
которых
функционала
Махаланобиса:
Фм 
N
 [ri , rj ]  min ,
i, j  0
где i  j, N - число состояний. Через [ri , rj ] обозначено расстояние между
кодами ri и rj по Хеммингу.
3.10. Элементная база синтеза комбинационных схем
Определение. Логическая схема, которая используется для чтения
(записи) и хранения цифровой информации называется триггером [6].
По виду получаемых сигналов потенциальных или импульсных различают
статические и динамические триггеры.
В статическом триггере одному из устойчивых состояний условно
ставится в соответствие логическая единица, а другому - логический ноль.
В
динамическом
триггере
состоянию
«единица»
соответствует
циркуляция импульсов в триггере, а состоянию «ноль» отсутствие циркуляции.
98
Определение. RS - триггер это логическая схема с двумя обратными
связями, которая может находиться в одном из двух устойчивых состояний,
обеспечиваемых этими связями.
Рассмотрим работу схемы асинхронного триггера
y1
S
&
&
y2
R
Изменение состояния триггера вызывается входными сигналами в
соответствиями с уравнениями:
y1  S& y 2
y 2  R & y1
где R,S - входы
триггера, а y1, y2 - его выходы. Работу триггера легко
проследить по таблице:
S
0
0
1
0
R
1
0
0
0
Y1
0
0
1
1
Y2
1
1
0
0
99
Если под воздействием входного сигнала R=1 и S=0 - триггер находился в
состоянии «1» (Y1=0, Y2=1), то с помощью логической обратной связи он
сохраняет это значение и тогда, когда значение входного сигнала R
изменяется на противоположное. Триггер перейдет в новое состояние состояние «0» только при изменении входного сигнала S. Такой триггер
называется
триггером с раздельными входами, он запоминает входную
информацию, не преобразуя ее. Как показывает таблица, триггер может менять
свое состояние только при условии S  R.
Рассмотрим работу синхронного триггера :
y1
S
&
b
&
&
R
y2
a
В работу синхронного триггера вводится фазовый сигнал a для того,
чтобы выделять рабочую a = 1 и не рабочую a = 0 фазы триггера , а также
вводится индикатор b. На схеме это изображается дополнительным входом a,
выходом b и дополнительным логическим элементом  &. Работа такого
триггера может быть прослежена по таблице, где отражена смена сигналов в
схеме в зависимости от сигналов на входе триггера. Следует отметить, что
информация с триггера считывается только при в  0, то есть при наличии
разрешающего сигнала а = 1.
100
a
0
1
0
1
S
0
0
0
1
Рассмотрим
R
1
1
1
0
вопрос
y1
1
0
1
1
определения
y2
1
1
1
0
времени
b
0
1
0
1
переходного
процесса
необходимого триггеру для перехода из одного внутреннего состояния в
другое. Оно определяется числом логических элементов, изменивших свое
состояние на противоположное и средним временем такого срабатывания
относительно используемых базовых элементов. Если обозначить такое время
через Т, то время переходного процесса при переходе из нерабочей фазы в
рабочую будет tперех. проц. = 2T. Если на входах R  S , то по a = 1 начинается
рабочая фаза y1 = 0, y2 = 1, а затем b = 1. В нерабочей фазе по a = 0
b принимает значение 0. Длительность каждой фазы переходного процесса 2T.
Определение. D - триггер осуществляет запись, хранение и одно тактовую задержку входного сигнала.
Рассмотрим работу схемы D триггера:
T3
T2
u1
D1
q1
&
&
T1
u2
y1
&
&
&
&
D2
y2
q2
&
b
a
101
Работу такого триггера легко проследить по таблице:
a
0
1
0
y1
1
1
1
y2
1
0
1
q1
0
1
1
q2
1
1
0
u1
1
0
1
u2
1
1
1
b
0
1
0
D1
1
1
1
D2
0
0
0
В фазе гашения a = 0 основной T1 триггер погашен (Y1=Y2=1) , триггер T2
находится в рабочем состоянии, триггер - T3 в стадии гашения. Входы не
влияют на поведение схемы. Выход индикатора b = 0 . По a = 1 триггер T1
переходит в рабочее состояние, T2 гасится и тем самым разрешается запись в
T3 информации со входов D1 и D2, после этого b = 1. Таким образом, рабочая
фаза длится 4T, как и фаза гашения. Цикл работы схемы равен 8T.
Определение. T - триггер - устройство, предназначенное для записи, и
хранения цифровой информации, его специфика заключается в том, что в
рабочей фазе он принимает состояние, противоположное тому, в котором он
находился в предыдущей рабочей фазе. Рассмотрим схему Т - триггера:
b
T2
T1
q1
D1
p1
&
&
y1
&
&
D2
&
&
q2
&
p2
y2
а
102
Работа Т- триггера хорошо прослеживается по таблице:
a
1
0
1
0
1
y1
1
1
0
1
1
y2
0
1
1
1
0
q1
0
0
1
1
0
q2
1
1
0
0
1
p1
1
1
1
0
1
p2
1
0
1
1
1
b
1
0
1
0
1
D1
1
1
0
0
1
D2
0
0
1
1
0
Как показывает анализ таблицы, T - триггер в рабочей фазе принимает
состояние противоположное тому, в котором он находился в предыдущей
рабочей фазе.
Пусть фазовый сигнал a = 0 тогда триггер T1 погашен и его выходы не
влияют на состояния вентилей p1 и p2 и также на триггер T2.
При фазовом сигнале a = 1 в триггер T1 производится запись
информации с вентилей p1 и p2 и затем y2 = p1 и y1 = p2, что приводит к
изменению состояния T2 на противоположное.
После перехода T2 в состояние q1 = y2 и q2 = y1 изменяется состояние
того из вентилей, выход которого был равен 0. В результате p1 = p2 =1 и
переход из 1 в 0 выхода индикатора  b завершает переходной процесс.
Таким образом, при переходе в рабочую фазу триггер T1 попадает в
состояние противоположное тому, в котором он был в предыдущей рабочей
фазе. Длительность рабочей фазы составляет 5T.
При a = 0 гасится триггер T1, что ведет к изменению одного из вентилей
p1 или p2. В результате  b = 1, чем и завершается нерабочая фаза, ее
длительность составляет 3T, а полный цикл работы T - триггера равен 8T.
103
3.11. Структурный синтез автомата
Выберем в качестве структурной схемы автомата схему вида [7]:
z(t)
p1
derr
p2
Дешифр.
Комб.
xi
p3
z(t+1) Рег. 1
Рег. 2
схема
derr
dok
dok
t1
t2
НУ
Схема состоит из
комбинационной схемы, реализующей функцию
возбуждения элементов памяти, дешифратора и регистров 1 и 2. Регистры это
элементы памяти, построенные на основе
триггеров. При синхронной
реализации автомата полагается, что все переходные процессы в
схеме
успевают закончиться к моменту прихода сигнала t1, стробирующего
(разрешающего) прием информации с выходов комбинационной схемы в
триггеры регистра 1. Второй триггерный регистр, прием информации в
который стробируется синхросигналом t2, нужен для того, чтобы все состояния
автомата сделать устойчивыми. Триггеры регистра 1 будем называть
вспомогательными, а регистра 2 - основными. В схеме обязательно
формирование сигналов
derr - сигнала ошибки
и
dok
- сигнала
принадлежности входной цепочки символов языку заданной грамматики.
Комбинационная схема вместе с формированием сигналов derr и dok
формирует сигналы вектора z(t+1). z(t+1) есть состояния элементов памяти в
момент времени
t+1. Они учитывают сигналы на входе автомата xi и
104
состояния элементов памяти в предыдущий момент времени t. Все это
осуществляется на основе алгоритма построения переключательных функций
элементов памяти для заданной грамматики.
С помощью сигнала НУ осуществляется начальная установка триггеров
автомата. Пусть входные символы xi представляются двоичными кодами с
переменными кода pj. Любая входная цепочка должна заканчиваться маркером
или символом «конец цепочки», чтобы
автомат мог различать конец
обработанной цепочки и начало следующей. В структурную схему автомата
часто вводится дешифратор, назначение которого преобразовывать двоичный
код, состоящий из символов pi в унитарный код, состоящий только из одной
переменной xi, то есть когда только одна из выходных переменных принимает
значение 1, в то время как все другие равны нулю.
Пример. Пусть имеем таблицу кодов входных символов вида:
Символ
x0
x1
x2
x3
x4
x5
x6
x7
p1
0
1
0
1
0
1
0
1
p2
0
0
1
1
0
0
1
1
p3
0
0
0
0
1
1
1
1
построить фрагмент схемы дешифратора для формирования сигналов x0
и x0 .
105
Решение. Схема будет иметь вид:
p1
&
&
x0
&
x0
p2
&
p3
&
Комбинационная схема автомата реализует функцию его переходов. Исходным
заданием для ее построения является таблица или граф переходов, а также
выбранный вариант кодирования. Построить функцию переходов, значит найти
переключательные функции кодирующих (внутренних) переменных. Каждая
внутренняя
переменная
z1,z2,z3,z4
представляется
состоянием
соответствующего элемента памяти, то есть триггера. По переключательным
функциям
внутренних
переменных
находятся
функции
возбуждения
соответствующих им триггеров. Сложность функций возбуждения
и,
следовательно, сложность комбинационной схемы существенно зависит от
выбора типа триггера. Реализация этих функций образует комбинационную
схему автомата. В общем виде схема, реализующая переключательные функции
имеет вид:
106
x0 x1 x2 x3 x4 x5 x6 x7 x8
z1(t) z2(t) z3(t) z4(t)
z1
f x0 z2
z3
z4
t+1
1 1
2
5
3 9
4 ...
z1 5
z2 6
z3 7
z4
8
f x1
1
2
6
10
...
3
7
11
z1(t+1)
1 z2(t+1)
1
z3(t+1)
...
…
4
8
1
z4(t+1)
...
Рассмотрим построение схемы переключательной функции fx0.
z(t)
f x0
z(t+1)
x0
Пусть сигнал x0 обрабатывается автоматом в соответствии с таблицей
переходов следующим образом: r7  r2; r6  r0. Тогда в соответствии с
принятой кодировкой состояний автомата:
107
r0
r1
r2
r3
r4
r5
r6
r7
r8
r9
r10
0000
1010
1101
1111
0011
1100
0100
1001
1011
0010
1000
можно составить таблицу переходов автомата по символу x0 в кодах, будем
иметь:
t
r6
r7
z1
0
1
z2
1
0
t+1
z3
0
0
z4
0
1
z1
0
1
z2
0
1
z3
0
0
z4
0
1
r0
r2
Запишем в соответствии с последней таблицей функции z(t+1):
z1(t+1) = z1(t);
z2(t+1) = z4(t);
z3(t+1) = z3(t);
z4(t+1) = z4(t).
Построим схему реализации функции z(t+1) на элементах {&, }:
108
z1 z2 z3 z4
&
&
z1(t+1)
z2(t+1)
&
&
z3(t+1)
&
&
z4(t+1)
&
&
x0
Рассмотрим построение логической схемы переключательной функции
fx1 аналогично предыдущему построению. Автомат по x1 осуществляет
переходы:
x1
r1  r10;
x1
x1
r 5 
r 6; r 4 
r 9;
x1
x1
r10 
r 0; r 2 
r 3.
z1(t)
z2(t)
z3(t)
z4(t)
z1(t+1)
z2(t+1)
z3(t+1)
z4(t+1)
r1
1
0
1
0
1
0
0
0
r10
r2
1
1
0
1
1
1
1
1
r3
r4
0
0
1
1
0
0
1
0
r9
r5
1
1
0
0
0
1
0
0
r6
r10
1
0
0
0
0
0
0
0
r0
109
Построим логическую функцию для z1(t+1), пользуясь правилами
построения СДНФ по таблице истинности
и
минимизации слабо
определенной функции с использованием карт Карно. Считаем, что в пустых
клетках карты Карно функция не определена.
z1
z1
z3
* * 0 0
* * 1 *
z3 0 * * *
* * * 1
z2
z2
z4
z1 ( t  1)  z3 ( t )& z4 ( t )  z3 ( t )& z4 ( t ) .
z4
z1 ( t  1)  z3 ( t )& z4 ( t )& z3 ( t )& z4 ( t ) .
z4
z2
Аналогично составляются
логические функции остальных z i(t+1) и
строятся комбинационные схемы fxi , а в итоге общая комбинационная схема.
Построение комбинационной схемы, реализующей функцию derr
Функция возбуждения сигнала ошибки может быть представлена в виде:
derr = x0  derrx0  x1 & derr x1  ...  x8 & derr x8 .
Считаем, что ошибка по xi может возникнуть тогда, когда на xi сработает
какое-либо состояние, не соответствующее заданному значению по таблице
переходов. Или другими словами, при приходе сигнала x i автомат находится не
в тех состояниях, которые ему предписаны таблицей переходов.
110
Пример. Построить функцию ошибки при обработке сигнала xi.
Решение. Пусть согласно таблице переходов, рассмотренной выше, по x0
допускаются переходы: r7  r2; r6  r0.
Таким образом, можно записать:
derr Х0 = Z1 & Z2 & Z3 & Z4
V
Z1 & Z2 & Z3 & Z4.
d err x0   ( ( z1 & z 2 &  z 3 &  z 4) &  ( z1 &  z 2 &  z 3 & z 4 )) .
Аналогично ищутся функции ошибок для остальных xi. Составим
таблицу функций ошибок, в которой показано, что ошибка будет всегда равна 1
, если на xi нет переходов из обозначенных состояний, т.е. смены состояний и
равна 0 в противном случае:
ri
r0
код
0000
derr Х0
1
derr Х0
0
…
…
r1
r2
r3
r4
r5
r6
r7
r8
r9
r10
1010
1101
1111
0011
1100
0100
1001
1011
0010
1000
1
1
1
1
1
0
0
1
1
1
0
0
0
0
0
1
1
0
0
0
…
…
…
…
…
…
…
…
…
…
111
Анализ таблицы показывает, что в ней единиц больше нулей. Поэтому
по ней удобнее строить логическую функцию
derrxi . Построение идет
на
основе СДНФ с минимизацией по картам Карно:
z1
z1
0
*
z3 0
0
1
*
*
*
z3
z2
0
0
0
0
z2
derr
X0
0
1
0
*
z4
z4
z4
z2
 z1 z 2  z 2 z3 z 4  (( z1 z 2 ) & (z 2 z3 z 4 )) .
Здесь знак логического умножения опущен в слагаемых для улучшения
читабельности формулы. Запишем формулу отрицания полученной функции,
получим:
derrX 0  (z1 z2 ) & (z2 z3 z4 )
Аналогично определяются и остальные derr
логические схемы объединяются
xi
. После этого их
в одну схему. Таким образом, часть
комбинационной схемы конечного автомата, отвечающая за формирование
сигнала ошибки соответствует функции:
derr  (( x0 & derrX 0 ) & ( x1 & derrX 1 ) & ... & ( x8 & derrX 8 )
Функция ошибки для рассматриваемого примера выразится следующей
комбинационной схемой:
112
&
&
&
&
&
&
&
&
derr
... &
z1 z2 z3 z4
x0
derrX 0  (z1 z2 ) & (z2 z3 z4 ) .
Определение функции распознавания цепочек входного языка dok
Очевидно, что сигнал dok = 1 вырабатывается только тогда, когда на
вход автомата пришел сигнал конец цепочки, например, x8 и автомат находится
в заключительном состоянии, то есть:
dok  derrx8 & x8 .
В заключение параграфа синтеза структуры автомата отметим некоторые
важные моменты.
Сигнал начальной установки (НУ) устанавливает триггеры в начальное
состояние, соответствующее аксиоме грамматики перед началом работы
автомата или во время работы автомата, если при работе возникли некоторые
113
технические сбои. В процессе нормальной работы автомата переход в
начальное состояние осуществляется автоматически по приходу сигнала
«конец цепочки».
Определим частоту тактового генератора для сигналов t2 и t1.
Периоды подачи сигналов t1 и t2 определяются в соответствии с
формулами 1 = T1 + 1, 2 = T2 + 2, где T1, Т2 - длительности
тактовых импульсов t1 и t2 соответственно, а 1, 2 - интервалы
между этими импульсами. Частота подачи сигнала определяется как
величина f = 1/.
Поскольку триггеры регистра 2 считаются основными, то
Т2  tмакс. + tперех. пр. 2,
где tмакс.
- максимальное время, необходимое комбинационной схеме для
формирования нового внутреннего состояния автомата Z(t+1) при приходе
очередного входного символа
xi, а также необходимое для формирования
сигналов derr и dok; tперех.
- время переходного процесса рабочей фазы
пр. 2
триггеров регистра 2.
Во время Т2 сигналы
t2 = 1, t1 = 0. Таким образом, можно записать
выражение, характеризующее 2:
2  tмакс. + tперех. пр. 2 + 2,
где 2 - промежуток между синхросигналами t2. Отметим, что в течение
времени tперех.
пр. 2
происходит запись информации с регистра1 в регистр2; в
течение времени tмакс работает комбинационная схема, то есть формируются
сигналы Z(t+1) и сигналы derr и dok , в течение интервала 2 (t1 = 1, t2 = 0)
114
идет запись информации в регистр1. В качестве одного из допустимых
вариантов назначения периодов подачи сигналов t1
и t2
может быть
рассмотрен вариант:
1 = T1 + 1 = 2,
1 = T2,
Т1 = 2,
то есть синхросигналы t1 и t2 подаются в противофазе.
115
4. Отдельные вопросы теории вычислительных процессов
4.1. Автоматы с магазинной памятью
Конечный автомат может решать лишь вычислительные задачи,
требующие
фиксированного
(конечного)
объема
памяти.
Однако,
в
компиляторах существует множество задач, которые не могут быть решены
при таком ограничении и поэтому приходится пользоваться моделью более
сложного автомата [3]. Например, задача обработки скобок арифметических
выражений не может быть решена с помощью конечного автомата, потому что
арифметическое выражение может начинаться с любого количества левых
скобок и компилятор должен проверять соответствие их числу правых скобок.
Заранее число левых и правых скобок не известно.
Автомат с магазинной памятью имеет расширенную память по
сравнению с конечным автоматом за счет возможности дополнительного
хранения информации в магазине (стеке). Часто в программировании стек и
магазин считаются синонимами, однако, стек имеет более широкий смысл в
теории автоматов. Стек в русском языке имеет аналогию со стопкой, например,
книг.
Основная особенность магазинной памяти с точки зрения работы с ней
состоит в том, что символы могут помещаться в магазин и удаляться из него
по одному, причем удаляемый символ - это всегда тот, который был помещен в
магазин последним. Когда символ помещается в магазин, говорят, что он
«вталкивается» в магазин, а когда удаляется - «выталкивается». Говорят, что
только что поступившая информация находится наверху магазина. Считается,
что на дне магазина всегда находится символ  - маркер дна, он никогда не
вталкивается и не выталкивается из магазина. Если в магазине находится
116
только символ , то говорят, что магазин пуст. Символы в магазине находятся
в том порядке, в котором они поступали в магазин. Магазин можно изображать
в виде цепочки одним из следующих способов:
1. C A B 
2.  B A C
Автомат с магазинной памятью может находиться в одном из конечных
состояний и иметь магазин, куда он может помещать и откуда может извлекать
информацию. В отличие от конечного автомата автомат с магазинной памятью
может обрабатывать один входной символ в течение нескольких шагов. На
каждом шаге управляющее устройство автомата решает пора ли закончить
обработку текущего входного символа и принять новый входной символ или
продолжить обработку текущего символа на следующем шаге.
Каждый
шаг процесса обработки
задается
множеством правил,
использующих информацию трех видов:
 состояние;
 верхний символ магазина;
 текущий входной символ.
Множество таких правил задается управляющим устройством. В зависимости
от получаемой информации управляющее устройство выбирает либо выход из
процесса, то есть прекращение обработки, либо переход в новое состояние.
Переход из одного состояния в другое состоит из трех операций:
 над магазином;
 над состоянием;
 над входом.
Возможные операции:
1. Операции над магазином:
117
 втолкнуть в магазин определенный магазинный символ;
 вытолкнуть верхний символ магазина;
 оставить магазин без изменения.
2. Операции над состояниями:
 перейти в заданное новое состояние;
 остаться в прежнем состоянии.
3. Операции над входом:
 перейти к следующему входному символу и сделать его текущим
входным символом;
 оставить данный входной символ текущим, то есть держать его
до следующего шага.
Определение. Автомат с магазинной памятью есть формальная система,
задаваемая следующими пятью формальными объектами:
1) конечным множеством входных символов, в которое входит и
концевой маркер  (маркер конца цепочки);
2) конечным множеством магазинных символов, включающем
маркер дна;
3) конечным множеством состояний, включая начальное состояние;
4) управляющим устройством, которое каждой комбинации
(входной символ, магазинный символ, состояние) ставит в
соответствие выход или переход. Переход в отличие от выхода
заключается в выполнении операции над магазином, состоянием и
входом. Операции, которые запрашивали бы входной символ после
концевого маркера или выталкивали из магазина или вталкивали в
магазин маркер дна исключаются;
118
5) начальным содержимым магазина является маркер дна, за которым
следует (возможно, пустая) цепочка других магазинных символов.
Определение.
Автомат
с
магазинной
памятью
называется
распознавателем, если у него 2 выхода: ДОПУСТИТЬ и ОТВЕРГНУТЬ.
Говорят,
что
цепочка
символов
входного
алфавита
допускается
распознавателем, если под действием этой цепочки автомат, начавший работу в
своем начальном состоянии и с начальным содержимым магазина, делает ряд
переходов, приводящих к выходу ДОПУСТИТЬ. В противном случае цепочка
отвергается.
При описании переходов автомата с магазинной памятью будем
обозначать действия автомата словами:
 ВЫТОЛКНУТЬ,
 ВТОЛКНУТЬ (А),
 СОСТОЯНИЕ (Si),
 СДВИГ,
 ДЕРЖАТЬ.
Здесь А - магазинный символ, операция СОСТОЯНИЕ (Si ) означает, что
следующим состоянием автомата становится состояние Si, операция СДВИГ
означает, что текущим входным символом становится следующий входной
символ. В некоторых реализациях это может означать сдвиг указателя на входе.
Операция ДЕРЖАТЬ означает, что текущий входной символ следует держать
до следующего шага.
Пример. Построить автомат с магазинной памятью, для распознавания
119
скобок.
Решение.
Предлагается
следующий
принцип
работы
такого
распознавателя. Каждый раз, когда встречается левая скобка, в магазин
вталкивается символ А, а когда встречается правая - символ А выталкивается.
Цепочка отвергается, если на входе остаются правые скобки, а магазин пуст
(лишние правые скобки) или, если цепочка прочитана до конца, а в магазине
остаются символы А (лишние левые скобки). Такой автомат с магазинной
памятью определяется следующими объектами:
1) входным множеством { ( , ),  };
2) множеством магазинных символов { А, };
3) множеством состояний {Si }, где i = 1..n, S - начальное
состояние, n - число внутренних состояний автомата;
4) переходами:
(, A, S = ВТОЛКНУТЬ (А), СОСТОЯНИЕ (S), СДВИГ.
(, , S = ВТОЛКНУТЬ (А), СОСТОЯНИЕ (S), СДВИГ.
), A, S = ВЫТОЛКНУТЬ, СОСТОЯНИЕ (S), СДВИГ.
), , S = ОТВЕРГНУТЬ (лишние правые скобки).
, A, S = ОТВЕРГНУТЬ (лишние левые скобки).
, , S = ДОПУСТИТЬ.
5) начальным содержимым магазина {}.
Пусть на вход автомата подается цепочка ( ( ) ( ) ), тогда работа такого
автомата может быть представлена следующей таблицей переходов:
120
Состояние
Входные символы
магазина
(
A
ВТОЛКНУТЬ(А) ВЫТОЛКНУТЬ ОТВЕРГНУТЬ
СДВИГ


)
СДВИГ
ВТОЛКНУТЬ(А) ОТВЕРГНУТЬ
ДОПУСТИТЬ
СДВИГ
Пример. Построить автомат, распознающий правильность построения
цепочек языка {0n 1n, n > 0}.
Решение. Предлагается следующий принцип работы автомата:
 начальный отрезок
цепочки, состоящий из нулей вталкивается
в
магазин;
 каждый
раз, когда встречается единица на входе, один нуль
выталкивается из магазина;
 цепочка допускается тогда и только тогда, когда в момент прихода
концевого маркера магазин пуст;
 если после обработки единицы за ней следует ноль, то
цепочка
входных символов отвергается.
Для построения автомата введем две фазы процесса обработки:
 первая фаза - « ВТАЛКИВАНИЕ»;
 вторая фаза - « ВЫТАЛКИВАНИЕ ».
121
Чтобы автомат «помнил», в какой фазе он находится, введем два внутренних
состояния S1 и S2, соответствующие этим фазам. Построим управляющую
таблицу.
Состояние S1(обработка нулей):
A

0
ВТОЛКНУТЬ(А),
S1, СДВИГ
ВТОЛКНУТЬ(A),
S1,
СДВИГ
1

ВЫТОЛКНУТЬ, ОТВЕРГНУТЬ
S2, СДВИГ
ОТВЕРГНУТЬ
ОТВЕРГНУТЬ
Состояние S2 (обработка единиц):
A
0
ОТВЕРГНУТЬ

ОТВЕРГНУТЬ
1

ВЫТОЛКНУТЬ, ОТВЕРГНУТЬ
S2, СДВИГ
ОТВЕРГНУТЬ
ДОПУСТИТЬ
Рассмотренный автомат характеризовался следующими объектами:
1) входным множеством {0,1,  };
2) множеством магазинных символов {А, }.
3) множеством состояний {S1, S2}, где S1 - начальное состояние;
4) таблицами переходов (см. выше);
5) начальным содержимым магазина {}.
122
Рассмотрим другой подход, применимый в решении поставленной
задачи, который позволит обойтись лишь одним состоянием S вместо двух
примененных. Для этого введем в рассмотрение операцию ЗАМЕНИТЬ (A, B,
C). Она эквивалентна последовательности операций:
 ВЫТОЛКНУТЬ,
 ВТОЛКНУТЬ (А),
 ВТОЛКНУТЬ (B),
 ВТОЛКНУТЬ (C).
Если эта операция применяется к магазину
{ X Y Z} , то новый
магазин будет выглядеть следующим образом: {  X Y A B C}.
Вернемся к задаче распознавания множества {0n 1n, n > 0}. Построим
другой автомат, в котором будет достаточно одного конечного состояния.
Предлагается следующий принцип работы. Символ А вталкивается в магазин
при каждом появлении на входе нуля и выталкивается при каждом появлении
на входе единицы. Для отличия фаз вталкивания и выталкивания применим
новую стратегию. Во время фазы вталкивания в верхней ячейке магазина
хранится новый магазинный символ X. Единственное его назначение напоминать управляющему устройству, что автомат находится в фазе
вталкивания. Когда впервые на входе появится единица, X выталкивается из
магазина. Работа такого автомата может быть представлена следующей
таблицей:
123
X
0
ЗАМЕНИТЬ (А,X),
СДВИГ
1
ВЫТОЛКНУТЬ,
ДЕРЖАТЬ

ОТВЕРГНУТЬ
А
ОТВЕРГНУТЬ
ВЫТОЛКНУТЬ
СДВИГ
ОТВЕРГНУТЬ

ОТВЕРГНУТЬ
ОТВЕРГНУТЬ
ДОПУСТИТЬ
( Начальное состояние магазина { X}.
4.2. Комбинационные схемы обнаружения ошибок
Пусть fs является обозначением комбинационной схемы, реализующей
логическую функцию f , осуществляющую отображение x  y.
Введем
модель ошибок F(f) = { f0, f1, ..., fn}. Считаем, что для функции f0 выполняется
условие f0 = f. При этом функции f1, ..., fn из модели ошибок - это те функции,
которые могут быть реализованы схемой fs
вместо функции f при
возникновении некоторых технических сбоев в работе схемы или при наличии
в схеме технологических ошибок изготовления. Будем называть их функциями
ошибок [8].
Пусть x’ x является подмножеством входных слов, для которых
оценивается работа комбинационной схемы fs. Введем функцию:
Ф: x’ y  {0,1}, такую, что Ф(x, y) = 0 при x  x’, y = f0( x ) = f( x );
Ф(x, y) = 1 при x  x’, y = fi( x )  f( x )
функция Ф(x, y) не определена в остальных случаях. Функцию Ф(x, y) назовем
функцией обнаружения ошибок реализации функции f с моделью ошибок
124
F( f ). Техническая реализация Фs функции Ф называется схемой обнаружения
ошибок. Блок схема, включающая подлежащую контролю комбинационную
схему и относящуюся к ней схему обнаружения ошибок, может быть показана
следующим образом:
x’
Y
fs
YF
Фs
Если схема fs реализует безошибочно f, то схема Фs выдает YF = 0, иначе
YF = 1. Для ошибок, не относящихся к рассматриваемой модели ошибок,
функция обнаружения ошибок не определена. Неопределенные значения этой
функции используется для оптимизации схемы обнаружения ошибок. Если
доопределить все неопределенные значения
функции Ф единицами и не
ограничивать множество входных символов, то функция обнаружения ошибок
будет следующей:
Ф( x, y ) = 0, при x X, y = f( x );
Ф(x, y ) = 1, при x X, y  f( x ).
(4.1)
Схема функции обнаружения ошибок Ф, для которой выполняется
условие (4.1) может быть реализована с помощью дублирования схемы fs
и
включения схемы сравнения. Ее можно представить в виде:
x
fs
Y
VGL
YF
fs
125
В представленной схеме VGL - компаратор (сравнивающее устройство).
Компаратор выдает сигнал 0, если сигналы на его входе совпадают и сигнал 1
в противном случае.
Разработка схемы обнаружения ошибок, работающей в режиме
on-line, для комбинационной схемы fs может проводиться по этапам:
1. Выделяется интересуемое подмножество множества входных
символов x’ X .
2. Составляется модель ошибок F(f) на основании ожидаемых
ошибок базовых элементов.
3. Определяется таблица значений функции обнаружения ошибок Ф.
4. Проводится оптимизация (минимизация) частично-определенной
функции Ф.
5. Для функции Ф составляется схема Фs.
Пример. Построить схему обнаружения ошибок для комбинационной
схемы, которая реализует булеву функцию:
f( x1,x2 ) = x1  x2.
Решение. Последовательность действий при этом следующая:
1. x’ = X.
2. F(f) = ( f0 = x1  x2, f1 = x1  x2 ) - модель ошибок.
3.
x1
0
0
1
1
x2
0
1
0
1

0
1
1
0

0
1
1
1*
126
Таким образом, для функции обнаружения ошибок Ф соблюдается
условие: Ф( x1, x2, y ) = 0, для y = f( x1 , x2 ), то есть
Ф( 0, 0, 0 ) = Ф( 0, 1, 1) = Ф( 1, 0, 1 ) = 0 и Ф( x1, x2, y) = 1, для
y = f1( x1, x2 )  f0, то есть
Ф( 1, 1, 1) = 1.
На всех остальных комбинациях функция Ф не определена. Таблица
истинности для функции Ф примет вид:
x1
0
0
0
0
1
1
1
1
x2
0
0
1
1
0
0
1
1
y
0
1
1
0
1
0
0
1
Ф
0
0
0
0
1
Построение СДНФ по таблице истинности позволяет записать:
Ф( x1, x2, y ) = x1 & x2 & y
и построить соответствующую комбинационную схему, реализующую данную
функцию:
x1

Y
&
YF
x2
127
На практике для построения схем обнаружения ошибок используется
подход систематичных кодов. Рассмотрим основу такого построения.
Определим подмножество входных слов x’ X и подмножество выходных
слов y’ Y, как множество кодовых слов. Считаем, что функция f отображает
кодовые слова
из
x’
в кодовые слова из
y’. Контрольное устройство
проверяет, является ли f(x’) кодовым словом из y’.
x’
y
fs
Кодовое
слово?
yF
4.3. Пространство сообщений. Коды обнаружения и исправления
ошибок
Введем пространство сообщений в виде E(n, Um), где Um - алфавит, m размерность алфавита, n - число символов из алфавита, образующих
сообщение (слово) [9]. Такое пространство сообщений можно рассматривать
как
метрическое
пространство,
сообщениями x и y, обозначаемое
в
котором
расстояние
между
двумя
d( x, y ) есть число различающихся
символов в сообщениях x и y.
Пример. Пусть имеем алфавит U2 = {0,1} и пространство сообщений
E(6, U2), в котором формируются сообщения:
x = ( 0 1 0 1 0 0), y = ( 1 1 1 0 0 0 ). Расстояние по Хеммингу между этими
сообщениями будет равно 3, то есть d (x, y ) = 3.
128
Приведенное определение расстояния d (x, y) в пространстве сообщений
удовлетворяет всем свойствам расстояния.
В процессе передачи информации по каналам связи возможно искажение
передаваемого сообщения. При использовании двоичного алфавита искажение
может привести к тому, что в принятом сообщении какая-нибудь переданная
единица сменит свое значение на ноль или наоборот ноль исказится и примет
значение единица.
Возникает вопрос, как построить коды, позволяющие обнаруживать
такие сбои при передаче информации или даже позволяющие восстановить
значения искаженных разрядов.
Назовем
восстановления
коды,
обладающие
искаженных
свойством
разрядов
при
обнаружения
передаче
сбоев
и
информации
помехоустойчивыми.
Рассмотрим случай, когда в процессе передачи сообщения оно может
исказиться не более, чем в k разрядах. В пространстве сообщений E( n, U2)
выделим подмножество Hk  E( n, U2), обладающее тем свойством, что для  x,
y  Hk выполняется неравенство:
d (x, y ) > k.
(4.2)
Множество Hk назовем множеством осмысленных слов. Тогда
любое x1  Hk будет бессмысленным словом. Предположим, что при передаче
слова
x  Hk оно исказилось и перешло в x1, но поскольку по условию
искажение может произойти не более чем в k разрядах, то расстояние d (x, x1)
 k, следовательно, x1  Hk и x1 есть бессмысленное слово. Таким образом,
коды , удовлетворяющие условию (4.2) есть коды с обнаружением ошибки.
129
Пример. В пространстве сообщений
E( 3, U2 ) сформировать
множество осмысленных слов.
Решение. Предлагается в качестве множества осмысленных слов H1
рассматривать множество { 000, 011, 110 } c расстоянием между кодами 2.
Тогда при k = 1 при передаче сообщения искажение в любом одном разряде
превратит слово в бессмысленное.
Пример. В пространстве сообщений E( n-1, U2 ) сформировать множество
осмысленных слов.
Решение. Предлагается в качестве множества H1 осмысленных слов
рассматривать множество кодов, к которым добавляется один разряд, значение
которого выбирается таким образом, чтобы общее число единиц в словах x 
H1 было четным. Если в качестве пространства сообщений рассматривать Е( 3,
U2 ) = ( 000, 001, 010, 011, 100, 101, 110, 111 ), то в качестве H1 можно
предложить множество
H1 = { 0000,1001,1010, 0011,1100, 0101, 0110,1111 }.
Искажение любого одного разряда в этих словах превращает их в
бессмысленные, так как исказится четность числа.
В рассмотренном примере
4-х разрядный код с обнаружением ошибки дает возможность составить 2 n , то
есть 16 различных слов. Однако, в качестве осмысленных слов, то есть
подлежащих передаче по каналу связи используется только 8.
Определение. Коды, у которых количество осмысленных слов меньше
общего числа возможных слов, называются кодами с избыточностью.
130
Наличие избыточности является необходимым условием построения
помехоустойчивых кодов. Рассмотрим построение кодов с обнаружением и
исправлением ошибок, возникших при передаче сообщений . Предположим,
что в процессе передачи информации может исказиться не более k разрядов
кода. Множество осмысленных слов Hk  E(n, U2 ) назначим таким образом,
чтобы расстояние между его кодами подчинялось условию:
d (x, y ) > 2k
(4.3)
для  x, y  Hk. Пусть в результате искажения код x перешел в код x1, тогда d
(x, x1 )  k. Запишем неравенство треугольника:
d (x, y )  d (x, x1) + d( x1, y ).
Усилим неравенство:
2k < k + d( x1, y ) ,
что равносильно неравенству
d (x1, y ) > k. Последнее неравенство
показывает, что расстояние от ошибочного слова x1 до слова x, подвергшегося
искажению, меньше чем до любого другого осмысленного слова, тем самым
позволяет восстановить правильное сообщение x.
Коды, удовлетворяющие условию (4.3) называются кодами с исправлением
ошибок.
Пример. В пространстве сообщений Е( 4, U2 ) выделить множество
осмысленных слов с расстоянием 3.
Решение. Поскольку заданное расстояние d (x, y ) = 3, то выбрав k = 1,
для множества осмысленных слов зададим условие d (x, y )  2 k. Что
131
позволяет в качестве осмысленных слов выбрать коды: 0000, 0111. Тогда , если
при передаче сообщения x = 0000 оно исказится и примет вид
x1 = 0001, то d (x, x1 ) = 1, d (x1, y ) = 2. Следовательно, передано было
сообщение
0000, то есть введенное множество H1 позволяет определять
ошибку в переданном сообщении и позволяет восстанавливать сообщение,
подвергшееся искажению.
Контрольные вопросы
1. Ввести понятия о конечном автомате без памяти, с памятью,
стохастическом.
2. Описать кодирование автомата оптического сложения цветов.
3. Рассмотреть
функции алгебры
двухзначной логики (булевой
алгебры). Дать определение суперпозиции булевых функций.
4. Рассмотреть
свойства
булевой
алгебры.
Дать
определение
совершенной дизъюнктивной нормальной формы (СДНФ).
5. Дать определение функциональной полноты системы функций. Дать
определение базиса. Доказать функциональную полноту системы
функций { &,  }, { V,  }.
6. Рассмотреть алгебру Жегалкина и ее свойства. Показать возможности
известных методов минимизации функций алгебры логики.
7. Рассмотреть функции k - значной логики.
8. Изложить основные положения трехзначной логики.
9. Рассмотреть представление k - значных функций в виде нормальных
форм.
132
10. Описать двоичное кодирование переменных и функций трехзначной
логики.
11. Рассмотреть минимизацию слабо определенных логических функций.
Описать построение комбинационных схем, реализующих логические
функции.
12. В чем заключаются основные принципы программной реализации
логических функций? Привести примеры построения операторной и
бинарной программ.
13. Изложить основные понятия теории формальных грамматик.
14. Что такое вывод цепочек формального языка? Описать деревья
контекстно-свободной грамматики.
15. Дать классификацию грамматик Холмского. Привести примеры.
16. В чем заключается операция приведения грамматик?
17. Разобрать алгоритм удаления цепных правил. Привести пример.
18. Какие существуют операции над формальными языками?
19. Рассмотреть принципы построения право-линейной и автоматной
грамматик, а также правила перехода от право-линейной грамматики
к автоматной.
20. Дать определение конечного автомата, как формальной системы.
Рассмотреть пример распознавания автоматом цепочек входного
языка, состоящих из нулей и единиц на четность.
21. Описать способы представления конечных автоматов. Привести
примеры.
22. Рассмотреть процедуру приведения недетерминированного автомата
к детерминированному виду на примере.
133
23. Для чего нужна минимизация числа состояний автомата? Рассмотреть
алгоритм Мили на примере.
24. На примере рассмотреть алгоритм минимизации состояний автомата
методикой Мура.
25. Показать
на примере переход от автоматной грамматики к сети
Петри, к минимальной сети Петри.
26. Дать определение сети Петри. Что такое маркировка сети Петри?
Ввести понятие диаграммы достижимых состояний.
27. На примере показать построение диаграммы достижимых
состояний сети Петри.
28. Привести классификацию сетей Петри на основе динамических
ограничений.
29. Привести классификацию сетей Петри на основе статических
ограничений.
30. Дать определения синхронных и асинхронных автоматов, а
также рассмотреть их основные характеристики.
31. Привести характеристики автоматов Мили и Мура.
32. В чем заключается суть кодирования состояний автомата и
какие при этом возникают проблемы?
33. Дать определение расстояния по Хеммингу, функции
Махаланобиса. Какие критерии минимальности кодирования
автомата вы знаете?
34. Из чего состоит элементная база структуры автомата? Описать работу
RS - триггера.
35. В чем заключается функциональное назначение
D - триггера?
Описать его принцип работы.
134
36. В чем заключается особенность Т - триггера? Описать его принцип
работы.
37. Представить общую структурную схему распознающего автомата.
Описать назначение ее основных элементов.
38. Описать назначение и работу дешифратора структурной схемы
автомата.
39. Представить общую комбинационную схему функций возбуждения
автомата.
40. В чем заключается основной принцип построения комбинационной
схемы функций возбуждения fxi ?
41. Описать принцип построения схем логических функций derr , dok.
42. Рассмотреть принципы построения схем обнаружения ошибок при
заданных функциях моделей ошибок.
43. Что
такое
пространство
сообщений?
Описать
принципы
формирования помехоустойчивых кодов.
44. Дать определение автомата с магазинной памятью. Рассмотреть
основные операции работы автомата.
45. Описать
работу автомата с магазинной памятью на примере
распознавания цепочек языка типа ( ( ) ( ) ).
46. Описать
работу автомата с магазинной памятью на примере
распознавания цепочек языка типа {0n 1n, n > 0 }.
135
ЛИТЕРАТУРА
1. Кузнецов О.П., Адельсон-Вельский Г.М. Дискретная математика для
инженера. - М. : Энергия, 1980. - 342с.
2. Поспелов Д.А. Логические методы анализа и синтеза схем.- М. :
Энергия, 1974. - 368 с.
3. Льюис
Ф., Розенкранц Д., Стирнз Р. Теоретические основы
проектирования компиляторов. - М.: Мир, 1979. - 654 с.
4. Розенблюм Л.Я. Сети Петри // Техническая кибернетика. - 1985. -№ 5.
- С. 12-40.
5. Лазарев В.Г., Пийль Е.П. Синтез управляющих автоматов. - М.:
Энергия, 1970. - 400 с.
6. Шоломов
Л.А.
Основы
теории
дискретных
логических
и
вычислительных устройств. - М.: Наука, 1980. - 400 с.
7. Прохорова О.В. Синтез конечных автоматов. Йошкар-Ола: Мар ГТУ,
2000. - 24 с.
8. Граф Ш., Гессель М. Схемы поиска неисправностей. М. : Наука, 1989.
- 320 с.
9. Коршунов
Ю. М.
Математические основы
кибернетики. - М. :
Энергия, 1980. - 423 с.
136
Download