Теория формальных языков, грамматик и автоматов. Ишакова Е.Н. - 23 стр.

UptoLike

Составители: 

23
};,{
1
NMN
M
=
}.,{
2
NMN
M
=
Т.к.
MM
NN
21
= , то }.,{ NMN
M
=
};{
0
NN
N
=
}.{
1
NN
N
=
Т.к.
NN
NN
01
= , то }.{NN
N
=
Шаг 2. Преобразовав правила вывода грамматики, получим грамматику
),},,,{},,({ LPNMLnG
+=
с правилами :P
;|)2;|)1 n
N
M
n
N
L
+
+ n
N
N
|)3
+
.
Алгоритм 4.6. Устранение левой факторизации правил
Вход: КС-грамматика
),,,( SPVVG
N
T
=
.
Выход: Эквивалентная КС-грамматика ),,,( SPVVG
N
T
=
без одинако-
вых префиксов в правых частях правил, определяющих нетерминалы.
Шаг 1. Записать все правила для нетерминала
X
, имеющие одинаковые
префиксы
*
α
, в виде одного правила с альтернативами:
.,,,;|||
*
2121
VX
nn
βββαβαβαβ
KK
Шаг 2. Вынести за скобки влево префикс
α
в каждой строке-
альтернативе: ).|||(
21 n
X
β
β
β
α
K
Шаг 3. Обозначить новым нетерминалом
Y
выражение, оставшееся в
скобках:
.|||,
21 n
YYX
β
β
β
α
K
Шаг 4. Пополнить множество нетерминалов новым нетерминалом
Y
и
заменить правила, подвергшиеся факторизации, новыми правилами для X и
Y
.
Шаг 5. Повторить шаги 1-4 для всех нетерминалов грамматики, для кото-
рых это возможно и необходимо.
Пример 4.6. Дана грамматика ),},{},,,,({
S
P
S
nm
l
k
G
=
с правилами :
P
n
S
kSm
S
kS
l
S
)3;)2;)1. Преобразуем ее в эквивалентную грамма-
тику G
по алгоритму 4.6:
Шаг 1.
nkSmkS
l
S
|| .
Шаг 2. nm
l
k
S
S
|)|( .
Шаг 3,4. Пополнив множество нетерминалов новым нетерминалом С и
заменив правила, подвергшиеся факторизации, получим грамматику
),},,{},,,,({ SPCSnmlkG
=
с правилами :P
;)3;)2;)1
l
C
n
S
kS
C
S
.)4 m
C
               N1M = {M , N };
               N 2M = {M , N }.
      Т.к. N1M = N 2M , то N M = {M , N }.

               N 0N = {N };
               N1N = {N }.
      Т.к. N1N = N 0N , то N N = {N }.
      Шаг 2. Преобразовав правила вывода грамматики, получим грамматику
G′ = ({+, n}, {L, M , N }, P′, L) с правилами P′ :
                   1) L → N + | n; 2) M → N + | n; 3) N → N + | n .

            Алгоритм 4.6. Устранение левой факторизации правил
     Вход: КС-грамматика G = (VT , VN , P, S ) .
     Выход: Эквивалентная КС-грамматика G ′ = (VT , V N′ , P′, S ′) без одинако-
вых префиксов в правых частях правил, определяющих нетерминалы.
      Шаг 1. Записать все правила для нетерминала X , имеющие одинаковые
префиксы      α ∈V * , в виде одного                  правила     с    альтернативами:
X → αβ1 | αβ 2 | K | αβ n ; β1, β 2 ,K , β n ∈ V *.
      Шаг 2. Вынести за скобки влево префикс α в каждой строке-
альтернативе: X → α ( β1 | β 2 | K | β n ).
      Шаг 3. Обозначить новым нетерминалом Y выражение, оставшееся в
скобках: X → αY , Y → β1 | β 2 | K | β n .
      Шаг 4. Пополнить множество нетерминалов новым нетерминалом Y и
заменить правила, подвергшиеся факторизации, новыми правилами для X и Y .
      Шаг 5. Повторить шаги 1-4 для всех нетерминалов грамматики, для кото-
рых это возможно и необходимо.
       Пример 4.6. Дана грамматика G = ({k , l , m, n}, {S }, P, S ) с правилами P :
1) S → kSl; 2) S → kSm; 3) S → n . Преобразуем ее в эквивалентную грамма-
тику G′ по алгоритму 4.6:
       Шаг 1. S → kSl | kSm | n .
       Шаг 2. S → kS (l | m) | n .
       Шаг 3,4. Пополнив множество нетерминалов новым нетерминалом С и
заменив правила, подвергшиеся факторизации, получим грамматику
G ′ = ({k , l , m, n}, {S , C}, P′, S ) с правилами P′ : 1) S → kSC ; 2) S → n; 3) C → l ;
4) C → m.



                                                                                       23