Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ЛО.DOC
Скачиваний:
39
Добавлен:
23.03.2016
Размер:
534.53 Кб
Скачать

3.7. Построение анализаторов кс-языков по порождающим грамматикам.

Синтаксические анализаторы делятся на два класса:

  1. Анализаторы, которые, читая входные цепочки, строят их деревья выводов в порождающих грамматиках, как говорят, снизу вверх. Те анализаторы, которые просматривают входные цепочки один раз слева направо или справа налево, являются анализаторами данного класса, к ним относятся и МП-автоматы. Такие анализаторы работают детерминировано, но они построены для однозначных грамматик и имеют ряд других ограничений.

  1. Анализаторы, которые строят деревья выводов, начиная с корня и вершин, соответствующим наиболее крупным синтаксическим конструкциям. Говорят, что такие анализаторы работают в режиме сверху вниз. Многие анализаторы этого класса просматривают входные цепочки многократно. Определенным недостатком анализатором является то, что в них процесс недетерминирован, но анализаторы этого класса более универсальны – многие из них не требуют никаких ограничений на КС-грамматики.

Ниже мы рассмотрим три метода автоматического построения анализаторов по КС- и УКС-грамматикам. Анализаторы, получаемые с помощью первых двух методов, работают в режиме снизу вверх и могут быть представлены в виде детерминированных устройств. Анализаторы, которые строятся по третьему методу, представляют собой алгоритмы упорядоченного перебора правил исходных грамматик с целью нахождения деревьев выводов входных цепочек сверху вниз.

3.7.1. Анализаторы предшествования.

Автоматическое построение анализаторов опирается на отношение предшествования.

Пусть имеется КС-грамматика G=(VA, VT, I, S).

Рассмотрим пару символов VAVT.

1) Будем считать, что для пары ( в грамматике G выполняется отношение ( если в S содержится правило вывода А2

2

*

*

) Будем считать, что для пары (выполняется отношение (<если в S содержится правило вывода АВ, а из

В

3) Для пары (выполняется отношение (если выполняется одно из следующих условий:

  • *

    *

    в S содержится правило вывода вида B, из В выводима цепочка, заканчивающаяся символом

В 

  • *

    *

    *

    *

    в S содержится правило вывода вида АВC, из В выводима цепочка, заканчивающаяся символом , а из С – цепочка, начинающаяся с символа

В  C

В этих отношениях АВС – некоторые нетерминальные символы, цепочки из (VTVА)*.

Определение: КС-грамматика называется грамматикой предшествования, если для каждой пары символов выполнено не более одного отношения предшествования.

Для такой грамматики может быть построен детерминированный анализатор снизу-вверх.

3.7.2. Lr(k)-анализатор

LR(k)-анализатор – устройство, состоящее из потенциально неограниченной вправо входной ленты и двух магазинов: верхнего и нижнего.

На входной ленте помещается еще не учтенная правая подцепочка анализируемой цепочки, к которой справа приписывается k маркеров. В верхнем магазине помещаются цепочки, состоящие из символов состояний, в нижнем – цепочки над объединением множеств нетерминальных и терминальных символов грамматики. Читая входную цепочку слева направо, анализатор пытается свернуть ее к начальному символу грамматики. В нижнем магазине находятся частично свернутые левые подцепочки входной цепочки, уже просмотренные анализатором. На каждом такте работы LR(k) – анализатор может выполнить одно из двух возможных действий: сдвиг или свертку. После выполнения определенного количества тактов анализатор допускает или отвергает анализируемую цепочку.

Число k анализатора определяет длину цепочки.