- •Входные языки сапр и
- •Предисловие
- •1. Языки формулировки задания
- •1.1. Функции. Программ перевода.
- •Общие требования к языкам формулировки задания.
- •1.1.2. Требования к языкам формулировки задания с точки зрения их использования.
- •1.2.Лексический и синтаксический анализ.
- •1.3.Проверка контекста и порождение сценария.
- •2.Теория формальных языков.
- •2.1. Порождающие грамматики
- •2.2. Иерархия распознающих автоматов
- •3. Синтаксис языков программирования.
- •3.1. Основные характеристики языков.
- •3.2. Нормальные формы Бекуса
- •3.3. Определение и общие свойства порождающих грамматик
- •3.4. Контекстно-свободные грамматики
- •3.4.1. Определение дерева вывода.
- •3.4.2. Алгоритм получения скобочной записи синтаксического дерева вывода.
- •3.4.3. Операции над бинарными отношениями.
- •3.5. Автоматные грамматики.
- •3.6. Методы распознавания и анализа языков.
- •3.6.1. Машина Тьюринга как распознающее устройство.
- •3.6.2. Автоматы и преобразователи с магазинной памятью.
- •3.7. Построение анализаторов кс-языков по порождающим грамматикам.
- •3.7.1. Анализаторы предшествования.
- •3.7.2. Lr(k)-анализатор
- •3.7.3. Глобальный анализатор
- •3.8. Контекстные условия языков программирования
3.7. Построение анализаторов кс-языков по порождающим грамматикам.
Синтаксические анализаторы делятся на два класса:
Анализаторы, которые, читая входные цепочки, строят их деревья выводов в порождающих грамматиках, как говорят, снизу вверх. Те анализаторы, которые просматривают входные цепочки один раз слева направо или справа налево, являются анализаторами данного класса, к ним относятся и МП-автоматы. Такие анализаторы работают детерминировано, но они построены для однозначных грамматик и имеют ряд других ограничений.
Анализаторы, которые строят деревья выводов, начиная с корня и вершин, соответствующим наиболее крупным синтаксическим конструкциям. Говорят, что такие анализаторы работают в режиме сверху вниз. Многие анализаторы этого класса просматривают входные цепочки многократно. Определенным недостатком анализатором является то, что в них процесс недетерминирован, но анализаторы этого класса более универсальны – многие из них не требуют никаких ограничений на КС-грамматики.
Ниже мы рассмотрим три метода автоматического построения анализаторов по КС- и УКС-грамматикам. Анализаторы, получаемые с помощью первых двух методов, работают в режиме снизу вверх и могут быть представлены в виде детерминированных устройств. Анализаторы, которые строятся по третьему методу, представляют собой алгоритмы упорядоченного перебора правил исходных грамматик с целью нахождения деревьев выводов входных цепочек сверху вниз.
3.7.1. Анализаторы предшествования.
Автоматическое построение анализаторов опирается на отношение предшествования.
Пусть имеется КС-грамматика G=(VA, VT, I, S).
Рассмотрим пару символов VAVT.
1) Будем считать, что для пары ( в грамматике G выполняется отношение ( если в S содержится правило вывода А2
2
*
*
В
3) Для пары (выполняется отношение (если выполняется одно из следующих условий:
*
*
в S содержится правило вывода вида B, из В выводима цепочка, заканчивающаяся символом
В
*
*
*
*
в S содержится правило вывода вида АВC, из В выводима цепочка, заканчивающаяся символом , а из С – цепочка, начинающаяся с символа
В C
В этих отношениях А, В, С – некоторые нетерминальные символы, цепочки из (VTVА)*.
Определение: КС-грамматика называется грамматикой предшествования, если для каждой пары символов выполнено не более одного отношения предшествования.
Для такой грамматики может быть построен детерминированный анализатор снизу-вверх.
3.7.2. Lr(k)-анализатор
LR(k)-анализатор – устройство, состоящее из потенциально неограниченной вправо входной ленты и двух магазинов: верхнего и нижнего.
На входной ленте помещается еще не учтенная правая подцепочка анализируемой цепочки, к которой справа приписывается k маркеров. В верхнем магазине помещаются цепочки, состоящие из символов состояний, в нижнем – цепочки над объединением множеств нетерминальных и терминальных символов грамматики. Читая входную цепочку слева направо, анализатор пытается свернуть ее к начальному символу грамматики. В нижнем магазине находятся частично свернутые левые подцепочки входной цепочки, уже просмотренные анализатором. На каждом такте работы LR(k) – анализатор может выполнить одно из двух возможных действий: сдвиг или свертку. После выполнения определенного количества тактов анализатор допускает или отвергает анализируемую цепочку.
Число k анализатора определяет длину цепочки.