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

3.9. Резюме.

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

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

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

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

Допустить

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

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