ЛР4 ( ИШАКОВА)
.pdfW =W |
{X | X V , (A →αXβ) P, A W |
;α, β V *}. |
||
i |
i−1 |
|
i−1 |
|
Шаг 3. Если Wi ≠Wi−1, то положить i:=i+1 и перейти к шагу 2, иначе счи- |
||||
тать W =Wi . |
|
|
=VN ∩W ,VT′ =VT ∩W ,VБ =V −W , P′= P − PБ , |
|
Шаг 4. Вычислить VN′ |
||||
где PБ P - это |
множество |
правил, содержащих недостижимые символы |
||
X VБ . |
|
|
|
|
Пример 4.3. Дана грамматика G = ({a, b, c}, {S, B, C}, P, S) с правилами
P′: 1) S → ab; 2) B →b; 5) C →cb.
Преобразуем ее в эквивалентную грамматику G′ по алгоритму 4.3:
W0 |
= {S}; |
W1 |
= {S, a, b}; |
W2 |
= {S, a, b}. |
Т.к. W1=W2, то W={S, |
a, b}. |
Множество недостижимых |
символов |
VБ ={B, C, c}. Тогда после |
удаления |
недостижимых символов, |
получим |
грамматику G′=({a, b},{S}, P, S) с правилом P′: S →ab.
Алгоритм 4.4. Устранение ε-правил
Вход: КС-грамматика G =(VT ,VN , P, S).
Выход: Эквивалентная КС-грамматика G′=(VT ,VN′ , P′, S′) без ε-правил
для всех нетерминальных символов, кроме начального, который не должен встречаться в правых частях правил грамматики.
Шаг 1. В исходной грамматике G найти ε-порождающие нетерминальные символы A VN , такие, что A *ε .
1.1Положить N0 ={A | (A →ε) P}.
1.2Вычислить Ni = Ni−1 {B | (B →α) P, α Ni*−1}.
1.3Если Ni ≠ Ni−1, то положить i:=i+1 и перейти к пункту 1.2, иначе
считать N = Ni .
Шаг 2. Из множества P правил исходной грамматики G перенести во множество P′ все правила, за исключением ε-правил, т.е. P′= P −{(A →ε) P для всех A VN }.
Шаг 3. Пополнить множество P′ правилами, которые получаются из каждого правила этого множества путем исключения всевозможных комбинаций ε-порождающих нетерминалов в правой части. Полученные при этом ε-правила во множество P′ не включать.
Шаг 4. Если S N , то P′= P {S′→ε, S′→ S}, VN′ =VN S′, где
V ∩{S′} = ; иначе VN′ =V N, S′= S.
21
Пример 4.4. Дана грамматика G =({0,1},{S, A, B}, P, S) |
с правилами P : |
1) S → AB; 2) A →0A | ε; 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 →0A | 0; 4) B →1B |1. |
|
|
|
Алгоритм 4.5. Устранение цепных правил
Вход: КС-грамматика G =(VT ,VN , P, S).
Выход: Эквивалентная КС-грамматика G′=(VT ,VN′ , P′, S′) без цепных правил, т.е. правил вида A → B , где A, B VN .
Шаг 1. Для каждого нетерминала A вычислить множество выводимых из него нетерминалов, т.е. множество N A ={B | A *B, где B VN }.
1.1Положить N0A ={A}.
1.2Вычислить NiA = NiA−1 {C | (B →C) P, B NiA−1, C VN }.
1.3Если NiA ≠ NiA−1, то положить i:=i+1 и перейти к пункту 1.2, иначе
считать N A = NiA.
Шаг 2. Построить множество P′ так: если (B →α) P не является цепным правилом (α VN ) , то включить в 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. N0L ={L}; |
|
|
N L ={L, M}; |
|
|
1 |
|
|
N2L ={L, M , N}; |
|
|
N3L ={L, M , N}. |
|
|
Т.к. N2L = N3L , то N L ={L, M , N}. |
|
|
N0M ={M}; |
|
|
22
N1M ={M , N};
N2M ={M , N}.
Т.к. N1M = N2M , то N M ={M , N}.
N0N ={N};
N1N ={N}.
Т.к. N1N = N0N , то 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 ,VN′ , 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 |
′ |
′ |
′ |
: 1) S → kSC; 2) S →n; 3) C →l; |
|
= ({k,l,m,n},{S, C}, P , S) с правилами P |
4) C →m.
23
Алгоритм 4.7. Устранение прямой левой рекурсии
Вход: КС-грамматика G =(VT ,VN , P, S).
Выход: Эквивалентная КС-грамматика G′= (VT ,VN′ , P′, S′) без прямой
левой рекурсии, т.е. без правил вида A → Aα, A VN ,α V *.
Шаг 1. Вывести из грамматики все правила для рекурсивного нетерминала X :
X → Xα | Xα |
2 |
|K| Xα |
m |
(X V |
N |
;α , α |
2 |
,K,α |
m |
V *) |
|||||||
1 |
|
|
|
|
|
|
|
|
1 |
|
|
||||||
X → β | β |
2 |
|K| β |
n |
(β , β |
2 |
,K, β |
n |
V *). |
|
|
|
||||||
1 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
Шаг 2. Внести новый нетерминал Y так, чтобы он описывал любой «хвост» строки, порождаемой рекурсивным нетерминалом X :
Y →α1Y |α2Y |K|αmY
Y →α1 |α2 |K|αm.
Шаг 3. Заменить в рекурсивном правиле для X правую часть, используя новый нетерминал и все нерекурсивные правила для X так, чтобы генерируемый язык не изменился:
X → β1Y | β2Y |K| βnY X → β1 | β2 |K| βn
Y →α1Y |α2Y |K|αmY
Y →α1 |α2 |K|αm.
Шаг 4. Пополнить множество нетерминалов грамматики новым нетерминалом Y . Пополнить множество правил грамматики правилами, полученными на шаге 3.
Шаг 5. Повторить действия шагов 1-4 для всех рекурсивных нетерминалов грамматики, после чего полученные множества нетерминалов и правил принять в качестве VN′ и P′.
Пример 4.7. Дана грамматика G = ({a, b, c, d, z}, {S, A, B, C}, P, S) с пра-
вилами P : |
1) S → Aa; 2) A → Bb; |
3) B →Cc | d; 4) C →Ccbz | dbz . После |
||||
устранения |
прямой левой |
рекурсии |
получим эквивалентную грамматику |
|||
G |
′ |
|
|
′ |
′ |
: |
|
= ({a, b, c, d, z}, {S, A, B, C, Z}, P , S) с правилами P |
|||||
|
|
1) S → Aa; 2) A → Bb; |
3) B →Cc | d; 4) C →dbzZ | dbz; 5) Z →cbzZ | cbz. |
Постановка задачи к лабораторной работе № 4
Разработать программное средство, автоматизирующее процесс эквивалентного преобразования КС-грамматик. Программное средство должно выполнять следующие функции:
1)организация ввода грамматики и проверка ее на принадлежность к классу КС-грамматик;
2)проверка существования языка КС-грамматики;
24
3) реализация эквивалентных преобразований грамматики, направленных на удаление:
а) бесполезных символов; б) недостижимых символов; в) ε-правил; г) цепных правил;
д) левой факторизации правил; е) прямой левой рекурсии.
Варианты индивидуальных заданий представлены в таблице 4.1.
Таблица 4.1 – Варианты индивидуальных заданий к лабораторной работе № 4 и 5
Вариант |
|
Контекстно-свободная грамматика |
|
|
|
||
1 |
G=({S, A, B, D, E}, {a, b, c, e}, P, S), где P: |
||
1) |
S→AB | ε; 2) A→Aa | S | a; 3) B→bD | bS | b; 4) D→ccD; 5) E→eE |e. |
||
|
|||
|
|
||
|
G=({E, T, F, G, H}, {+, -, *, /, n, m, h}, P, E), где P: |
||
2 |
1) E→T | E+T | E-T | ε; 2) T→F | F*T | F/T | ε; 3) F→G | Fn | n; |
||
|
4) |
G→Gm; 5) H→Hh | h. |
|
|
|
||
|
G=({S, R, T, X, Y}, {a, b, p, g, y}, P, S), где P: |
||
3 |
1) S → R | T; 2) R → pX | paR | paT | ε 3) T →Tg | g; 4) X → aXb; |
||
|
5) Y → aYa | y. |
||
|
|
||
|
G=({Q, A, B, C, D}, {a, b, c, d}, P, Q), где P: |
||
4 |
1) Q →acA | acB | ε; 2) B → A | Cb | ε; 3) A → Aa | Ab | a; 4) C → dCc |
||
|
5)D →dc |
||
|
|
||
5 |
G=({R, T, F, G, K}, {m, i, j, k, ^, ~, }, P, R), где P: |
||
1) |
R→R~T | R^T | ε; 2) T→F | Fi | Fj | Gk | ε; 3) G→GkG; |
||
|
4) |
K→Ki | Km | m. |
|
|
|
||
|
G=({S, X, Y, Z, K}, {x, y, z, k, #, $}, P, S), где P: |
||
6 |
1) |
S→X | Y | Z; 2) X→x#X | x#Y | ε; 3) Y→Yy$ |Yz$ | $ | ε; 4) Z→Zz$; |
|
|
5) |
K→Kk$ | k$. |
|
|
|
||
7 |
G=({S, L, M, P, N}, {n, m, l, p, @, }, V, S), где V: |
||
1) S→@nL | @mM | P; 2) L→M | Ll | Lm |ε; 3) M→L | Mm | mm; |
|||
|
4) N→pN@ | @; 5) P→nmP. |
||
|
|
||
8 |
G=({X, Y, Z, K, L}, {a, b, l, =, <, >, , , ¬}, V, X), где V: |
||
1) X→Y | Y=Y | Y<Y | Y>Y | K; 2) Y→Y Z | Y Z | ε; 3) Z→ ¬ a | ¬ b| ε; |
|||
|
4) K→ ¬ K; 5) L→ l | a | b. |
||
9 |
G=({Q, A, B, C, D}, {0, 1, -}, P, Q), где P: |
||
1) Q→01A | 01B | A; 2) A→ 0B1 | B | 1 | ε; 3) B→BA0 | B1 | C | ε; |
|||
|
|||
|
|
|
25
|
4) |
C→0C11; 5) D→ - D1 | -0 | -1. |
|
|
|
|
G=({R, T, U, W, V}, {0, 1, +, -, *, /}, P, R), где P: |
|
10 |
1) R→T1T | T1U | W | ε; 2) T→U | T01 | T10 | ε; 3) U→+U | +0 | +1 |
|
|
4) |
W→W-W | W+W; 5) V→*0 | /1. |
|
|
|
Продолжение таблицы 4.1 – Варианты индивидуальных заданий к лабораторной работе № 4 и 5
Вариант |
Контекстно-свободная грамматика |
|
|
11 |
G=({S, R, T, F, E}, {a, b, k, {, [, }, ], }, P, S), где P: |
1) S→{R | [ R; 2) R→Ra} | Ra] | a | T | F | ε; 3) F→{F} | bb; 4) T→[T]; |
|
|
5) E→k . |
|
G=({Y, K, M, L, S}, {a, b, *, /, ^}, P, Y), где P: |
12 |
1) Y→KS | KM; 2) K→K* | K/ | S; 3) S→Sa/ | Sb/ | ε; 4) M→*M*; |
|
5) L→L^ | ^a. |
26
5 Лабораторная работа № 5. Построение автомата с магазинной памятью по контекстно-свободной грамматике
Цель: - закрепить понятия «автомат с магазинной памятью (МПавтомат)», «расширенный МП-автомат», «конфигурация МП-автомата»; «строка и язык, допускаемые МП-автоматом»;
- сформировать умения и навыки построения МП-автомата и расширенного МП-автомата по КС-грамматике, разбора входной строки с помощью МП-автомата.
Основы теории
КС-языки можно распознавать с помощью автомата с магазинной памятью (МП-автомата).
Определение 5.1. МП-автомат можно представить в виде семерки:
M = (Q, T, N, F, q0, N0, Z), |
(5.1) |
где Q – конечное множество состояний автомата; T – конечный входной алфавит;
N – конечный магазинный алфавит;
F – магазинная функция, отображающая множество (Q ×(T {ε}) ×N )
во множество всех подмножеств множества Q ×N* , т.е.
F : (Q ×(T {ε}) ×N)→P(Q ×N*);
q0 – начальное состояние автомата, q0 Q; N0– начальный символ магазина, N0 Т;
Z – множество заключительных состояний автомата, Z Q.
Определение 5.2. Конфигурацией МП-автомата называется тройка вида:
(q, ω, α) (Q ×T* ×N*), |
(5.2) |
где q - текущее состояние автомата, q Q;
ω - часть входной строки, первый символ которой находится под входной головкой, ω T*;
α - содержимое магазина, α N*.
27
Общая схема МП-автомата представлена на рисунке 5.1.
|
|
|
|
|
|
|
|
a1 |
a2 |
|
an |
Входная цепочка символов |
|
|
|
|
|
|
|
|
Считывающая
головка
Стек
УУ N1 (магазин)
N2
N3
Управляющее … устройство
Рисунок 5.1 – Схема МП-автомата
Алгоритм 5.1. Функционирование МП-автомата
Начальной конфигурацией МП-автомата является конфигурация
(q0, ω, N0).
Шаг работы МП-автомата будем представлять в виде отношения непосредственного следования конфигураций (обозначается «|=») и отношения достижимости конфигураций (обозначается «|=*»). Если одним из значений магазинной функции F(q Q, t (T {ε}), S N) является (q′ Q, γ N*) , то запи-
сывается (q, tω, Sα) |= (q′, ω, γα) . При этом возможны следующие варианты.
1) Случай t T. Автомат находится в текущем состоянии q, читает входной символ t, имеет в вершине стека символ S. Он переходит в очередное состояние q′, сдвигает входную головку на ячейку вправо и заменяет верхний
символ S строкой γ магазинных символов. Вариант γ =ε означает, что S удаля-
ется из стека.
2) Случай t =ε . Отличается от первого случая тем, что входной символ t просто не принимается во внимание, и входная головка не сдвигается. Такой шаг работы МП-автомата называется ε -шагом, который может выполняться даже после завершения чтения входной строки.
Заключительной конфигурацией МП-автомата является конфигурация
(q, ε , α ), где q Z.
Определение 5.3. МП-автомат допускает входную стоку ω, если существует путь по конфигурациям (q0, ω, N0 ) |=*(q, ε, α) для некоторых q Z и
α N* .
Определение 5.4. Язык L, распознаваемый (принимаемый) МПавтоматом М определяется как множество вида:
L(M ) ={ω |ω T* и (q , ω, N |
0 |
) |=* (q, ε, α) для некоторых q Z и |
0 |
|
α N* }.
28
Определение 5.5. МП-автомат с магазинной функцией F : (Q ×(T {ε}) ×N*) → P(Q ×N*) называется расширенным МП-автоматом,
т.е. автоматом, который может заменять цепочку символов конечной длины в верхушке стека на другую цепочку символов конечной длины.
Существуют КС-языки, МП-автоматы и расширенные МП-автоматы, определяющие один и тот же язык.
Алгоритм 5.2. Построение МП-автомата по КС-грамматике
Построим МП-автомат, выполняющий левосторонний разбор. Данный автомат обладает только одним состоянием и принимает входную строку опустошением магазина. Стек используется для размещения текущей сентенции, первоначально это начальный символ грамматики. Очередная сентенция получается заменой верхнего нетерминала стека.
Вход: КС-грамматика G = (VT ,VN , P, S).
Выход: МП-автомат M = (Q, T, N, F, q0, n0, Z ) такой, что L(M) = L(G).
Шаг 1. Положить Q = {q}, q0 = q, Z = , N = VT VN, T = VT, N0 = S.
Шаг 2. Для каждого правила вида (А→β ) P , где β V *, сформировать магазинную функцию вида F(q, ε, A) = (q, β) . Эти функции предписывают
замещать нетерминал в вершине стека по правилу грамматики.
Шаг 3. Для каждого t VT сформировать магазинную функцию вида F(q, t, t) = (q, ε), которая выталкивает из стека символ, совпадающий с вход-
ным, и перемещает читающую головку. Эти функции обеспечивают опустошение стека.
Пример 5.1. Дана КС-грамматика:
G({+, (, ), a}, {S, A}, {S→S+A | A, A→(S) | a}, {S}). Последовательность построения МП-автомата будет иметь вид.
1) Q = {q}, q0 = q, T = {+, (, ), a }, N = {+, (, ), a, S, A}, N0 = S, Z = .
2) F(q, ε , S) = (q, S+A), F(q, ε , S) = (q, A), F(q, ε , A) = (q, (S)); F(q, ε , A) = (q, a).
3) F(q, t, t) = (q, ε ) для каждого t {+, (, ), a}.
Распознавание строки (а) построенным МП-автоматом представлено в таблице 5.1. Полученный МП-автомат является недетерминированным.
29
Таблица 5.1 – Распознавание МП-автоматом строки (а)
Номер |
Текущее |
Входная строка |
Содержимое магазина |
|
конфигурации |
состояние |
|||
|
|
|||
1 |
q |
(a) |
S |
|
2 |
q |
(a) |
A |
|
3 |
q |
(a) |
(S) |
|
4 |
q |
a) |
S) |
|
5 |
q |
a) |
A) |
|
6 |
q |
a) |
a) |
|
7 |
q |
) |
) |
|
8 |
q |
ε |
ε |
Алгоритм 5.3. Построение расширенного МП-автомата по КС-грамматике
Построим МП-автомат, выполняющий правосторонний разбор. Данный автомат имеет единственное текущее состояние и одно заключительное состояние, в котором стек пуст. Стек содержит левую часть текущей сентенции. Первоначально в стек помещается специальный магазинный символ, маркер пустого стека #. На каждом шаге автомат по правилу грамматики замещает нетерминалом строку верхних символов стека или дописывает в вершину входной символ.
Вход: КС-грамматика G = (VT ,VN , P, S).
Выход: расширенный МП-автомат M = (Q, T, N, F, q0, N0, Z) такой, что
L(M) = L(G).
Шаг 1. Положить Q = {q, r}, q0 = q, Z = {r}, N = VT VN {#}, T = VT, N0 = #.
Шаг 2. Для каждого правила вида (A → β) P , где β V * , сформировать магазинную функцию вида F(q, ε, β) = (q, A) , предписывающую заменять пра-
вую часть правила в вершине стека нетерминалом из левой части, независимо от текущего символа входной строки.
Шаг 3. Для каждого терминала t T сформировать магазинную функцию вида F(q, t, ε) = (q, t), которая помещает символ входной строки в вершину
стека, если там нет правой части правила, и перемещает читающую головку. Шаг 4. Предусмотреть магазинную функцию для перевода автомата в за-
ключительное состояние F(q, ε, # S) = (r, ε) .
Пример 5.2. Для грамматики из примера 5.1 построить расширенный МП-автомат. Последовательность построения МП-автомата будет иметь вид.
1) Q = {q, r}, q0 = q, T = {+, (, ), a}, N = {+, (, ), a, S, A}, N0 = #, Z = r.
30