Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Формальные языки и грамматики.doc
Скачиваний:
172
Добавлен:
01.05.2014
Размер:
2 Мб
Скачать
☆

3.9. Резюме.

Одним из классов грамматик, обеспечивающих построение детерминированных магазинных распознавателей, является класс LL(1) грамматик. Этот класс включаетразделенныеислаборазделенныеграмматики. Чтобы определить является ли заданная грамматика LL(1) грамматикой, необходимо найти значения функцийПЕРВ иСЛЕД, а затем проверить условия принадлежности классу LL(1) грамматик. Для построения команд распознавателя нужно найти множестваВЫБОРдля каждого правила грамматики. Распознаватель выполняет команды двух видов: со сдвигом и без сдвига входной головки. При работе распознавателя в магазине происходит построение вывода входной цепочки. Такой вывод соответствуетлевому выводувходной цепоч- ки. Правила применяються при выводе цепочки в такой последовательности, как строится синтаксическое дерево при левом выводе от корня к конечным узлам, поэтому распознаватель называют нисходящим. Если при построении грамматики для заданного языка получилась не LL(1) грамматика, то ее можно попытаться преобразовать, применяя приемы устранения леворекурсив- ных правил, выделения общих частей и построения неукорачивающей грамматики. Однако, эти приемы не всегда приводят к успеху.

3.11. Восходящие распознаватели.

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

Определение. Пусть задана грамматика Г, в схеме которой имеется    правило                           r =Aи задана цепочкаЕсли правая часть цепочки                           правила r является частью цепочки , то можно получить цепочку, заменяя правую часть правила грамматики левой частью.                           В этом случае говорят, что цепочка  tполучается путем                           непосредственного сворачивания цепочкии   используют                           обозначение <= Определение. Если существует множество цепочек= (nтаких, что,n-1n ,                             то говорят, что цепочкаn сворачивается в цепочкуи                             используют обозначение              n .

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

Г3. 12 :         (1) <I>  a,         (2) <I>  (<I><R> ,         (3) <R>  ,<I><R> ,         (4) <R>  ).

можно представить так:

            (a,a) 1 (<I>,a) 1 (<I>,<I>) 4

            (<I>,<I><R> 3(<I><R> 2 <I>.

Каждый шаг рассмотренной процедуры связан с выделением в цепочке правой части какого-либо правила и заменой его левой частью правила. В последовательности сворачиваний правые части правил  называются основойрассматриваемой цепочки. В общем случае основу можно определить так:

Определение. Основой цепочки называют вхождение правой части последнего                           правила, примененного при правом выводе рассматриваемой                           цепочки.

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

Магазин

Вход

Действие

 1. h0

(a,a)

Перенос

 2. h0(

a,a)

Перенос

 3. h0(a

,a)

Свертка(1)

 4. h0(<I>

,a)

Перенос

 5. h0(<I>,

a)

Перенос

 6. h0(<I>,a

)

Свертка(1)

 7. h0(<I>,<I>

)

Перенос

 8. h0(<I>,<I>)

Свертка(4)

 9. h0(<I>,<I><R>

Свертка(3)

10. h0(<I><R>

Свертка(2)

11. h0<I>

Допустить

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

Соседние файлы в предмете Теория языков программирования