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

Лабораторная работа №5. Устранить из kс-грамматики цепные правила и устранить левую рекурсию.

5.1. Устранение цепных правил.

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

T = {a, b, c}

V = {A, B, C, S}

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

S0 = {S}

Шаг 1.

Ns = {S, C}

NA = {A, C}

NB = {B}

NC = {C}

Шаг 2. Составление правил P′.

S: S → b, S → Ca, S→ b, S→ cAB

A: A→ Ab, A→ Ca, A→ b

B: B → cB

C: C→ Ca, C→ b

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

G3′ = {{a, b, c}, {S, A, B, C}, { S → b, S → Ca, S→ b, S→ cAB, A→ Ab,

A→ Ca, A→ b, B → cB, C→ Ca, C→ b }, S}

5.2.Устранение левой рекурсии.

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

T = {a, b, c}

V = {A, B, C, S}

P = {S → AB, S → SC, A→ BB, A→ Ab, A→ a, B → b, C→ Ca, C→ b}

S0 = {S}

1) Для правил S → AB, S → SC преобразованная грамматика будет содержать правила: S → ABS′, S′ → C, S → AB.

2) Для правил A→ BB, A→ Ab, A→ a преобразованная грамматика будет содержать правила: A→ BBA′, A′→ b, A→ aA′, A→ a, A→ BB.

3) Для правил C→ Ca, C→ b преобразованная грамматика будет содержать правила: C′→ a, C→ bC′, C→ b.

Преобразованная грамматика G4, не содержащая левую рекурсию.

G4′ = {{a, b, c},{S, A, B, C, S′, A′, C′},{S → ABS′, S′ → C, S → AB,

A→ BBA′, A′→ b, A→ aA′, A→ a, A→ BB, C′→ a, C→ bC′, C→ b, B → b},S}

5.3.Реализация алгоритма.

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

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

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

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

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

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

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

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

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

Console.WriteLine("LAB 5 - DELETE CHAIN RULES");

G2.DebugPrules();

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

myGrammar GwithoutChains = G2.ChainRuleDelete();

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

GwithoutChains.DebugPrules();

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

myGrammar G3 = new myGrammar(new ArrayList() { "b", "c","a"},

new ArrayList() { "S", "A", "B", "C" }, "S");

G3.AddRule("S", new ArrayList() { "A", "B" });

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

G3.AddRule("A", new ArrayList() { "B", "B" });

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

G3.AddRule("A", new ArrayList() { "a" });

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

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

G3.AddRule("B", new ArrayList() { "b" });

Console.WriteLine("LAB 5 - DELET LEFT RECURS");

G3.DebugPrules();

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

myGrammar GwithoutLR = G3.LeftRecursDelete();

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

GwithoutLR.DebugPrules();

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