Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

spoPresentation2

.pdf
Скачиваний:
6
Добавлен:
11.05.2015
Размер:
4.74 Mб
Скачать

LL(k) - грамматики

Чем больше k, тем более сложные языки описывает грамматика. И тем более сложные распознаватели для них требуются

Распознаватели LL(k)-грамматик просматривают входную цепочку слева направо и строят левосторонний вывод, просматривая k символов входной цепочки

LL(k)-грамматики обеспечивают детерминированный нисходящий разбор

291

LL(k) - грамматики

КС-грамматика G называется LL(k)- грамматикой, если для любой цепочки ZАD V* и первых k терминальных символов, выводимых из подцепочки АD, существует

не более одной подстановки, которую можно применить к нетерминалу А, чтобы получить левый вывод цепочки, начинающийся с Z и продолжающийся k

терминальными символами

292

LL (k) - грамматики

 

S

 

На основе левой части y

 

 

дерева построена Z - уже

 

 

 

 

A

 

разобранная часть входной

 

 

цепочки ZWD

Z

W

D

Правая часть дерева x – еще

неразобранная часть

А – текущий нетерминал на вершине стека МП-автомата

После завершения вывода А раскрывается в часть входной цепочки W, а правая часть х в часть входной цепочки D

293

LL (k) - грамматики

 

S

 

Однозначный выбор

 

 

альтернативы для

 

 

 

 

A

 

нетерминала А может быть

 

 

сделан на основе k первых

 

 

 

Z

W

D

символов цепочки WD,

k

являющейся частью

входной цепочки

 

294

LL(k) - грамматики

Основные свойства LL(k) грамматик:

любая LL(k)-грамматика для k>0 является однозначной

существует алгоритм, позволяющий проверить, является ли заданная грамматика LL(k)-грамматикой для строго определенного k

Все грамматики, допускающие разбор по методу рекурсивного спуска, являются подклассом LL(1) грамматик

295

LL(k) - грамматики

Основные свойства LL(k) грамматик:

не существует алгоритма проверки, является ли заданная КС-грамматика LL(k)-грамматикой для произвольного числа k

не существует алгоритма преобразования произвольной КСграмматики к виду LL(k) грамматики для некоторого k

296

LL(k) - грамматики

Для LL(k)-грамматики при k>1 вовсе не обязательно, чтобы все правые части правил грамматики для каждого нетерминального символа начинались с k различных терминальных символов

Грамматики, для которых все правые части правил для каждого нетерминального символа начинаются с k различных терминальных символов, называются строгие LL(k)-грамматики

297

LL(k) - грамматики

Для строгих LL(k) грамматик распознаватель строится очень просто, однако такие грамматики достаточно редко встречаются.

На практике широко применяются LL(1) грамматики

S-грамматики являются их подклассом

298

LL(k) - грамматики

В общем случае LL(1) грамматики накладывают менее жесткие ограничения по сравнению с S грамматиками

LL(1) грамматики допускают в правой части цепочки, начинающиеся с нетерминала, а также O-правила

LL(1)-грамматика не может содержать для любого нетерминального символа A N

правил, начинающихся с одного и того же терминального символа

299

LL(k) - грамматики

Множество направляющих цепочек DS(k,А,D) для правила АoD, А N, D V* определим как

DS(k,А,D) = S(k,D) F(k,А)

Здесь S(k,D) – множество цепочекпредшественников для строки D длины k,

определяемое как S(k,D)={E | E T*, |E|=k,

D V+, D *EJ, J V*}

Фактически это множество терминальных цепочек, выводимых из непустой строки D,

укороченных до k символов

300

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]