- •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.5 Исключение леворекурсивных правил.
Определение. Правило вида <A> <A>, где A VA, (Vт VA) *, называетсяправорекурсивным, а правило вида<A> <A>- леворекурсивным. |
Утверждение. Для каждой КС-грамматики Г, содержащей леворекурсивные правила, можно построить эквивалентную грамматику Г', не содержащую леворекурсивных правил. |
Способ построения эквивалентной грамматики заключается в следующем. Допустим, что исходная грамматика Г содержит правила: <A> <A>1 | <A>2 | ... |<A>m| , где ни одна цепочкане начинается с <A> и (Vт VA) *. Введем новый нетерминал <A'> и преобразуем правила так:
<A> 1 |2 |...|n|1<A'> |2<A'>|...|n<A'>, <A'> 1 |2 |...|m|1<A'> |2<A'>|...|m<A'>.
Заменяя все правила с левой рекурсией в Г описанным способом, получим грамматику Г', причем L(Г)=L(Г') , поскольку каждая цепочка, выведенная в грамматике Г, может быть построена в грамматике Г'. Рассмотрим построение выводов в Г и Г'. В грамматике Г вывод цепочки имеет вид:
< A> <A> 1 <A> 1 1 <A> 1 1 1 1 1 11,
в грамматике Г' эта же цепочка выводится так:
<A> 1<A'> 11<A'> 1 11<A'> 1 1 11.
Чтобы показать технику преобразования, рассмотрим пример. Требуется преобразовать грамматику Г1. 9(рассмотренную ранее), которая задана схемой:
Г1. 9: R={<E> <E> + <T> | <T>, < T> <T> * <F> | <F>, <F> ( <E> ) | a}.
Следуя описанному способу, правила <E> <E> + <T> | <T> преобразуем в правила <E><T> | <T><E'> и <E'> +<T> | +<T><E'> , а правила <T> <T> * <F> | <F> преобразуем в правила <T> <F> | <F><T'> и <T'> F> | * <F><T'>. В результате получаем грамматику Г'1. 9,имеющую схему:
Г'1. 9 : R'= { <E> < T>,
<E> <T><E'>,< E'> + <T>,<E'> + <T><E'>,<T> <F>,<T> <F><T'>,<T'> * <F>,<T'> * <F><T'>,< F> a, <F> (<E>) },
не содержащую леворекурсивных правил.
2.6 Исключение цепных правил.
Определение.Правило грамматики вида <A><B>, где <A>,<B>VA, называетсяцепным. |
Утверждение. Для КС-грамматики Г, содержащей цепные правила , можно построить эквивалентную ей грамматику Г', не содержащую цепных правил. |
Идея доказательства заключается в следующем. Если схема грамматики имеет вид
R = {...,<A> <B>,...,<B><C>, ... , <C>a<X> },
то такая грамматика эквивалентна грамматике со схемой
R' = {...,<A> a<X>,...},
поскольку вывод в грамматике со схемой R цепочки a<X> :
<A> B><C>a<X>
может быть получен в грамматике со схемой R' с помощью правила <A> a<X>. В общем случае доказательство последнего утверждения можно выполнить так. Разобьем R на два подмножества R1и R2, включая в R1все правила вида <A>B>. Для каждого правила из R1найдем множество правил S(<Ai>), которые строятся так: если <Ai>* <Aj> и в R2есть правило <Aj>, где- цепочка словаря(Vт VA)*, то в S(<Ai>) включим правило <Ai> . Построим новую схему R' путем объединения правил R2и всех построенных множеств S(<Ai>). Получим грамматику Г' = {Vт ,Va , I , R'}, котораяэквивалентназаданной и не содержит правил вида <A><B>. В качестве примера выполним исключение цепных правил из грамматики Г1. 9со схемой :
Г1. 9: R={<E> <E> + <T> | <T>, < T> T> * <F> | <F>, <F> ( <E> ) | a}.
Вначале разобьем правила грамматики на два подмножества:
R1 = { <E><T>,<T><F> } , R2 = { <E><E>+<T>, <T><T>*<F>, <F>(<E>) | a }
Для каждого правила из R1 построим соответствующее подмножество.
S(<E>) = { <E> T>*<F>, <E> (<E>) | a }, S(<T>) = { <T> (<E>) | a}
В результате получаем искомую схему грамматики без цепных правил в виде:
R2 U S(<E>) U S(<T>) = { <E> --> <T>+<T> | <T>*<F> | (<E>) | a,
<T> <T>*<F> | (<E>) | a, <F>(<E>) | a }
Последний вид рассматриваемых преобразований связан с удалением из грамматики правил с пустой правой частью.
Определение.Правило вида <A>$ называетсяаннулирующим правилом. |