Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_Разное / шп_тео.doc
Скачиваний:
3
Добавлен:
16.04.2013
Размер:
5.49 Mб
Скачать

Основные типы контекстно-свободных грамматик:

грамматика если выполняются два условия:

  • правая часть каждой продукции начинается терминальным символом,

  • если две продукции имеют совпадающие левые части, то правые части этих продукций должны начинаться различными терминальными символами.

- множество терминалов, следующих за данным нетерминалом.

- множество выбора продукций, где - продукция .

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

Если продукция грамматики имеет вид , где , , то . Если продукция имеет вид , то.

- грамматик а если выполняются два условия:

  • правая часть каждой продукции либо начинается с терминального символа, либо представляет собой ;

  • множества выбора продукций с одной и той же левой частью не пересекаются.

расширим понятие множества выбора, назовем его множеством направляющих символов и обозначим DR(p), где . Множество или .

LL(1)-грамматика - тогда и только тогда, когда множества направляющих символов для правил с одинаковой левой частью не пересекаются. Важным свойством LL(k) грамматик является то, что они однозначны . Таким образом, если удается показать, что исследуемая грамматика - LL(k)- грамматика, то тем самым удается подтвердить ее однозначность.

LR(0) грамматик, если из условий:

  • ни одна из ее продукций не содержит в правой части исходного символа

  • существуют две правосторонние схемы вывода

, , где , вытекает, что .

На основе грамматики введем пополненную грамматику , где . Тогда грамматику G будем называть LR(k)-грамматикой для , если из условий: , , следует ( т.е. ).

Важным свойством LR(k)- грамматик является то, что любой LR(k) язык является также LR(1) языком и даже LR(0) языком, если допустить, что за каждым его предложением следует знак окончания.

Методы разбора формальных языков

метод распознавателей. Распознаватель можно представить в виде алгоритма, определяющего некоторое множество предложений языка.

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

Считывающая головка в каждый момент времени указывает на одну ячейку входной ленты. За один шаг работы распознавателя она может сдвинуться на одну ячейку вправо или влево по входной ленте. головка только "читает" текущий символ на ленте, не изменяя его

Вспомогательная память предназначена для хранения дополнительной информации, непосредственно влияющей на процесс работы распознавателя. Как правило, она имеет сложную структуру и построена из символов некоторого алфавита (обозначим его M). В частности память можно представить в виде структуры, состоящей из строк множества . Для работы с памятью используются две функции: функция доступа к памяти и функция преобразования памяти. Первую функцию можно представить в виде отношения . Функция f каждому текущему состоянию памяти - структуре строк из ставит в соответствие один элемент структуры - строку из . Вторая функция может иметь вид , она преобразует структуру памяти в зависимости от помещаемой в память информации - строки из .

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

Распознаватель работает по отдельным шагам, переходя из одной конфигурации в другую. На каждом шаге выполняется одна и та же последовательность действий:

считывающая головка сдвигается на одну ячейку вправо,

в зависимости от считанного символа на входной ленте и состояния памяти модифицируется ее содержимое,

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

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

В процессе своей работы распознаватель может устанавливать синтаксическую структуру предложения, заданную деревом разбора. Процесс построения дерева разбора исходного предложения называют разбором или синтаксическим анализом. Можно пронумеровать продукции в грамматике и представлять разбор конкретного предложения в виде последовательности номеров продукций, применяемых при выводе этого предложения. Левым разбором строки x называется последовательность продукций, примененных при левом выводе строки x из начального символа S. Правым разбором строки x называется обращение последовательности продукций, примененных при правом выводе строки x из начального символа S.

Большинство методов разбора сводится к двум основным вариантам сверху вниз и снизу вверх. Построение дерева методом сверху вниз или при нисходящем анализе начинается с корня дерева. Каждая внутренняя вершина раскрывается в том случае, если известны и построены все ее вершины предшественники. Решение о том, какую продукцию необходимо использовать для раскрытия внутренней вершины принимается на основе текущих символов на входной ленте и во вспомогательной памяти.

При использовании метода снизу вверх заполнение начинается с листьев дерева. Следующая по порядку вершина дерева строится в том случае, если все ее вершины преемники принадлежат построенной части дерева.

Соседние файлы в папке _Разное