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

3.12.2. Пример построения lr(0)-распознавателя

В качестве иллюстрации применения описанной процедуры рассмотрим построение распознавателя для следующей грамматики:

Г 3. 14 :1. <E>  <E1> + <T1>2. <E>  <T2>3. <T>  (<E3>)4. <T>  i

Функции ВПЕРВиВПОСЛЕдля этой грамматики имеют вид:

ВПЕРВ(<E1>)={<E1>,<T2>,(,i},

ВПОСЛЕ(<E1>) = {+},

ВПЕРВ(<T1>)={<T1>,(,i},

ВПОСЛЕ(<T1>) = ,

ВПЕРВ(<T2>)={<T2>,(,i},

ВПОСЛЕ(<T2>) = ,

ВПЕРВ(+) = {+},

ВПОСЛЕ(+) = {<T1>,(,i},

ВПЕРВ(i) = {i},

ВПОСЛЕ(i) = ,

ВПЕРВ(() = {(},

ВПОСЛЕ(()={<E1>,<E3>,<T2>,(,i},

ВПЕРВ()) = {)},

ВПОСЛЕ()) = ,

ВПЕРВ(<E3>)={<E3>,<E1>,<T2>,(,i},

ВПОСЛЕ(<E0>) = ,

 

ВПОСЛЕ(h0)={<E0>,<E1>,<T2>,(,i},

 

ВПОСЛЕ(<E3>) = {)}.

Таблица переходов, построенная по функциям ВПОСЛЕ, изображается так:

Таблица 3.3

<E> 

<T> 

<E0>

 

 

 

 

 

 

<E1>

 

 

+

 

 

 

<T1>

 

 

 

 

 

 

<T2>

 

 

 

 

 

 

+

 

<T1>

 

(

 

i

i

 

 

 

 

 

 

(

<E1><E3>

<T2>

 

(

 

i

)

 

 

 

 

 

 

h0

<E1><E0>

<T2>

 

(

 

i

<E3>

 

 

 

 

)

 

Полученная таблица переходов является недетерминированной. После преобразования таблицы, обозначая множество состояний (<E0>, <E1>) = <Ex>и (<E1>, <E3>) = <Ey>и полагая, что начальным состоянием являетсяh0, получаем:

Таблица 3.4

<E> 

<T> 

<Ex>

 

 

+

 

 

 

<Ey>

 

 

+

 

)

 

<T1>

 

 

 

 

 

 

<T2>

 

 

 

 

 

 

+

 

<T1>

 

(

 

i

(

<Ey>

<T2>

 

(

 

i

)

 

 

 

 

 

 

h0

<Ex>

<T2>

 

(

 

i

i

 

 

 

 

 

 

Учитывая состав множеств, обозначенных <Ex>и<Ey>, построим таблицу действий искомого распознавателя.

Таблица 3.5

 

+

Ex

 D

П 

П 

П 

П 

Ey

 О

П

П 

П 

П 

T1

С (1) 

 С (1)

С (1) 

С (1)

С (1) 

T2

 С (2)

 С (2)

С (2) 

С (2)

С (2) 

+

О

П 

П

П 

П

i

 С (4)

 С (4)

С (4) 

С (4) 

С (4) 

(

О

П 

П

П 

П

)

С (3) 

 С (3)

С (3) 

С (3) 

С (3) 

h0

О

П 

П

П 

П

Построенный распознаватель является эквивалентным недетерминированному распознавателю, но эти распознаватели имеют разные состояния. Следовательно, им должны соответствовать эквивалентные, но не одинаковые грамматики. Такое различие должно отразиться в операциях сворачивания. В рассматриваемом случае операция Свертка(1) должна учитывать, что недетерминированному распознавателю соответствует грамматика с правилами   <E><Ex> + <T> и <E><Ey> + <T>.

Соседние файлы в предмете Теория языков программирования