Курсовая работа5 / Раздел 6
.docКурсовая работа. Раздел 6
Вариант 19
6.1. Построить LR(0) – распознаватель грамматики G = (T,N,S,R).
T = {a, b, c}
N = {S, A, B}
R = {S a S b (1),
S aSc (2),
S a b (3)}
Добавим правило:
S0 S
Множество магазинных символов:
VP={S0, a11, S12, b13, a21, S22, c23, a31, b32, }
Построим управляющую таблицу
Функция действий f
|
a |
b |
c |
|
S0 |
|
|
|
ДОП |
a11 |
П |
П |
П |
|
S12 |
П |
П |
П |
|
b13 |
C,1 |
C,1 |
C,1 |
C,1 |
a21 |
П |
П |
П |
|
S22 |
П |
П |
П |
|
c23 |
C,2 |
C,2 |
C,2 |
C,2 |
a31 |
П |
П |
П |
|
b32 |
C,3 |
C,3 |
C,3 |
C,3 |
|
П |
П |
П |
|
Матрица отношений OBLOW
|
S0 |
a11 |
S12 |
b13 |
a21 |
S22 |
c23 |
a31 |
b32 |
S0 |
|
|
|
|
|
|
|
|
|
a11 |
|
1 |
1 |
|
1 |
|
|
1 |
|
S12 |
|
|
|
1 |
|
|
|
|
|
b13 |
|
|
|
|
|
|
|
|
|
a21 |
|
1 |
|
|
1 |
1 |
|
1 |
|
S22 |
|
|
|
|
|
|
1 |
|
|
c23 |
|
|
|
|
|
|
|
|
|
a31 |
|
|
|
|
|
|
|
|
1 |
b32 |
|
|
|
|
|
|
|
|
|
|
1 |
1 |
|
|
1 |
|
|
1 |
|
Функция переходов g
|
a |
b |
c |
S |
S0 |
|
|
|
|
a11 |
a11, a21, a31 |
|
|
S12 |
S12 |
|
b13 |
|
|
b13 |
|
|
|
|
a21 |
a11, a21, a31 |
|
|
S22 |
S22 |
|
|
c23 |
|
c23 |
|
|
|
|
a31 |
|
b32 |
|
|
b32 |
|
|
|
|
|
a11, a21, a31 |
|
|
S0 |
Преобразуем в детерминированный автомат
{a11, a21, a31} - ax
{S12, S22} - Sx
Запишем окончательный вариант управляющей таблицы
|
a |
b |
c |
|
a |
b |
c |
S |
S0 |
|
|
|
ДОП |
|
|
|
|
ax |
П |
П |
П |
|
ax |
b32 |
|
Sx |
Sx |
П |
П |
П |
|
|
b13 |
c23 |
|
b13 |
C,1 |
C,1 |
C,1 |
C,1 |
|
|
|
|
c23 |
C,2 |
C,2 |
C,2 |
C,2 |
|
|
|
|
b32 |
C,3 |
C,3 |
C,3 |
C,3 |
|
|
|
|
|
П |
П |
П |
|
ax |
|
|
S0 |
Примеры работы анализатора:
1) S a S c a a b c
(2) (3)
(, aabc, ) ˫ (ax, abc, ) ˫(axax, bc, ) ˫(axaxb32, c, ) ˫ (axSx, c, 3) ˫(axSxc23, , 3) ˫(S0, , 32) ˫(, , 32)
2) S a S b a a S c b a a a b c b
(1) (2) (3)
(, aaabcb, ) ˫ (ax, aabcb, ) ˫(axax, abcb, ) ˫(axaxax, bcb, ) ˫ (axaxaxb32, cb, ) ˫(axaxSx, cb, 3) ˫(axaxSxc23, b, 3) ˫(axSx, b, 32) ˫(axSxb13, , 32) ˫(S0, , 321) ˫(, , 321)
3) проверим цепочку abbc
(, abbc, ) ˫ (ax, bbc, ) ˫(axb32, bc, ) ˫ (Sx, bc, 3) ˫(Sxb13, c, 3) ˫ОШИБКА!