Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
daniel.docx
Скачиваний:
10
Добавлен:
21.09.2019
Размер:
236.18 Кб
Скачать

Лабораторная работа №4. Устранить из кс-грамматики бесполезные символы и ε–правила

4.1 Дана КС-грамматика G1 = {T, V, P, S0}

T = {a, b, c, d}

V = {A, B, C, F, S}

P = { S → b, S → CF, S→ cCB, A→ Ab, A→ c, B → cB, C→ Ca, F→ d }

S0 = {S}

4.2. Устранить бесполезные символы, ε-правила.

Шаг 1. Удаление непроизводящих символов.

N0 = Ø

N1 = {S, A, F} U Ø

N2 = {S, A, F} = N1

Грамматика G1 имеет вид:

G1′ = {{b, c, d}, {S, A, F}, { S → b, A→ Ab, A→ c, F→ d }, S}

Шаг 2. Удаление недостижимых символов из грамматики G1′.

N0 = {S}

N1 = {S} U {b}

N2 = {S, b} = N1

Преобразованная грамматика G1, не содержащая бесполезные символы.

G1′′ = {{b}, {S}, {S → b}, S}

Дана КС-грамматика G2 = {T, V, P, S0}

T = {a, b, c}

V = {S, A, B, C}

P = { S → b, S → C, S→ cCB, A→ Ab, A→ c, B → cB, C→ Ca, C→ ε }

S0 = {S}

Шаг 1. Построим множество укорачивающих нетерминалов Nε.

N0 = {C}

N1 = {C} U {S}

N2 = {C, S} = N1

Nε = {C, S}

Шаг 2. Устранение ε – правил.

P′ = Ø

S → C не будет входить в P′.

S→ cCB => S→ cCB, S→ cB;

C→ Ca => C→ Ca, C→ a;

S входит в Nε => добавляем новый нетерминал S′ и правила S′ → S и S′ → ε.

Преобразованная грамматика L2, не содержащая ε–правила.

G2′ = {{a, b, c}, {S′, S, A, B, C}, { S′ → S, S′ → ε, S→ cCB, S→ cB, S→ b, C→ Ca, C→ a, A→ Ab, A→ c, B → cB}, S′}

4.3. Реализация.

Console.WriteLine("\t\tPractic 2");

myGrammar G = new myGrammar(new ArrayList() { "a", "b", "c", "d" }, new ArrayList() { "S", "A", "B", "C", "F" }, "S");

G.AddRule("S", new ArrayList() { "b" });

G.AddRule("S", new ArrayList() { "C", "F"});

G.AddRule("S", new ArrayList() { "c", "C", "B" });

G.AddRule("A", new ArrayList() { "A", "b" });

G.AddRule("A", new ArrayList() { "c" });

G.AddRule("B", new ArrayList() { "c", "B" });

G.AddRule("C", new ArrayList() { "C", "a" });

G.AddRule("F", new ArrayList() { "d" });

Console.WriteLine("LAB 4 - DELETE UNUSEFUL SYMB");

G.DebugPrules();

Console.WriteLine("--------");

myGrammar GWitoutUnuseful = G.unUsefulDelete();

Console.WriteLine("\nNew Prules:");

GWitoutUnuseful.DebugPrules();

Console.WriteLine("-----------------------------------");

myGrammar G1 = new myGrammar(new ArrayList() { "b", "c" }, new ArrayList() { "S", "A", "B" }, "S");

G1.AddRule("S", new ArrayList() { "b" });

G1.AddRule("S", new ArrayList() { "c", "C", "B" });

G1.AddRule("S", new ArrayList() { "C" });

G1.AddRule("A", new ArrayList() { "A", "b" });

G1.AddRule("A", new ArrayList() { "c" });

G1.AddRule("B", new ArrayList() { "c", "B" });

G1.AddRule("C", new ArrayList() { "C", "a"});

G1.AddRule("C", new ArrayList() { "" });

Console.WriteLine("LAB 4 - DELETE EPSYLON RULES");

G1.DebugPrules();

Console.WriteLine("--------");

myGrammar GWithoutEps = G1.EpsDelete();

Console.WriteLine("--------");

GWithoutEps.DebugPrules();

Console.WriteLine("-----------------------------------\n");

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]