Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет9_16.docx
Скачиваний:
5
Добавлен:
16.09.2019
Размер:
77.23 Кб
Скачать

11. Реализовать управляющую таблицу m для lr(k) анализатора.

Дана грамматика G(V, T, P, S):

V = {S, F, L},

T={i, * , :,(,)},

P = {S→(F: L), F→ L*, F→ i, L→F}

LR(k) – анализатор.

Таблица кодирования магазинных символов.

Символ грамматики

Магазинный символ

Кодируемая цепочка

S

S1

S

F

F1

(F

F3

F

L

L1

(F:L

L2

L

i

i3

i

:

:1

(F:

*

*2

L*

(

(1

(

)

)1

(F:L)

12. Построить множество lr(0)-таблиц не содержащих ε-правила.

Построим управляющую таблицу LR(0) – анализатора для грамматики, имеющей следующие правила:

  1. S→(F:L)

  2. F→ L*

  3. F→ i

  4. L→F

Расширенная грамматика: если G – грамматика со стартовым символом S, то расширенная грамматика G’ имеет стартовый символ S’ и продукцию S’→S.

CLOSURE(I) – замыкание множества пунктов I. Если в I входит пункт A→α, то в замыкании надо взять все пункты вида B→γ. (Всё, что может быть достигнуто левыми порождениями).

GOTO(I,X) – замыкание множества продукций I вида A→α Xβ, где A→αX β входит в I.

Определим множества А0 =CLOSURE({S’→•S}) ={S’→•S, S→•(F:L)}. Включим его в систему в качестве «неотмеченного» множества. Затем должны отметить множество А0 и определить множества GOTO(A0, X).

A1=GOTO(A0, S)=GOTO({S’→•S }, S) = {S’→S• }

A2= GOTO(A0, ( )=GOTO({S→•(F:L)}, ( ) = {S→(•F:L), F→•L*, F→•i, L→•F }

A3=GOTO(A2, F)=GOTO( {S→(•F:L), L→•F}, F)= {S→(F•:L), L→F• }

A4= GOTO(A2, L)=GOTO({F→•L*}, L) = {F→L•*}

A5= GOTO(A2, i)=GOTO({F→•i}, i ) = {F→i•}

A6=GOTO(A3,:)=GOTO( {S→(F•:L)}, :)= {S→(F: •L), L→•F}

A7=GOTO(A4,*)=GOTO( { F→L•*}, *)= {F→L*•}

A8=GOTO(A6, L)=GOTO( {S→(F: •L)}, L)= {S→(F:L•)}

A9=GOTO(A6, F)=GOTO( { L→•F}, F)= {L→F•}

A10=GOTO(A8, ) )=GOTO( {S→(F: L•)}, ) )= {S→(F:L) •}

A0

S’→•S S→•(F:L)

A1

S’→•S

A2

S→(•F:L) F→•L* F→•i L→•F

A3

S→(F•:L) L→F•

A4

F→L•*

A5

F→i•

A6

S→(F: •L) L→•F

A7

F→L*•

A8

S→(F:L•)

A9

L→F•

A10

S→(F:L) •

13. Для LR(k) -грамматики cпроектировать матрицу oblow Вычисление отношения OBLOW для грамматических вхождений грамматики G’ . Матрица отношения OBLOW имеет вид:

Пусть Xi и Zi - грамматические вхождения символов X и Z в правую часть i-ого правила, а Yj – грамматическое вхождение символа Y в правую часть j – ого правила. Определим множество OFIRST(Yi) (входит первым) , в которое включим Yj и все грамматические вхождения, с которых могут начаться цепочки, выводимые из Y:

OFIRST(Yj)=( Yj)

Используя множества OFIRST, определим отношение OBLOW (входит под) следующим образом:

Xi OBLOW Yj – это множество и Yj OFIRST(Zi)}

OBLOW Yj - это множество {(, Yj | Yj OFIRST(S0), где S0 – начальное вхождение.

Отношение OBLOW будем задавать с помощью матрицы, содержащей n столбцов и (n+1) строк.

(0) S’→S0

  1. S→(1 F1 :1 L1 )1

  2. F→ L2 *2

  3. F→ i3

  4. L→F4

S’

S0

(1

F1

:1

L1

)1

L2

*2

i3

F4

S’

S0

(1

1

1

1

1

F1

1

:1

1

1

1

1

L1

1

)1

L2

1

*2

i3

F4

1

1

1