- •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. Резюме
9.1.7 Кодирование с числом элементов памяти, равным числу состояний .
Этот способ кодирования заключается в том, что каждому из l состояний автомата ставится в соответствие один элемент памяти. В каждый момент времени только один элемент памяти должен находиться в состоянии “1”, а остальные - в состоянии “0”, поскольку автомат может находиться только в одном состоянии. Пример кодирования пяти состояний описанным способом приведен в табл. 11. Используемый способ часто называют кодированием с применением кодов “один из l”. Следует отметить, что этот способ кодирования позволяет упростить процедуру построения функций возбуждения и функций выходов за счет исключения этапа минимизации. Остановимся на этом вопросе подробнее.
Если для кодирования состояний используются l двоичных переменных у1, y2 , ..., yl, то существует2l различных двоичных наборов значений этих переменных. Обозначим множество всех двоичных наборов Н. Разобьем это множество на l пересекающихся подмножествH1, H2, ..., Hl таким образом, чтобы в каждое подмножество Hlвходили2l-1двоичных наборов, определяющих переключательную функцию вида yi. В каждое подмножество Hiвходит только один наборi, используемый при кодировании. Он состоит из l - 1 нуля и одной единицы, стоящей на i-м месте. При этом множество Hi' = Hi-i, представляет собой совокупность неиспользованных двоичных наборов. Пусть автомат переходит из состояния s', которому приписан кодi, в состояние s”, которому приписан кодi, под действием набора входных сигналов1,2, ...,n. Если в качестве элемента памяти используется триггер D, то функция возбуждения, реализующая такой переход , имеет вид :
Представим эту функцию следующим образом: yk' = x11 x22 ... xnn(у1, y2, ..., yl). Функция(у1, y2, ..., yl). является неполностью определенной переключательной функцией. Доопределим ее единицами на всех наборах, входящих в множество Hi'. В результате получаем функцию, совокупность единичных наборов которой совпадает с множеством Hi. Согласно построению, такая функция является переменной yi, поэтому имеемyk' = x11 x22 ... xnn уiПриведенные рассуждения показывают, что при выбранном способе кодирования каждый дизъюнктивный член функций возбуждения (функций выхода) содержит только одну внутреннюю переменную, определяющую соответствующее состояние автомата.
9.1.8 Структурные схемы с дешифратором.
На рис. 22 приведена структурная схема автомата с двумя дешифраторами. Дешифратор ДС1 служит в схеме для преобразования входных сигналов, а дешифратор ДС2 - для преобразования кодов состояний.
Число выходов каждого дешифратора определяется числом различных наборов значений его входных переменных. Каждых входной набор возбуждает единственный сигнал, соответствующий единице, на выходе дешифратора. Таким образом, в каждый момент времени на одном из выходов дешифратора имеется сигнал, соответствующий единице, а на остальных выходах - сигналы, соответствующие нулю. Это обстоятельство позволяет нам считать схемы с дешифратором состояний разновидностью схем с кодированием “один из l” и использовать свойства таких кодов и способы построения функций возбуждения и выходов, описанные в предыдущем параграфе, для рассмотрения схем. Включение дешифратора входных сигналов в схему позволяет применить для описания переходов двухместные конъюнкции. При этом функции возбуждения и функции выходов могут быть представлены в виде:
yi' = gkxs';zj = gpxq'.
Принцип реализации таких функций показан на рис. 22 в поле комбинационной схемы.
9.1.9 Структурная схема с удвоенным числом элементов памяти.В структурной схеме автомата, выполненного на элементах импульсного типа (рис. 4), линии задержки используются для сохранения схемы, относящегося к моменту прихода входного сигнала, на время действия синхронизирующего сигнала. Такая задержка изменения состояния гарантирует отсутствие состязаний в схеме , которые могли бы возникнуть во время действия синхронизирующего сигнала. Применение линий задержки в схемах в настоящее время ограничивается трудностями их изготовления в виде микроэлектронных интегральных схем. Последнее обстоятельство привело к тому, что на практике начали заменять линии задержки элементами памяти, которые в потенциальных системах элементов, обычно строятся на основе логических элементов и не нарушают технологической целостности схемы. Структурная схема автомата с двумя ярусами элементов памяти изображена на рис. 24. Первый ярус элементов памяти используется в схеме для хранения кода состояния, относящегося к моменту прихода входного сигнала. Выходные сигналы элементов памяти этого яруса подаются на вход комбинационной схемы. Второй ярус элементов памяти предназначен для хранения кода состояния, в которое переходит автомат в рассматриваемом такте. Этот код должен передаваться в элементы памяти первого яруса либо в момент изменения входного сигнала, либо в момент его отсутствия.
В схеме используется два синхронизирующих сигнала 1и2. Сигнал2должен быть несколько сдвинут во времени относительно момента подачи входного сигнала. Такой сдвиг позволяет исключить влияние на элементы памяти переходных процессов, обусловленных риском в комбинационной части схемы. Сигнал2подается на элементы конъюнкции и разрешает прохождение сигналов, соответствующих значениям функций возбуждения, на входы элементов памяти второго яруса. Сигнал1осуществляет передачу кода состояния из элементов памяти второго яруса в элементы памяти первого яруса. Этот сигнал должен подаваться в схеме обязательно после окончания действия сигнала2и входного сигнала. Необходимо отметить, что приведенная структурная схема широко используется на практике при построении как типовых блоков цифровых вычислительных устройств: счетчиков, регистров, делителей и т. п., так и управляющих схем.