ВУЗ:
Составители:
22
Пример 4.4. Дана грамматика ),},,,{},1,0({
S
P
B
A
S
G
=
с правилами :
P
ε
ε
|1)3;|0)2;)1
B
B
A
A
A
B
S
→→→ . Преобразуем ее в эквивалентную
грамматику по алгоритму 4.4.
Шаг 1. N
0
= {A, B};
N
1
= {S, A, B};
N
2
= {S, A, B}.
Т.к. N
1
= N
2
, то искомое множество построено и N = {S, A, B}.
Шаг 2, 3. Множество :
P
′
1)
B
A
A
B
S
||→ ; 2) 0|0
A
A
→ ; 3) .1|1
B
B
→
Шаг 4. Т.к.
N
S
∈
, то введем новый нетерминал С и пополним множество
P
′
правилом вида
ε
|
S
C
→ . Результирующая грамматика будет иметь вид:
),},,,,{},1,0({ CPCBASG =
′
с правилами :
P
′
;||)2;|)1
B
A
A
B
S
S
C
→→
ε
1|1)4;0|0)3
B
B
A
A
→→ .
Алгоритм 4.5. Устранение цепных правил
Вход: КС-грамматика ),,,( SPVVG
N
T
= .
Выход: Эквивалентная КС-грамматика
),,,( SPVVG
N
T
′′
′
=
′
без цепных
правил, т.е. правил вида
B
A
→ , где
N
VBA
∈
,.
Шаг 1. Для каждого нетерминала
A
вычислить множество выводимых из
него нетерминалов, т.е. множество ,*|{ BABN
A
⇒= где }.
N
VB
∈
1.1
Положить }.{
0
AN
A
=
1.2
Вычислить }.,,)(|{
11
N
A
i
A
i
A
i
VCNBPCBCNN ∈∈∈→∪=
−
−
1.3
Если
A
i
A
i
NN
1−
≠ , то положить i:=i+1 и перейти к пункту 1.2, иначе
считать .
A
i
A
NN =
Шаг 2. Построить множество
P
′
так: если
P
B
∈
→ )(
α
не является цеп-
ным правилом )(
N
V∉
α
, то включить в
P
′
правило
α
→
A
для каждого
A
, та-
кого, что
A
N
B
∈ .
Пример 4.5. Грамматика ),},,,{},,({
L
P
N
M
L
n
G
+
=
с правилами :
P
n
N
N
N
M
M
L
|)3;)2;)1
+
→→→ . Преобразуем ее в эквивалентную
грамматику G
′
по алгоритму 4.5.
Шаг 1. };{
0
LN
L
=
};,{
1
MLN
L
=
};,,{
2
NMLN
L
=
}.,,{
3
NMLN
L
=
Т.к.
LL
NN
32
= , то }.,,{ NMLN
L
=
};{
0
MN
M
=
Пример 4.4. Дана грамматика G = ({0, 1}, {S , A, B}, P, S ) с правилами P : 1) S → AB; 2) A → 0 A | ε ; 3) B → 1B | ε . Преобразуем ее в эквивалентную грамматику по алгоритму 4.4. Шаг 1. N0 = {A, B}; N1 = {S, A, B}; N2 = {S, A, B}. Т.к. N1 = N2, то искомое множество построено и N = {S, A, B}. Шаг 2, 3. Множество P′ : 1) S → AB | A | B ; 2) A → 0A | 0 ; 3) B → 1B | 1. Шаг 4. Т.к. S ∈ N , то введем новый нетерминал С и пополним множество P′ правилом вида C → S | ε . Результирующая грамматика будет иметь вид: G ′ = ({0, 1}, {S , A, B, C}, P, C ) с правилами P′ : 1) C → S | ε ; 2) S → AB | A | B; 3) A → 0 A | 0; 4) B → 1B | 1. Алгоритм 4.5. Устранение цепных правил Вход: КС-грамматика G = (VT , V N , P, S ) . Выход: Эквивалентная КС-грамматика G ′ = (VT , VN′ , P′, S ′) без цепных правил, т.е. правил вида A → B , где A, B ∈V N . Шаг 1. Для каждого нетерминала A вычислить множество выводимых из него нетерминалов, т.е. множество N A = {B | A ⇒ *B, где B ∈ VN }. 1.1 Положить N 0A = { A}. 1.2 Вычислить N iA = N iA−1 ∪ {C | ( B → C ) ∈ P, B ∈ N iA−1, C ∈ VN }. 1.3 Если N iA ≠ N iA−1 , то положить i:=i+1 и перейти к пункту 1.2, иначе считать N A = N iA . Шаг 2. Построить множество P ′ так: если ( B → α ) ∈ P не является цеп- ным правилом (α ∉V N ) , то включить в P ′ правило A → α для каждого A , та- кого, что B ∈ N A . Пример 4.5. Грамматика G = ({+, n}, {L, M , N }, P, L) с правилами P : 1) L → M ; 2) M → N ; 3) N → N + | n . Преобразуем ее в эквивалентную грамматику G′ по алгоритму 4.5. Шаг 1. N 0L = {L}; N1L = {L, M }; N 2L = {L, M , N }; N 3L = {L, M , N }. Т.к. N 2L = N 3L , то N L = {L, M , N }. N 0M = {M }; 22
Страницы
- « первая
- ‹ предыдущая
- …
- 20
- 21
- 22
- 23
- 24
- …
- следующая ›
- последняя »