2
Тема 12: Устранение цепных правил в КС-грамматиках Определение : Цепное правило это продукция вида A->B, где и A, B — нетерминалы. Иногда цепные продукции могут усложнять и создавать излишние шаги в порождениях. Например E->T, T->F — цепные правила. Или A->B, B->C, C->D, D->a — всё-равно что A->a. Обозначим через R A ={B / B A, A, BV N } множество цепных правил для А. Алгоритм создания множества R A : Шаг 1: i=0, R A 0 = {A} Шаг 2: i=i+1, Для всех правил вида B->X, где X R A i-1 определим R A i = R A i-1 {В} Шаг 3: Если R A i R A i-1 тогда повторяется шаг 2 Шаг 4: Если R A i = R A i-1 тогда стоп. Например для следующих цепных правил E->T, T->F и F->I, R I ={I, F, T, E}. Теорема: Для любой контекстно свободной грамматики G можно построить новую G' грамматику без цепных правил. Алгоритм удаления цепных правил: Дана грамматика G={V T ,V N , P, S}, с цепными правилами. Необходимо построить G'={V T ,V N ', P', S}. Шаг 1. i=0, P 0 '={A->P и (||>1) или (||=1 и V T )}, где — последовательность символов. Шаг 2. i=i+1, P i ' = P i-1 '{X->, где XR A + все правила A-> P i-1 '}. Шаг 3. Если P i ' P i-1 ' тогда повторяется шаг 2. Шаг 4. Если P i ' = P i-1 ' тогда стоп. В новом множестве правил нет цепных правил. Все правила имеют с правой стороны или только терминальные символы или длинна последовательности символов правой стороны больше 1.

Tema13

Embed Size (px)

DESCRIPTION

asdasdasdasd

Citation preview

Page 1: Tema13

Тема 12: Устранение цепных правил в КС-грамматиках

Определение: Цепное правило это продукция вида A->B, где и A, B —

нетерминалы. Иногда цепные продукции могут усложнять и создавать

излишние шаги в порождениях.

Например E->T, T->F — цепные правила. Или A->B, B->C, C->D,

D->a — всё-равно что A->a.

Обозначим через RA={B / B A, A, BVN} множество цепных правил

для А.

Алгоритм создания множества RA:

Шаг 1: i=0, RA0 = {A}

Шаг 2: i=i+1, Для всех правил вида B->X, где X RAi-1 определим

RAi = RA

i-1 {В}

Шаг 3: Если RAi RA

i-1 тогда повторяется шаг 2

Шаг 4: Если RAi = RA

i-1 тогда стоп.

Например для следующих цепных правил E->T, T->F и F->I, RI={I, F,

T, E}.

Теорема: Для любой контекстно свободной грамматики G можно

построить новую G' грамматику без цепных правил.

Алгоритм удаления цепных правил:

Дана грамматика G={VT,VN, P, S}, с цепными правилами. Необходимо

построить G'={VT,VN', P', S}.

Шаг 1. i=0, P0'={A->P и (||>1) или (||=1 и VT)}, где —

последовательность символов.

Шаг 2. i=i+1, Pi' = Pi-1'{X->, где XRA + все правила A-> Pi-1'}.

Шаг 3. Если Pi' Pi-1' тогда повторяется шаг 2.

Шаг 4. Если Pi' = Pi-1' тогда стоп.

В новом множестве правил нет цепных правил. Все правила имеют с

правой стороны или только терминальные символы или длинна

последовательности символов правой стороны больше 1.

Итак, для упрощения КС грамматик необходимо построить новую

эквивалентную грамматику которая не имеет бесполезные символы, -

продукций и цепных правил. Очень важен порядок применения

преобразований, иначе в грамматике могут остаться удаляемые

элементы. Безопасным является следующий:

1. Удалить -продукции

Page 2: Tema13

2. Удалить цепные правила

3. Удалить бесполезные символы.