Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы построения анализаторов из учебника.doc
Скачиваний:
49
Добавлен:
01.05.2014
Размер:
441.34 Кб
Скачать

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

ВПЕРВ(Yj) = { Yj }  { Xi  Y   A  X и

Xi - самое левое грамматическое вхождение в правую часть правила A  X} .

Заметим, что если в грамматике есть правила с пустой пра­вой частью, то на последнем шаге вывода они не применяются.

Используя множества ВПЕРВ, определим отношение ВПОД (ВХОДИТ_ПОД) следующим образом:

Xi ВПОД Yj – это множество {( Xi,Yj )  A XiZi  R и Yj BПЕРВ(Zi) } ;

 ВПОД Yj – это множество { ( ,Yj )  Yj BПЕРВ(S0) } .

Вход

КС-грамматика G = < T, N, S, R > без -правил.

Выход

Множество LR(0)-таблиц для грамматики G или со­общение о том, что грамматика G не является LR(0)-граммати­кой.

Описание алгоритма

1.Построить пополненную грамматику G’ для исходной грам­матики G.

2.Вычислить отношения ВПОД для грамматических вхождений грамматики G’.

3.Определить функции переходов g(Х) следующим образом:

а) Построить таблицу, содержащую по одному столбцу для каждого символа из V  {} и одной отроке для каждого грам­матического вхождения грамматики G’и маркера дна. Элемент в строке, помеченной грамматическим вхождением Хi или маркером дна , и столбце, отмеченном символом грамматики Y, должен содержать все грамматические вхождения, для которых справед­ливо отношение Хi ВПОД Yj. Заметам, что некоторые элементы построенной таким образом таблицы могут содержать более одно­го грамматического вхождения, т.е. таблица может быть неде­терминированной.

б) Интерпретируя построенную таблицу как таблицу конеч­ного автомата (состояния - грамматические вхождения и маркер дна (начальное состояние), а входные символы - символы из V  {}), определить тип автомата: детерминированный или недетерминированный. Недетерминированный автомат преобразо­вать в эквивалентный ему детерминированный автомат.

в) Определить магазинный алфавит Vp так, чтобы каждому состоянию детерминированного конечного автомата соответство­вал ровно один магазинный символ.

г) Заменить совокупности грамматических вхождений, отме­чающих состояния автомата, соответствующими символами из Vp.

Полученная таблица представляет собой таблицу функций пе­реходов g(X) LR(0)-анализатора, причем элементы таблицы, соответствующие переходу в пустое множество состояний, имеют значение ОШИБКА.

4.Определить функции действия f(a) для всех магазинных символов, каждому из которых соответствует одна строка табли­цы. Количество столбцов таблицы f(a) определяется количест­вом символов в T  {}. Элементы таблицы f(a) определяются следую щим образом.

E

T

(

)

i

+

{}

{E0,E1}

{T2}

{(3}

{i4}

{E0,E1}

{+1}

{T2}

{(3}

{E1,E3}

{T2}

{(3}

{i4}

{i4}

{+1}

{T1}

{(3}

{i4}

{E1,E3}

{)3}

{+1}

{T1}

{)3}

а) Если магазинному символу Т соответствует единственное вхождение S0, то в строке, отмеченной символом Т, f() = ДО­ПУСК, а все остальные элементы – ОШИБКА.

б) Если магазинному символу Т соответствует только одно грамматическое вхождение Xi, являющееся самым правым вхожде­нием в i-е правило вывода грамматики G, то все элемента строки, помеченной Т, имеют значение (СВЕРТКА, i).

в) Если магазинному символу Т соответствует маркер дна магазина  или все грамматические вхождения, представляемые символом Т, не являются самыми правыми в своих правилах, то в строке, отмеченной Т, f() = ошибка, а значения остальных элементов – ПЕРЕНОС.

г) Если множество вхождений, соответствующее магазинно­му символу Т, содержит начальное вхождение S0 и хотя бы еще одно вхождение, отличное от которое не является самым правым в своем правиле, то в строке, отмеченной Т, f() = ДОПУСК, а значение всех остальных элементов - ПЕРЕНОС.

Если имеется множество грамматических вхождений, не удов­летворяющих перечисленным выше условиям, то G не является LR(0)-грамматикой.

Пример

Построим управляющую таблицу LR(0)-ана­лизатора для грамматики G3

E  E + T

E  T

T  (E)

T  i

Определим пополненную грамматику

G3’= < T, N  {S}, S, R  { S  E }>.

E0

E1

+1

T1

T2

(3

E3

)3

i4

E0

E1

1

+1

1

1

1

T1

T2

(3

1

1

1

1

1

E3

1

)3

i4

1

1

1

1

1

Функции переходов g(Х) LR(0)-анализатора для грам­матики G3 приведены на рис. 4.12.

а)

E

T

(

)

i

+

E0

E1

+1

+1

T1

(3

i4

T1

T2

(3

E1, E3

T2

(3

i4

E3

)3

)3

i4

E0, E1

T2

(3

i4

б)

Рис. 4.10

{E0,E1}

{E1,E3}

{}

{T2}

{(3}

{i4}

{+1}

{T1}

{)3}

Ex

Ey

T2

(3

i4

+1

T1

)3


Рис. 4.11

g(X)

E

T

(

)

i

+

Ex

T2

(3

i4

Ex

+1

T2

(3

Ey

T2

(3

i4

i4

+1

T1

(3

i4

Ey

)3

+1

T1

)3

Рис. 4.12

Определим функции дей­ствия f(a).

f(a)

(

)

i

+

П

П

П

П

Ex

П

П

П

П

Д

T2

С,2

С,2

С,2

С,2

С,2

(3

П

П

П

П

i4

С,4

С,4

С,4

С,4

С,4

+1

П

П

П

П

Ey

П

П

П

П

T1

С,1

С,1

С,1

С,1

С,1

)3

С,3

С,3

С,3

С,3

С,3

Рис. 4.13