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

Теория формальных языков и трансляций

Часть II. Глава 2.

LL(k)-ГРАММАТИКИ И ТРАНСЛЯЦИИ

1

Часть II: Глава 2

§ 2.1. Введение в LL(k)-грамматики

2.1.1. Неформальное описание. В гл. II.1 было показано, что произвольная простая синтаксиче-

ски управляемая трансляция (sdt) всегда может быть реализована при помощи недетерминированного магазинного преобразователя (npdt). Если же, кроме того, схема (sdts), посредством которой задается эта трансляция, является

семантически однозначной, то выход трансляции можно получить по левостороннему анализу входной цепочки при помощи детерминированного магазинного преобразователя (dpdt).

2

Часть II: Введение в LL(k)-грамматики

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

Одним из таких подклассов КС-грамматик являются так называемые LL(k)-грамматики. Это наибольший “естественный” класс левоанализируемых грамматик.

3

Часть II: Введение в LL(k)-грамматики

Определение 2.1. Пусть G = (VN, VT, P, S)

однозначная cfg, w = a1a2 an, n > 0, где

al VT (l = 1, 2, …, n), и w L(G).

Тогда существует единственная последова-

тельность

такая, что

m= w.

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

 

…, ,

 

 

 

 

m

 

= S,

pi

 

 

для 0 i < m и

 

 

 

i

lm

i+ 1

 

 

 

 

 

 

Последовательность номеров правил грамматики G p0, p1,…, pm – 1 называется лево-

сторонним анализом цепочки w.

4

Часть II: Введение в LL(k)-грамматики

Теперь предположим, что мы хотим

найти этот левосторонний анализ, просматривая w слева направо один раз. Мы могли бы попытаться сделать это путём построения последовательности левосентенциальных форм …, m.

Начальная сентенциальная форма = S уже известна. Остается определить способ построения следующей сентенциальной формы по последней из уже построенных.

5

Часть II: Введение в LL(k)-грамматики

Пусть i = a1a2...aj A — последняя из построенных сентенциальных форм.

Сравнивая закрытую часть этой сентенциальной формы a1a2...aj с цепочкой w = a1a2aj aj+ 1an, мы можем определить её окончание aj+ 1an, вывод которого ещё предстоит построить.

6

Часть II: Введение в LL(k)-грамматики

Было бы желательно, чтобы i + 1 можно было найти, зная только

(1)a1a2 ... aj — часть входной цепочки, которую мы уже просмотрели к этому моменту,

(2)несколько следующих входных симво-

лов aj+ 1 aj+ k для некоторого фиксированного k, называемой аванцепочкой, и

(3)A VN.

7

Часть II: Введение в LL(k)-грамматики

Если эти три величины однозначно определяют, какое правило должно использоваться для раскрытия A, то мы смогли бы точно определить i+ 1 по i .

Говорят, что грамматика, в которой каждый левосторонний вывод имеет это свойство, есть LL(k)-грамматика.

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

ванный левосторонний анализатор, кото-

рый действует за линейное время.

8

Часть II: Введение в LL(k)-грамматики

2.1.2. Формальное определение

Определение 2.2. Пусть G = (VN, VT, P, S) — cfg.

Определим функцию

FIRSTG k

(

 

*

 

 

{w V * w, w < k, либо

 

 

T

G

 

 

 

 

 

 

*

 

*}.

 

wx, w = k, x V

 

G

T

 

 

 

 

Здесь k — целое, (VN VT)*.

Ret 21

9

Часть II: Введение в LL(k)-грамматики

Отметим, что эта функция определена, в частности, и для терминальной цепочки, и тогда, когда она пуста.

При этом верхний индекс грамматики G

функции

FIRSTk

(

не существен, так как

 

G

 

 

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

10

Соседние файлы в папке lectures