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

LL(k)-таблицы

Множество терминальных цепочек Yi

называется множеством локальных правых контекстов для Bi.

В частности, если m = 0, то

TA, L(u) = (A , ).

3) TA, L(u)

или более

таких, что

=

A-

u

undefined, если существует два правил:

A 1 | 2 | … | n,

 

G

i

)

k

L

для

k

FIRST

 

(

 

 

1 i n, n 2.

Случай 3 для LL(k)-грамматик не актуален.

131

LL(k)-таблицы

Пусть мы имеем левосторонний вывод в

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

wA

wx.

 

*

 

*

 

lm

 

lm

Как было сказано в

начале этого пара-

графа, именно таблица TA, L, где L FIRSTkG ( ), сообщает, что следующую за wA сентенциальную форму следует получать при по-

мощи правила A , если для

 

G

(x)

k

 

u FIRST

 

окажется, что

TA, L(u) = (A , Y1,Y2,…, Ym ).

132

LL(k)-таблицы

Если = x0 B1x1B2Bm xm, то следующая за wA сентенциальная форма будет

w = wx0 B1x1B2 Bm xm ,

и в свое время раскрытием B1 будет руководить LL(k)-таблица TB1,Y1, раскрытием B2 будет руководить LL(k)-таблица TB2,Y2, …, а раскрытием Bm LL(k)-таблица TBm,Ym.

*)

S wA

 

w wx,

 

 

 

 

 

 

 

 

 

 

*

 

 

 

*

 

 

 

 

 

 

 

 

 

 

 

 

lm

 

lm

lm

 

 

 

 

 

 

 

 

 

 

 

 

u FIRST

G

(x) FIRST

G

(αγ) FIRST

G

(α)

 

FIRST

G

(γ) FIRST

G

(α)

 

L,

 

 

 

 

k

 

 

k

k

 

 

k

k

 

k

k

 

 

 

 

G

(γ);

TA, L(u) =

 

k

 

L FIRST

 

 

 

 

 

Y =FIRSTG

(x B x

B

...

i

k

 

 

i i 1 i 1

i 2

 

(A , Y1,Y2,…, Ym ), = x0 B1x1B2Bm xm,

Bm xm ) k L,

133

LL(k)-таблицы

Пример 2.8. Рассмотрим уже не раз обсуждавшуюся несильную LL(2)-грамматику с правилами

S aAaa bAba; A b

и построим все LL(2)-таблицы, необходимые для анализа в этой грамматике.

Начнем с таблицы TS,{ }. Именно она диктует выбор первого правила для раскрытия нетерминала S.

134

Пример 2.8

Используя правило S aAaa, вычисляем

FIRST

G

(aAaa)

 

 

2

2

 

Используя правило S

{ } {ab, aa}.

bAba,

вычисляем

FIRST

G

(bAba)

 

{ } {bb}.

 

2

2

 

 

Соответственно определяем LL(2)-таблицу:

T0 = TS,{ } (табл. 2.3).

135

Пример 2.8

 

 

 

 

 

 

 

Таблица 2.3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LL(2)-табл.

 

u

Элементы LL(2)-таблиц

 

 

 

 

 

 

 

 

Правило

Мн-во лок. контекстов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

aa

S aAaa

 

{aa}

 

T0 = TS,{ }

 

ab

S aAaa

 

{aa}

 

 

 

 

bb

S bAba

 

{ba}

 

 

 

 

 

 

 

 

 

 

T1 = TA,{aa}

 

ba

A b

 

 

 

 

aa

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T2 = TA,{ba}

 

bb

A b

 

 

 

 

ba

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ret 146 FIRST2G (aAaa) k {ε} {aa, ab}

FIRST2G (aa) k {ε} {aa}

 

 

G

(bAba) k {ε} {bb}

G

(ba) k {ε} {ba}

136

 

FIRST2

FIRST2

 

Пример 2.8

Глядя на T0, легко определить, что потребуются ещё таблицы

T1 = TA,{aa} и T2 = TA,{ba}.

Таблица T1

получается с учётом того,

что для правила A b получаем

FIRST

G

(b)

 

{aa} {ba},

 

2

2

 

 

 

а для правила A

FIRSTG

( )

2

{aa} {aa}.

2

 

 

137

Пример 2.8

Таблица T2 получается с учетом того, что для правила A b имеем

FIRST

G

(b)

 

{ba} {bb},

 

2

2

 

 

 

а для правила A

FIRST

G

( )

 

 

{ba} {ba}.

 

2

2

 

 

В правых частях правил для нетерминала A нет ни одного нетерминала. Поэтому в двух последних таблицах множества локальных правых контекстов пусты.

138

Пример 2.8

При построении этих LL(2)-таблиц мы придерживались простой дисциплины: начинали с построения начальной таблицы TS,{ }, а затем в каждой из уже построенных LL(2)-таблиц использовали значения элементов, чтобы определить пары индексов других необходимых таблиц — каждое вхождение нетерминала в правую часть правила сочеталось с соответствующим локальным множеством.

139

LL(k)-таблицы

Этот порядок построения LL(k)-таблиц фиксируется в следующем описании алгоритма.

Алгоритм 2.2: построение множества LL(k)- таблиц, необходимых и достаточных для анализа цепочек в данной LL(k)-грамматике.

Вход: G = (VN, VT, P, S) — LL(k)-грамматика.

Выход: — множество LL(k)-таблиц, необходимых и достаточных для анализа цепочек в грамматике G.

140

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