Скачать презентацию Задачи к главе 4 1 Задача Скачать презентацию Задачи к главе 4 1 Задача

Задачи_к_главе_4.PPT

  • Количество слайдов: 17

Задачи к главе 4 1 Задачи к главе 4 1

Задача № 4. 1. Постройте алгоритм для определения, пуст ли язык, порождаемый данной cfg. Задача № 4. 1. Постройте алгоритм для определения, пуст ли язык, порождаемый данной cfg. Заметим, что если грамматика порождает непустой язык, то по крайней мере один нетерминал должен иметь правило, правая часть которого содержит только терминалы. 2

Задача № 4. 1. Дано: G = (VN, VT, P, S) cfg. Пусть L Задача № 4. 1. Дано: G = (VN, VT, P, S) cfg. Пусть L = L(G). Найти: L = ? Решение: 1) E 0 : = {A VN A x P, x VT+}; 2) E 1 : = E 0 {C VN E 0 C P, = B 1 B 2 … Bm, m > 0, Bi VT E 0 (i = 1, 2, …, m)} ; 3) Если E 1 E 0, то E 0 : = E 1 и перейти к шагу 2 ; 4) Если S E 0 то “L ”, иначе “L = ”. 3

Задача № 4. 2. Даны две цепочки 1 и 2 и cfg G. Построить Задача № 4. 2. Даны две цепочки 1 и 2 и cfg G. Построить алгоритм для определения: 1 2? 4

Задача № 4. 2. Решение: 1) T 0 : = 1; 2) Если 2 Задача № 4. 2. Решение: 1) T 0 : = 1; 2) Если 2 T 0, то “Да”; Стоп! 3) T 1 : = { V + T 0: , 2 }; 4) Если T 1 T 0 , то T 0 : = T 1 и переход к шагу 2. 5

Задача № 4. 3. Дана cfg G = (VN, VT, P, S), где VN Задача № 4. 3. Дана cfg G = (VN, VT, P, S), где VN = {E, T, F}, VT = {a, +, *, (, )}, S = E, P = {(1) E E + T, (2) E T, (3) T T * F, (4) T F, (5) F (E), (6) F a}. Построить эквивалентную cfg в нормальной форме Хомского. 6

Задача № 4. 3. Решение: Заметим, что правила (2) и (4) — цепные. Применим Задача № 4. 3. Решение: Заметим, что правила (2) и (4) — цепные. Применим к ним лемму о подстановке: E E + T | T * F | (E) | a T T * F | (E) | a F (E) | a Далее, введем новые нетерминалы и правила для них: A 1 + , A 2 * , A 3 ( , A 4 ) , E EA 1 T | TA 2 F | A 3 EA 4 | a T TA 2 F | A 3 EA 4| a F A 3 EA 4 | a Наконец, определим: D 1 A 1 T , D 2 A 2 F, D 3 EA 4 , E ED 1 | TD 2 | A 3 D 3 | a T TD 2 | A 3 D 3 | a F A 3 D 3 | a 7

Задача № 4. 3. Итак, получаем следующую cfg в НФХ: E ED 1 | Задача № 4. 3. Итак, получаем следующую cfg в НФХ: E ED 1 | TD 2 | A 3 D 3 | a, T TD 2 | A 3 D 3 | a , F A 3 D 3 | a , D 1 A 1 T , D 2 A 2 F, D 3 EA 4 , A 1 + , A 2 * , A 3 ( , A 4 ) 8

Задача № 4. 4. Дана: cfg в НФХ с правилами: E ED 1 | Задача № 4. 4. Дана: cfg в НФХ с правилами: E ED 1 | TD 2 | A 3 D 3 | a, T TD 2 | A 3 D 3 | a , F A 3 D 3 | a , D 1 A 1 T , D 2 A 2 F, D 3 EA 4 , A 1 + , A 2 * , A 3 ( , A 4 ) Построить эквивалентную cfg в НФХ. 9

Задача № 4. 4. Решение: Занумеруем все нетерминалы: X 1 = E; X 2 Задача № 4. 4. Решение: Занумеруем все нетерминалы: X 1 = E; X 2 = T; X 3 = F; X 4 = D 1; X 5 = D 2; X 6 = D 3; X 7 = A 1; X 8 = A 2; X 9 = A 3; X 10 = A 4. Перепишем правила в этих обозначениях: X 1 X 4 | X 2 X 5 | X 9 X 6 | a, X 2 X 5 | X 9 X 6 | a , X 3 X 9 X 6 | a , X 4 X 7 X 2 , X 5 X 8 X 3, X 6 X 1 X 10 , X 7 + , X 8 * , X 9 ( , X 10 ). Первая альтернатива для X 1 леворекурсивна. Заменим ее на: X 1 X 2 X 5 | X 9 X 6 | a | X 2 X 5 Z 1| X 9 X 6 Z 1| a. Z 1, Z 1 X 4 | X 4 Z 1. Первая альтернатива для X 2 леворекурсивна. Заменим ее на: X 2 X 9 X 6 | a | X 9 X 6 Z 2| a. Z 2 , Z 2 X 5 | X 5 Z 2. 10

Задача № 4. 4. Далее нас не устраивает правило X 6 X 1 X Задача № 4. 4. Далее нас не устраивает правило X 6 X 1 X 10 , т. к. справа X 1< X 6. Воспользуемся леммой о подстановках: Заменяя X 1 на правую часть правила для него, получаем: X 6 (X 2 X 5 | X 9 X 6 | a | X 2 X 5 Z 1| X 9 X 6 Z 1| a. Z 1)X 10. Заменяя в полученном правиле X 2 на правую часть правила для него, получаем: X 6 ((X 9 X 6 | a | X 9 X 6 Z 2| a. Z 2)X 5 | X 9 X 6 | a | (X 9 X 6 | a | X 9 X 6 Z 2| a. Z 2)X 5 Z 1| X 9 X 6 Z 1| a. Z 1)X 10. Правила X 7 + , X 8 * , X 9 ( , X 10 ) уже в НФГ. Теперь X 9 (: X 6 (X 6 X 5 X 10 | a. X 5 X 10 | (X 6 Z 2 X 5 X 10 | a. Z 2 X 5 X 10 | (X 6 X 10 | a. X 10 | (X 6 X 5 Z 1 X 10 | a. X 5 Z 1 X 10 | (X 6 Z 2 X 5 Z 1 X 10 | a. Z 2 X 5 Z 1 X 10 | (X 6 Z 1 X 10 | a. Z 1 X 10. 11

Задача № 4. 4. Теперь подставим в правило X 5 X 8 X 3 Задача № 4. 4. Теперь подставим в правило X 5 X 8 X 3 вместо X 8 * : X 5 *X 3 , а в правило X 4 X 7 X 2 вместо X 7 + : X 4 +X 2 , а в правило X 3 X 9 X 6 | a вместо X 9 ( : X 3 (X 6 | a , а в правило X 2 X 9 X 6 | a | X 9 X 6 Z 2| a. Z 2 вместо X 9 ( : X 2 ( X 6 | a | ( X 6 Z 2| a. Z 2 , а в правило X 1 X 2 X 5 | X 9 X 6 | a | X 2 X 5 Z 1| X 9 X 6 Z 1| a. Z 1 вместо X 2 ( X 6 | a | ( X 6 Z 2| a. Z 2 , а вместо X 9 ( : X 1 (X 6 X 5 | a. X 5 | (X 6 Z 2 X 5 | a. Z 2 X 5| (X 6 | a | (X 6 X 5 Z 1 | a. X 5 Z 1 | (X 6 Z 2 X 5 Z 1 | a. Z 2 X 5 Z 1| (X 6 Z 1| a. Z 1. 12

Задача № 4. 4. Итак, имеем следующую НФГ: X 1 (X 6 X 5 Задача № 4. 4. Итак, имеем следующую НФГ: X 1 (X 6 X 5 | a. X 5 | (X 6 Z 2 X 5 | a. Z 2 X 5| (X 6 | a | (X 6 X 5 Z 1 | a. X 5 Z 1 | (X 6 Z 2 X 5 Z 1 | a. Z 2 X 5 Z 1| (X 6 Z 1| a. Z 1 , X 2 (X 6 | a | (X 6 Z 2 | a. Z 2 , X 3 (X 6 | a , X 4 +X 2 , X 5 *X 3 , X 6 (X 6 X 5 X 10 | a. X 5 X 10 | (X 6 Z 2 X 5 X 10 | a. Z 2 X 5 X 10 | (X 6 X 10 | a. X 10 | (X 6 X 5 Z 1 X 10 | a. X 5 Z 1 X 10 | (X 6 Z 2 X 5 Z 1 X 10 | a. Z 2 X 5 Z 1 X 10 | (X 6 Z 1 X 10 | a. Z 1 X 10, X 7 + , X 8 * , X 9 ( , X 10 ) , Z 1 +X 2 | +X 2 Z 1, Z 2 *X 3 | *X 3 Z 2. 13

Задача № 4. 5. Построить алгоритм исключения не достижимых нетерминалов из cfg. Применить его Задача № 4. 5. Построить алгоритм исключения не достижимых нетерминалов из cfg. Применить его к грамматике G = (VN, VT, P, S), где VN = {S, A, B, C, D}; VT = {a, b, d}; P = {(1) S AB, (2) S BC, (3) A B, (4) A a. A, (5) B Ab, (6) B b, (7) D d, (8) D d. AD}. 14

Задача № 4. 5. (1) F 1 : = {S}; (2) F : = Задача № 4. 5. (1) F 1 : = {S}; (2) F : = F 1; (3) F 1 : = F 1 {C VN | A C P, , V*, A F 1, C F 1}; (4) Если F 1 F, то повторить шаг 2. Иначе (5) = F; P 1 = {A P A F}; = {a VT A a P 1}; G 1 = ( , , P 1, S). Применим этот алгоритм к данной грамматике. 1. F 1 = {S}; F 1 : = {S}; 2. F 1 = {S, A, B, C}; F 1 F; F = {S, A, B, C}; 3. F 1 = {S, A, B, C}; F 1 = F; 4. G 1 = ({S, A, B, C}, {a, b}, P 1, S), где P = {(1) S AB, (2) S BC, (3) A B, (4) A a. A, (5) B Ab, (6) B b}. 15

Задача № 4. 6. Построить алгоритм исключения из cfg непродуктивных нетерминалов. Применить его к Задача № 4. 6. Построить алгоритм исключения из cfg непродуктивных нетерминалов. Применить его к грамматике, полученной в предыдущей задаче: G = ({S, A, B, C}, {a, b}, P, S), где P = {(1) S AB, (2) S BC, (3) A B, (4) A a. A, (5) B Ab, (6) B b}. 16

Задача № 4. 6. (1) F 1 : = {A VN | A x, Задача № 4. 6. (1) F 1 : = {A VN | A x, x VT*}; (2) F : = F 1; (3) F 1 : = F 1 {B VN | B C 1 C 2 … Cm P, V*, и все Cik VN ( 1 ik m) , также принадлежат множеству F 1}; (4) Если F 1 F, то повторить шаг 2. Иначе (5) = F; P 1 = {A P A F}; = {a VT A a P 1}; G 1 = ( , , P 1, S). Применим этот алгоритм к грамматике G 1: 1. F 1 = {B}; F : = {B}; 2. F 1 = {B, A}; F 1 F; F = {B, A}; 3. F 1 = {B, A, S}; F 1 F; 4. F 1 = {B, A, S}; F 1 = F; 5. G 2 = ({S, A, B}, {a, b}, P 2, S), где P = {(1) S AB, (2) A B, (3) A a. A, (4) B Ab, (5) B b}. 17