Скачиваний:
48
Добавлен:
01.05.2014
Размер:
263.68 Кб
Скачать

4.2.4.Алгоритм построения управляющей таблицы для slr(1)-грамматики без -правил

Усовершенствуем алгоритм построения управляющей таблицы, рассмотренный в 4.2.3, так, чтобы получить анализатор для некоторого класса грамматик, не принадлежащих классу LR(0). Этот класс грамматик является подклассом LR(1)-грамматик и получил название SLR(1)-грамматик без -правил. Буква S в названии грамматики является сокращением англий­ского слова Simple (простой).

Рассмотрим следующий пример.

Пример 4.4.

Построить управляющую таблицу LR(0)-анализатора для грамматики G0, правила вывода которой приведены на рис. 4.14.

Матрица отношения ВПОД, определенная на множестве грамма­тических вхождений пополненной грамматики

G0= < T, N { S }, S, R { S E } >,

п

  1. E E + T

  2. E T

  3. T TP

  4. T P

  1. P (E)

  2. P i

Рис. 4.14

риведена на рис.4.15, а на рис. 4.16 и 4.17 изображены таб­лицы переходов недетерминированного и эквивалентного ему де­терминированного конечного автомата. После определения мага­зинного алфавита в соответствии с рис. 4.18 получим таблицу функций переходов g(X), изображенную на рис. 4.19.

Выполняя шаг 4 алгоритма, обнаруживаем, что Goне принад­лежит классуLR(0)-грамматик, так как множества грамматичес­ких вхождений, соответствующие магазинным символамТx иTy, содержат самые правые вхождения символаТи не являются од­ноэлементными.

E0

E1

+1

T1

T2

T3

3

P3

P4

(5

E5

)5

i6

E0

E1

1

+1

1

1

1

1

1

T1

T2

T3

1

3

1

1

1

P3

P4

(5

E5

1

1

1

1

1

1

1

)5

1

i6

1

1

1

1

1

1

1

Рис. 4.15

Покажем, как сделав некоторый дополнительный анализ, можно определить функции действия f(a) для данной грамматики. Анализ выполняется для каждого элемента отроки таблицы от­дельно и использует текущий входной символ (k=1).

+

(

)

i

E

T

P

(5

i6

E0, E1

T2, T3

P4

E0

E1

+1

+1

(5

i6

T1, T3

P4

T1

T2

T3

3

3

(5

i6

P3

P3

P4

(5

(5

i6

E1, E5

T2, T3

P4

E5

)5

)5

i6

Рис.4.16

+

(

)

i

E

T

P

{ }

{ (5 }

{ i6 }

{ E0, E1}

{ T2, T3 }

{ P4 }

{ (5 }

{ (5 }

{ i6 }

{ E1, E5 }

{ T2, T3 }

{ P4 }

{ i6 }

{ E0, E1 }

{ +1 }

{ T2, T3 }

{ *3 }

{ P4 }

{ E1, E5 }

{ +1 }

{ )5 }

{ +1 }

{ (5 }

{ i6 }

{ T1, T3 }

{ P4 }

{ 3}

{ (5 }

{ i6 }

{ P3 }

{ )5 }

{ T1, T3 }

{ 3}

{ P3 }

Рис. 4.17

Рассмотрим, например, элемент управляющей таблицы для ма­газинного символа Тx, которому соответствует множество грам­матических вхождений { Т2, Т3 }. Наличие в Тx самого правого вхождения Т2 в правило вывода (2) говорит о том, что необхо­димо выполнить операцию (СВЕРТКА, 2), а тот факт, что в Тx содержится T3, свидетельствует в пользу операции ПЕРЕНОС.

{Eo,E1}

{E1,E5}

{T2,T3}

{T1,T3}

{P3}

{P4}

{+1}

{3}

{(5}

{)5}

{i6}

{}

Vp

Ex

Ey

Tx

Ty

P3

P4

+1

3

(5

)5

i6

Рис. 4.18

g(X)

+

(

)

i

E

T

P

(5

i6

Ex

Tx

P4

(5

(5

i6

Ey

Tx

P4

i6

Ex

+1

Tx

3

P4

Ey

+1

)5

+1

(5

i6

Ty

P4

3

(5

i6

P3

)5

Ty

3

P3

Рис. 4.19

Допустим, что входным символом является +. Для магазинно­го символа Тx

ОШИБКА, и следовательно, для допусти­мых входных цепочек в строке Тx f(+) = (СВЕРТКА, 2).

Для входного символа g()=3, значит, при анализе допустимых входных цепочек перенос в магазин символа будет правильным действием. Выполнение операции (СВЕРТКА, 2) в этом случае привело бы к тому, что в магазин был бы помещен мага­зинный символ, представляющий нетерминал Е. Так как входным символом при этом остается , то на следующем шаге был бы вы­работан сигнал об ошибке, поскольку символ не может непо­средственно следовать за Е ( не принадлежит множеству СЛЕД(Е)). Таким образом, операция (СВЕРТКА, 2) исключается, и в строке управляющей таблицы, помеченной Тx , f() = ПЕРЕНОС.

Принципы, продемонстрированные при выполнении данного при­мера, позволяют сформулировать шаг 4 алгоритма построения управляющей таблицы для SLR(1)-грамматик.

4) Для магазинного символа Т, представляющего множество грамматических вхождений Q, и входного символа a значение f(a) определяется следующим образом.

а) Если начальное вхождение S0 Q и a = , то f() = ДОПУСК.

б) Если a и g(a) ошибка, то f(a) = перенос.

в) Если Xj Q – самое правое грамматическое вхождение i-го правила AXj и a СЛЕД(А), то f(a) = (СВЕРТКА, i). Значение остальных эле­ментов таблицы для f(a) – ОШИБКА.

Если имеется множество грам­матических вхождений, не удов­летворяющих условиям а, б и в, то грамматика не принадле­жит классу SLR(1).

Продолжение примера 4.4

Функции действия f(a) для рассматриваемого примера изображены на рис. 4.20.

f(a)

+

(

)

i

П

П

(5

П

П

i6

С, 6

С, 6

С, 6

С, 6

Ex

П

Д

Tx

С, 2

П

С, 2

С, 2

P4

С, 4

С, 4

С, 4

С, 4

Ey

П

П

+1

П

П

3

П

П

)5

С, 5

С, 5

С, 5

С, 5

Ty

С, 1

П

С, 1

С, 1

P3

С, 3

С, 3

С, 3

С, 3

Рис. 4.20

Соседние файлы в папке ВОСХОДЯЩИЕ МЕТОДЫ ОБРАБОТКИ ЯЗЫКОВ
  • #
    01.05.2014263.68 Кб48LR_K_GR.DOC
  • #
    01.05.2014222 б8Методы _восходящие методы обработки языков_ .log