- •1. Формальные языки и грамматики
- •1.1. Введение
- •1.1.1. Трансляторы , интерпретаторы и компиляторы
- •1.1.2. Стадии работы компилятора
- •1.1.3. Построение компилятора
- •1.2.2. Примеры, иллюстрирующие первичные понятия
- •1.2.3. Пустой язык
- •1.2.4. Резюме
- •1.3. Типы формальных языков и грамматик
- •1.3.1. Грамматики типа 0
- •1.3.2. Грамматики типа 1
- •1.3.3. Грамматики типа 2
- •1.3.4. Грамматики типа 3
- •1.3.5. Вывод в кс-грамматиках и правила построения дерева вывода
- •1.3.6. Синтаксический разбор
- •1.3.7. Левый и правый выводы
- •1.3.8. Неоднозначные и эквивалентные грамматики
- •1.3.9. Резюме
- •1.4. Способы задания схем грамматик
- •1.4.1. Форма Наура-Бэкуса
- •1.4.2. Итерационная форма
- •1.4.3. Синтаксические диаграммы
- •1.4.4. Резюме
- •1.5. Построение грамматик и грамматики, описывающие основные конструкции языков программирования
- •1.5.1. Рекомендации по построению грамматик
- •1.5.2. Описание списков
- •1.5.3. Пример построения грамматик
- •1.5.4. Грамматики, описывающие целые числа без знака и идентификаторы
- •1.5.5. Грамматики для арифметических выражений
- •1.5.6. Грамматика для описаний
- •1.5.7. Грамматика, задающая последовательность операторов присваивания
- •1.5.8. Грамматики, описывающие условные операторы и операторы цикла
- •1.5.9. Резюме
- •2. Контекстно-свободные грамматики и автоматы.
- •2.1 Приведенные грамматики.
- •2.2 Определение непроизводящих символов.
- •2.3 Определения недостижимых символов.
- •2.5 Исключение леворекурсивных правил.
- •2.6 Исключение цепных правил.
- •2.7 Преобразование неукорачивающих грамматик.
- •2.8 Магазинные автоматы.
- •2.9 Работа магазинного автомата.
- •2.10. Язык, допускаемый магазинным автоматом.
- •2.11 Построение магазинного автомата.
- •2.12 Пример построения автомата.
- •2.13 Резюме.
- •3. Нисходящие распознаватели.
- •3.1 Распознаватели и ll(k) - грамматики
- •3.3 Построение детерминированного нисходящего распознавателя.
- •3.4 Множество выбора.
- •3.4.1 Функции перв, след и множество выбор.
- •3.4.4 Построение множества выбор.
- •3.5 Слаборазделенные грамматики
- •3.6 Ll(1) - грамматики.
- •3.7 Построение магазинного автомата.
- •3.8 Преобразование грамматик к виду ll(1).
- •3.8.1 Исключение леворекурсивных правил.
- •3.8.2 Выделение общих частей.
- •3.9. Резюме.
- •3.11. Восходящие распознаватели.
- •3.11.1. Расширенный магазинный автомат
- •3.11.2. Пример работы расширенного магазинный автомат
- •3.12. Lr(k)-грамматики
- •3.12.1. Построение таблиц распознавателя. Алгоритм работы распознавателя.
- •3.12.2. Пример построения lr(0)-распознавателя
- •3.13. Построение slr(1)-распознавателя
- •3.14. Восходящие распознаватели для грамматик с аннулирующими правилами
- •3.15. Резюме.
- •4.3. Магазинные Преобразователи.
- •4.3.1. Определение магазинного преобразователя.
- •4.3.2. Описание работы магазинного преобразователя.
- •4.3.3. Перевод определяемый преобразователем.
- •4.3.4. Построение преобразователя.
- •4.3.5. Пример построения преобразователя.
- •4.3.6. Порядок построения детерминированного магазинного преобразователя.
- •5. Атрибутные транслирующие грамматики
- •5.1. Атрибутные транслирующие грамматики.
- •5.1.1. Атрибутные транслирующие грамматики.
- •5.1.2. Определение ат-грамматик
- •5.1.3. Пример ат-грамматики
- •5.1.4. Демонстрация вычисления значений атрибутов с левым выводом
- •5.1.5. Пример использования ат-грамматики
- •5.2. Cинтаксический анализ, с использованием ат-грамматики
- •5.2.1. Процесс синтаксического анализа
- •5.2.2. Пример использования ат-грамматики.
- •5.3.2. Форма простого присваивания ат-грамматик
- •5.3.3. Преобразование lат-грамматики в lат-грамматику в форме простого присваивания.
- •5.3.4. Расширенный вывод для ат-грамматики
- •5.4. Атрибутные преобразователи ( ап )
- •5.4.1. Представление правил lat-грамматики в магазине.
- •5.4.2. Построение инструкций ап.
- •5.4.3. Описание работы ап
- •5.4.4. Порядок построения ап
- •5.4.5. Пример построения ап
- •5.4.6. Демонстрация работы ап
- •5.4.7. Построение восходящих атрибутных преобразователей
- •9.1 Структурный синтез синхронных автоматов .
- •9.1.1.1 Обобщенная структурная схема автомата.
- •9.1.1.3 Структурная схема на элементах импульсного типа.
- •9.1.2 Основные этапы структурного синтеза.
- •9.1.3 Типы элементов памяти.
- •9.1.4 Построение функций возбуждения.
- •9.1.5 Примеры структурного синтеза.
- •9.1.5.1 Пример 1
- •9.1.6 Кодрование состояний с использованием соседей первого и второго рода.
- •9.1.7 Кодирование с числом элементов памяти, равным числу состояний .
- •9.1.8 Структурные схемы с дешифратором.
- •9.1.10 Структурные схемы, использующие типовые блоки цифровых устройств.
- •9.1.10.1 Структурная схема с запоминанием входного слова.
- •9.1.10.2 Структурная схема на основе счетчика.
- •9.1.10.3 Структурная схема на основе регистра со сдвигом.
- •9. Асинхронные автоматы
- •9.2 Общие положения.
- •9.2.1. Описание работы асинхронного автомата
- •9.2.2. Состязание элементов памяти
- •9.2.3.1 Универсальный способ кодирования
- •9.2.3.2. Эвристический способ кодирования
- •9.2.4. Связь асинхронного автомата с внешней средой
- •9.2.5. Построение элементов памяти
- •9.2.5.1. Асинхронный триггер
- •9.2.5.2. Асинхронный s-триггер
- •9.2.5.3. Триггеры с синхронизацией
- •9.2.6. Триггеры с задержкой
- •9.2.6.2 Асинхронный триггер j-k с задержкой
- •9.2.6.3. Триггер j-k с задержкой и синхронизацией
- •9.2.6.4. Триггер d-V с задержкой и синхронизацией
- •9.2.7. Резюме
2.9 Работа магазинного автомата.
Чтобы описать как работает автомат, введем понятие конфигурации.
Определение.Конфигурацией автоматаМназывают тройку(s, , ) S x P* x H*, |
где s- текущее состояние управляющего устройства,-неиспользованная часть входной цепочки P*,самый левый символ этой цепочкиaнаходится под головкой. Еслиa =, то считается, что входная цепочка прочитана.-цепочка , записанная в магазине, H*,самый правый символ цепочки считается вершиной магазина. Если $, то магазин пуст. Работа автомата может быть представлена как смена конфигураций. Один такт работы автомата заключается в определении новой конфигурации по заданной. Это записывается так: ( s, a , h ) |-- ( s', , )
При этом предполагается, что автомат читает символ a, находящийся под головкой, и символh, находящийся в вершине магазина, определяет новое состояниеs'и записывает цепочкув магазин вместо символаh. Если =$, то верхний символ оказывается удаленным из магазина. Такая смена конфигураций возможна, если функцияf( s, a, h )определена и ей принадлежит значение( s', ).Описанный такт работы выполняется с перемещением головки. Для описания работы автомата нам потребуется другой вид такта, предполагающий изменение состояний и магазина без перемещения входной головки. Еслиf0(s, , h)определена и ей принадлежит значение(s', ), то он определяет смену конфигураций так:
( s, a , h ) |-- ( s', a , )
Таким образом, могут быть три случая при работе автомата:
f(s, a, h)определена и выполняется такт работы,
f(s, a, h) не определена, но определена функцияf0(s, , h) и выполняется пустой такт.
Функции f(s, a, h)иf0(s, , h) не определены, в этом случае дальнейшая работа автомата невозможна.
В общем виде действия, задаваемые функцией переходов и выполняемые автоматом, демонстрирует следующая форма записи:
f(s, <входной символ>, <магазинный символ>)=(s1, <заносимая цепочка>)
При этом следует иметь в виду, что при выполнении такта вначале читается символ в вершине, а затем на его место заносится новый символ или цепочка. Отдельные значения функции переходов часто называют командами магазинного автомата. Начальной конфигурацией называется конфигурация(sо, , hо) , гдеsо-начальное состояние иhо- маркер дна магазина, а заключительной - конфигурация(s, $ , $), гдеsпринадлежит множеству конечных состоянийF.Для обозначения последовательности сменяющих друг друга конфигураций условимся использовать знак |--*. Таким образом последовательность
( s1,1,1 ) |-- ( s2,2,2) |-- ...|-- ( sn,n,n )
записывается в сокращенном виде так:
(s1, 1, 1 ) |--* ( sn, n, n ).
2.10. Язык, допускаемый магазинным автоматом.
Определение.Цепочканазываетсядопустимой для автомата М, если существует последовательность конфигураций, в которой первая конфигурация является начальной c цепочкой, а последняя - заключительной. (sо,,hо) |--* (s1, $ , $) , где s1F . |
Определение.Множество цепочек, допускаемых автоматом М, называется языком,допускаемымили определяемым автоматом М, и обозначаетсяL(М). |
L(М)= { ¦ ( sо, , hо ) ¦--* ( s', $, $) & s' F }
Чтобы лучше представить себе работу магазинного автомата, рассмотрим два примера. Пусть задан магазинный автомат М1в следующем виде:
М1: P = {a , b}; S = {s0 , s1 , s2}; H = {h0 , a}; F = {s0};
f (s0 , a , h0) = (s1 , h0a), f (s1 , a , a) = (s1 , aa), f (s1 , b , a) = (s2 , $), f (s2 , b , a) = (s2 , $), f (s2 , , h0) = (s0 , $).
Этот автомат является детерминированным, поскольку каждому набору аргументов соответствует единственное значение функции. Работу автомата при распознавании входной цепочки aabb можно представить в виде последовательности конфигураций: (s0,aabb,h0) |-- (s1,abb,h0a) |-- (s1,bb,h0aa) |-- (s2,b,h0a) |-- (s2,$,h0) |-- (s0,$,$) .
Нетрудно проверить, что при задании входной цепочки aabbb автомат не сможет закончить работу. Следовательно эта цепочка не принадлежит языку, допускаемому автоматом M1. Магазинный автомат М2, заданный следующим описанием:
М2: P = {a , b}; S = {s0, s1 , s2}; H = {h0, a , b}; F = {s2};
(1)f (s0 , a , h0) = (s0, h0a), (2)f (s0 , b , h0) = (s0, h0b), (3) f (s0 , a , a) = {(s0,aa) , (s1 , $)}, (4) f (s0 , b , a) = (s0,ab), (5) f (s0 , a , b) = (s0 , ba), (6) f (s0 , b , b) = {(s0 , bb) , (s1 , $)}, (7) f (s1 , a , a) = (s1, $), (8) f (s1 , b , b) = (s1, $), (9) f (s2 , , h0) = (s2 , $),
является недетерминированнымавтоматом, поскольку одному и тому же набору аргументов, например (sо , a, a), соответствуют два значения функции. Работу автомата рассмотрим для входной цепочки abba. Если использовать последовательность команд (1),(4),(6.1),(5), то получим последовательность конфигураций:
(s0,abba,h0) |-- (s0,bba,h0a), (1) |-- (s0,ba,h0ab), (4) |-- (s0,a,h0abb), (6.1) |-- (s0,$,h0abba). (5),
которая показывает, что дальнейшая работа невозможна, т.к. входная цепочка прочитана и переход (s0,$,h0abba) не определен. Если же использовать последовательность команд (1),(4),(6.2),(3),(9), то получим заключительную конфигурацию:
(s0,abba,h0) |-- (s0,bba,h0a), (1) |-- (s0,ba,h0ab), (4) |-- (s1,a,h0a), (6.2) |-- (s1,$,h0), (3) |-- (s2,$,$) . (9).
Т.о. можно сделать вывод о том, что цепочка abba допускается автоматом М2. В общем случае справедливо следующее утверждение.