- •Содержание
- •1 Формальные языки и грамматики
- •1.1 Основные понятия теории формальных языков
- •Определение Цепочка, которая не содержит ни одного символа, называется пустой цепочкой и обозначается .
- •1.2 Способы задания языков
- •1.2.1 Формальные грамматики
- •1.2.1.1 Определение формальной грамматики
- •Определение Цепочка (vtvn)* выводима из цепочки в грамматике(обозначается*), если существует последовательность цепочек (n0) такая, что .
- •1.2.1.3 Эквивалентность грамматик
- •1.2.2 Формы Бэкуса - Наура
- •1.2.3 Диаграммы Вирта
- •1.2.5 Механизмы распознавания языков
- •1.2.5.1 Определение распознавателя
- •1.2.5.2 Схема работы распознавателя
- •1.2.5.3 Классификация распознавателей
- •2 Регулярные грамматики и языки
- •2.1 Регулярные выражения
- •2.2 Лемма о разрастании языка
- •2.3 Конечные автоматы
- •2.3.1 Определение конечного автомата
- •2.3.2 Распознавание строк конечным автоматом
- •Существуют следующие способы представления функции переходов: - командный способ.Каждую команду ка записывают в форме , где.
- •2.3.3 Преобразование конечных автоматов
- •2.3.3.1 Преобразование конечного автомата к детерминированному виду
- •Алгоритм Преобразование нка в дка
- •2.3.3.2 Минимизация конечного автомата
- •2.3.3.2.1 Устранение недостижимых состояний ка
- •2.3.3.2.2 Объединение эквивалентных состояний ка Алгоритм Объединение эквивалентных состояний ка
- •2.4 Взаимосвязь способов определения грамматик
- •2.4.1 Построение ка по регулярной грамматике
- •Выход:ка.
- •3 Контекстно-свободные языки и грамматики
- •3.1 Задача разбора
- •3.1.1 Вывод цепочек
- •Определение Цепочка (vtvn)* выводима из цепочки в грамматике(обозначается*), если существует последовательность цепочек (n0) такая, что .
- •3.1.2 Дерево разбора
- •3.1.2.1 Нисходящее дерево разбора
- •3.1.2.2 Восходящее дерево разбора
- •3.1.3 Однозначность грамматик
- •3.2 Преобразование кс-грамматик
- •3.2.1 Проверка существования языка грамматики
- •3.2.2 Устранение недостижимых символов
- •Алгоритм Устранение нетерминалов, не порождающих терминальных строк Вход: кс-грамматика.
- •Алгоритм Устранение недостижимых символов Вход: кс-грамматика.
- •Определим множество достижимых символов z грамматики g, т.Е. Множество
- •3.2.3 Устранение -правил Алгоритм Устранение -правил Вход: кс-грамматика.
- •3.2.4 Устранение цепных правил Алгоритм Устранение цепных правил Вход: кс-грамматика.
- •3.2.5 Левая факторизация правил Алгоритм Устранение левой факторизации правил Вход: кс-грамматика.
- •3.2.6 Устранение прямой левой рекурсии Алгоритм Устранение прямой левой рекурсии Вход: кс-грамматика.
- •3.3 Автомат с магазинной памятью
- •3.3.1 Определение мп-автомата
- •3.3.2 Разновидности мп-автоматов
- •3.3.3 Взаимосвязь мп-автоматов и кс-грамматик
- •3.3.3.1 Построение мп-автомата по кс-грамматике
- •3.3.3.2 Построение расширенного мп-автомата по кс-грамматике
- •3.4 Нисходящие распознаватели языков
- •3.4.1 Рекурсивный спуск
- •3.4.1.1 Сущность метода
- •3.4.1.2 Достаточные условия применимости метода рекурсивного спуска
- •3.4.2 Распознаватели ll(k)-грамматик
- •3.4.2.1 Определение ll(k)-грамматики
- •3.4.2.2 Необходимое и достаточное условие ll(1)-грамматики
- •3.4.2.3 Построение множества first(1, a)
- •3.4.2.4 Построение множества follow(1, a)
- •3.4.2.5 Алгоритм «сдвиг-свертка» для ll(1)-грамматик
- •Шаг 6. Получили следующую цепочку вывода:
- •3.5.1.1.2 Поиск основы сентенции грамматики
- •3.5.1.1.3 Построение множеств l(a) и r(a)
- •3.5.1.1.5 Алгоритм «сдвиг - свертка» для грамматик простого предшествования
- •Шаг 3. Функционирование распознавателя для цепочки (((aa)a)a) показано в таблице 3.9.
- •3.5.1.2 Грамматика операторного предшествования
- •3.5.1.2.1 Определение грамматики операторного предшествования
- •3.5.1.2.2 Построение множеств Lt(a) и Rt(a)
- •3.5.1.2.4 Алгоритм «сдвиг-свертка» для грамматики операторного предшествования
- •3.5.2 Распознаватели lr(k)-грамматик
- •3.6 Соотношение классов кс-грамматик и кс-языков
- •3.6.1 Соотношение классов кс-грамматик
- •3.6.2 Соотношение классов кс-языков
- •4 Принципы построения языка
- •4.1 Лексика, синтаксис и семантика языка
- •4.2 Определение транслятора, компилятора, интерпретатора и ассемблера.
- •4.3 Общая схема работы компилятора
- •4.4 Лексический анализ
- •4.4.1 Задачи лексического анализа
- •4.4.2 Диаграмма состояний с действиями
- •4.4.3 Функция scanner
- •4.5 Синтаксический анализатор программы
- •4.5.1 Задача синтаксического анализатора
- •4.5.2 Нисходящий синтаксический анализ
- •Теорема Достаточные условия применимости метода рекурсивного спуска
- •4.6 Семантический анализ программы
- •4.6.1 Обработка описаний
- •4.6.2 Анализ выражений
- •4.6.3 Проверка правильности операторов
- •4.7 Генерация кода
- •4.7.1 Формы внутреннего представления программы
- •4.7.1.1 Тетрады
- •4.7.1.2 Триады
- •4.7.1.3 Синтаксические деревья
- •4.7.1.4 Польская инверсная запись
- •Составной оператор begin s1; s2;...; Sn end в полиЗе записывается как s1 s2... Sn.
- •4.7.1.5 Ассемблерный код и машинные команды
- •4.7.2 Преобразование дерева операций в код на языке ассемблера
- •4.8 Оптимизация кода
- •4.8.1 Сущность оптимизации кода
- •4.8.2 Критерии эффективности результирующей программы
- •4.8.3 Методы оптимизации кода
- •4.8.4 Оптимизация линейных участков программ
- •4.8.4.1 Свертка объектного кода
- •4.8.4.2 Исключение лишних операций
- •4.8.5 Оптимизация логических выражений
- •4.8.6 Оптимизация циклов
- •4.8.7 Оптимизация вызовов процедур и функций
- •4.8.9 Машинно-зависимые методы оптимизации
- •4.8.9.1 Распределение регистров процессора
- •4.8.9.2 Оптимизация кода для процессоров, допускающих распараллеливание вычислений
- •5 Формальные методы описания перевода
- •5.1 Синтаксически управляемый перевод
- •5.1.1 Схемы компиляции
- •5.1.4 Практическое применение су-схем
- •5.2 Транслирующие грамматики
- •5.2.1 Понятие т-грамматики
- •5.3 Атрибутные транслирующие грамматики
- •5.3.1 Синтезируемые и наследуемые атрибуты
- •5.3.2 Определение и свойства ат-грамматики
- •5.3.3 Формирование ат-грамматики
- •Решение
5.3.2 Определение и свойства ат-грамматики
АТ-грамматика — это транслирующая грамматика, дополненная следующим образом.
1. Каждый терминал, нетерминал и операционный символ имеет конечное множество атрибутов, и каждый атрибут имеет множество (возможно, бесконечное) допустимых значений.
Все атрибуты нетерминалов и операционных символов делятся на наследуемые и синтезируемые.
Наследуемые атрибуты вычисляются следующим образом:
а) значение наследуемого атрибута из правой части правила грамматики вычисляется как функция некоторых других атрибутов символов, входящих в правую или левую часть данного правила;
б) начальные значения наследуемых атрибутов аксиомы грамматики полагаются известными.
4. Синтезируемые атрибуты вычисляются так:
а) значение синтезируемого атрибута нетерминала из левой части правила грамматики вычисляется как функция некоторых других атрибутов символов из левой или правой части данного правила;
б) значение синтезируемого атрибута операционного символа вычисляется как функция некоторых других атрибутов этого символа.
5. Значения атрибутов терминалов считаются заданными, они не относятся ни к наследуемым, ни к синтезируемым.
Исходя из этого определения и анализа грамматик, убеждаемся, что в грамматике выражений атрибуты всех нетерминалов — синтезируемые, а в грамматике описаний — наследуемые. В обоих грамматиках атрибуты операционных символов — наследуемые. Значения атрибутов терминалов устанавливает лексический анализатор. Атрибуты отдельных символов не указывались, поскольку не играли никакой роли.
АТ-грамматики используют для построения атрибутных деревьев разбора, атрибутных активных цепочек и атрибутных переводов (трансляций). Атрибутное дерево строится следующим образом.
1. По Т-грамматике построить дерево разбора активной цепочки, состоящей из терминалов и операционных символов без атрибутов.
Присвоить значения атрибутам терминалов, входящих в дерево разбора.
Присвоить начальные значения наследуемым атрибутам аксиомы грамматики на дереве разбора.
Вычислять значения атрибутов символов на дереве, пока это возможно, по правилу: найти атрибут, которого еще нет на дереве, но аргументы для функции его вычисления уже известны; вычислить значение этого атрибута; разместить атрибут на дереве. Если по завершении п.4 значения всех атрибутов всех символов дерева оказываются вычисленными, то такое дерево называют завершенным.
Причиной незавершенности дерева может оказаться так называемая круговая зависимость между атрибутами, входящими в одну формулу. АТ - грамматика, обеспечивающая завершенность любого дерева разбора, называется корректной. Именно корректные грамматики представляют интерес для разработчиков трансляторов.
Показано, что можно найти подклассы АТ - грамматик, которым соответствуют детерминированные МП - машины. Сформулирован ряд важных теорем, отдельные из которых дадим здесь без доказательства.
Теорема 1. Любая трансляция, определяемая L-AT-грамматикой, может быть выполнена недетерминированной атрибутной МП - машиной.
АТ - грамматика называется L-AT-грамматикой, если выполняются следующие условия (ограничения на АТ - грамматику).
1. Значение наследуемого атрибута символа из правой части правила может зависеть только от наследуемых атрибутов левой части правила и от любых атрибутов символов, стоящих в правой части правила левее рассматриваемого символа.
Значение синтезируемого атрибута нетерминала из левой части правила может зависеть только от наследуемых атрибутов этого символа и от любых атрибутов символов правой.
Значение синтезируемого атрибута операционного символа зависит только от наследуемых атрибутов этого символа. Условие 1 делает наследуемые атрибуты некоторого узла дерева разбора зависящими (прямо или косвенно) от атрибутов терминалов, расположенных на дереве левее данного узла. Отсюда и наименование грамматики (Left - левая). Условия 2 и 3 делают грамматику корректной.
Теорема 4. Любую трансляцию, определяемую L-AT-грамматикой, у которой входная грамматика является LL(k)-грамматикой, можно выполнить на атрибутной детерминированной МП-I машине с концевым маркером.
Отметим, что здесь, как и в случае с МП-распознавателем, LL(k)-грамматика обеспечивает применение нисходящей стратегии анализа.
Теорема 6. Всякая трансляция, определяемая некоторой S-атрибутной польской транслирующей грамматикой (S-АПТ-грамматикой) с входной LR(к)-грамматикой, может быть выполнена детерминированной атрибутной МП - машиной с концевым маркером.
В данном случае МП - машина работает с использованием восходящей стратегии анализа. АТ - грамматика называется польской, если все операционные символы встречаются только в качестве последних символов правых частей правил грамматики. Наконец, L-AT-грамматика называется S-атрибутной, если все атрибуты нетерминалов — синтезируемые.