Удаление eps-правил из грамматики

Материал из Викиконспекты
Версия от 21:23, 18 ноября 2011; 192.168.0.2 (обсуждение) (Основные определения)
Перейти к: навигация, поиск

Основные определения

Определение:
Правила вида Aε называются ε-правилами.


Определение:
Назовем КС грамматику G=(N,Σ,P,S) грамматикой без ε-правил (или неукорачивающей), если:
  1. P не содержит ε-правил или
  2. есть точно одно ε-правило Sε, и S не встречается в правых частях остальных правил из P.


Определение:
Нетерминал A называется ε-порождающим, если Aε.


Алгоритм удаления ε-правил из грамматики

Поиск ε-порождающих нетерминалов

Вход. КС грамматика G=N,Σ,P,S.

Выход. Множество ε-порождающих нетерминалов.

Схема алгоритма:

  1. Если Aε — правило грамматики G, то Aε-порождающий нетерминал.
  2. Если BC1C2...Ck — правило грамматики G, где каждый Ciε-порождающий нетерминал, то Bε-порождающий нетерминал.
Теорема:
Нетерминал A является ε-порождающим тогда и только тогда, когда вышеприведенный алгоритм идентифицирует A как ε-порождающий.
Доказательство:

Индукция по длине кратчайшего порождения Aε

База. Aε за один шаг, то есть Aε. ε-порождающий нетерминал A обнаруживается алгоритмом согласно первому пункту алгоритма.
Индукция. Пусть Aε за n шагов. Тогда первых шаг порождения AC1C2...Ck, где Ciε за менее, чем n шагов. По индукционному предположению каждый нетерминал Ci обнаруживается как ε-порождающий. Тогда нетерминал A обнаружиться вторым пунктом алгоритма как ε-порождающий.

Схема алгоритма удаления ε-правил из грамматики

Вход. КС грамматика G=N,Σ,P,S.

Выход. КС грамматика G=N,Σ,P,S:L(G)fεg=L(G).

Схема алгоритма:

  1. Найти все ε-порождаюшие нетерминалы.
  2. Удалить все ε-правила из P.
  3. Рассмотрим правила вида (*) Aα0B1α1B2α2...Bkαk, где αi — последовательности из терминалов и нетерминалов, Bjε-порождающие нетерминалы. Добавить все возможные правила вида (*), в которых либо присутствует, либо отсутствует Bj(1jk), кроме правила Aε. Такое правило может возникнуть, если все αi=ε.

Замечание

Если в исходной грамматике G есть правило Sε и S встречается в правых частях, то для того, чтобы получить эквивалентную грамматику без ε-правил, необходимо после применения описанного выше алгоритма добавить новый нетерминал S, сделать его стартовым, добавить правила SS|ε.

Доказательство корректности алгоритма

Теорема:
Если грамматика G была построена с помощью описанного выше алгоритма по грамматике G, то L(G)=L(G)fεg.
Доказательство:

Для этого достаточно доказать, что AGw тогда и только тогда, когда AGw и wε (*).

)<br\> Пусть AGw. Несомненно, wε, поскольку G - грамматика без ε-правил.
Докажем индукцией по длине порождения, что AGw.
Обозначим длину порождения за p.

Базис. p=1

В этом случае в G есть правило Aw. Согласно конструкции G в G есть правило Aα, причем α это w, символы которой, возможно, перемежаются ε порождающими нетерминалами. Тогда в G есть порождения AGαGw, где на шагах после первого, из всех нетерминалов в цепочке α выводиться ε.

Предположение. Пусть из AGw следует, что AGw и wε верно для p<n.
Переход. p=n

Пусть в порождении n шагов, n>1. Тогда оно имеет вид AGX1X2...XkGw, где XiNΣ. Первое использованное правило должно быть построено по правилу AY1Y2...Ym, где цепочка Y1Y2...Ym совпадает с цепочкой X1X2...Xk, цепочка Y1Y2...Ym, возможно, перемежаются ε порождающими нетерминалами.
Цепочку w можно разбить на w1w2...wk, где XiGwi. Если Xi есть терминал, то wi=Xi, a если нетерминал, то порождение XiGwi содержит менее n шагов.
По предположению XiGwi.
Теперь построим соответствующее порождение в G.

AGY1Y2...YmGX1X2...XkGw1w2...wk=w

Ч.т.д.
)
Пусть AGw  и  wε.
Докажем индукцией по длине порождения, что AGw.
Обозначим длину порождения за p.

Базис. p=1

Aw является правилом в G. Поскольку wε, это же правило будет и в G, поэтому AGw.

Предположение. Пусть из AGw и wεследует,чтоAGw верно для p<n.
Переход. p=n

Пусть в порождении n шагов, n>1. Тогда оно имеет вид AGY1Y2...YmGw, где YiNΣ. Цепочку w можно разбить на w1w2...wm, где YiGwi.
Пусть X1,X2,...Xk будут теми из Yj (в порядке записи), для которых wiε. k1, поскольку wε.
Таким образом AX1X2...Xk является правилом в G по построению G. Утверждаем, что X1X2...XkGw, поскольку только Yj, которых нет среди X1,X2,...Xk, использованы для порождения ε и не вносят ничего в порождение w. Так как каждое из порождений YjGwj содержит менее n шагов, к ним можно применить предположение индукции и заключить, что если wjε, то YjGwj.
Таким образом AGX1X2...XkGw.
Ч.т.д.

Подставив S вместо A в утверждение (*), видим, что wL(G) для wε тогда и только тогда, когда wL(G).

Литература

  • Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — С. 273: ISBN 5-8459-0261-4 (рус.)