Upload
raducan-mihai
View
212
Download
0
Embed Size (px)
DESCRIPTION
asdasdasdasd
Citation preview
Тема 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. Удалить -продукции
2. Удалить цепные правила
3. Удалить бесполезные символы.