ВУЗ:
Составители:
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
, имеющие одинаковые
префиксы
*
V
∈
α
, в виде одного правила с альтернативами:
.,,,;|||
*
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
Страницы
- « первая
- ‹ предыдущая
- …
- 21
- 22
- 23
- 24
- 25
- …
- следующая ›
- последняя »