Регулярная аппроксимация КС-языков — различия между версиями
Ateuhh (обсуждение | вклад)  (→Алгоритм преобразования грамматики в конечный автомат)  | 
				Ateuhh (обсуждение | вклад)  м (→Идея алгоритма)  | 
				||
| Строка 32: | Строка 32: | ||
Определим функцию <tex>\mathtt {getTheTypeOfMutualRecursiveSet}(N_i): P \rightarrow  \{left, right, self, cycle\}  </tex>:  | Определим функцию <tex>\mathtt {getTheTypeOfMutualRecursiveSet}(N_i): P \rightarrow  \{left, right, self, cycle\}  </tex>:  | ||
| − |   '''function''' getTheTypeOfMutualRecursiveSet(<tex>N_i</tex>: '''nonterminal'''):  | + |   '''function''' getTheTypeOfMutualRecursiveSet(<tex>N_i</tex>: '''nonterminal'''): '''int'''  | 
     '''if''' !isLeftType(<tex>N_i</tex>) '''and''' isRightType(<tex>N_i</tex>)    |      '''if''' !isLeftType(<tex>N_i</tex>) '''and''' isRightType(<tex>N_i</tex>)    | ||
         '''return''' left  |          '''return''' left  | ||
Версия 10:12, 20 декабря 2016
Содержание
Определения
| Определение: | 
| Контекстно-свободная грамматика называется самоприменимой (англ. self-embeded), если , . | 
| Определение: | 
| Нетерминал в грамматике называется рекурсивным (англ. recursive), если . | 
| Определение: | 
| Нетерминалы в грамматике называются взаимно рекурсивными (англ. mutual recursive), если . | 
Алгоритм преобразования грамматики в конечный автомат
| Лемма: | 
Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.  | 
| Доказательство: | 
| В качестве конструктивного доказательства рассмотрим алгоритм построения конечного автомата по грамматике. Также приведем ссылку на формальное доказательство[1]. | 
Идея алгоритма
Пусть, множество рекурсивных нетерминалов из . Пусть, разбиение на дизъюнктных множеств взаимно рекурсивных нетерминалов, .
bool isLeftType(: nonterminal): return bool isRightType(: nonterminal): return
Определим функцию :
function getTheTypeOfMutualRecursiveSet(: nonterminal): int if !isLeftType() and isRightType() return left if isLeftType() and !isRightType() return right if isLeftType() and isRightType() return self if !isLeftType() and !isRightType() return cyclic
- Когда функция состоит только из лево-рекурсивных нетерминалов.
 - Аналогично для .
 - Когда функция состоит только из правил, участвующих в рекурсии.
 - Функция , для такого , при котором грамматика самоприменима.
 
Заметим, что , т.к в противном случае грамматика будет самоприменима. В основе алгоритма будет рекурсивный обход грамматики. Спускаемся по грамматике до тех пор не приходим в нетерминал или символ алфавита:
- Символ алфавит или — добавляем новое правило в автомат;
 - Нерекурсивный нетерминал — запускаемся от всех правых частей правил, который терминал порождает;
 - Рекурсивный нетерминал — в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода).
 
Псевдокод
— множество состояний ДКА.
— множество переходов ДКА.
— множество допускающих состояний.
function createFA(G: grammar): // s = createState f = createState return makeFA(s,S,f) function makeFA(q0: vertex, a: char, q1: vertex): if a == or a // пришли в лист дерева разбора return if a == where q = createState makeFA() makeFA() return if exist where foreach b in = createState if getTheTypeOfMutualRecursiveSet() == left foreach C in where makeFA() foreach C,D in where makeFA() else // рекурсивный нетерминал right или cyclic foreach C in where makeFA() foreach C,D in where makeFA() return foreach p in where p == makeFA()
Аппроксимации самоприменимой грамматики
В данном разделе покажем методы апроксимации: (recursive transition network) аппроксимацию и (Mohri and Nederhof's) аппроксимацию — самоприменимой контекстно-свободной грамматики к регулярной грамматике. Для удобства будем считать, что грамматика представлена в НФХ.
RTN аппроксимация
Построим, по данной грамматике аппроксимирующий ее конечный автомат.
- Для каждого нетерминала в грамматике, создадим новый конечный автомат , добавим в него два состояния и .
 - Для каждого правила грамматике , введм новые состояния в автомат этого нетерминала , а также добавим новые правила перехода в : .
 - Таким образом мы построили множество конечных автоматов = для каждого нетерминала . Теперь объединим все в один автомат. Объединим все состоянии автоматов из в множество . Скопируем все переходы каждого автомата из в . Далее для каждого перехода вида , вместо него добавим два новых перехода: .
 
MN аппроксимация
Построим по данной самоприменимой контекстно-свободной грамматике регулярную грамматику .
- Для каждого нетерминала из , добавим нетерминалы и в .
 - Для каждого правила , где . Добавим в нетерминалы и следуюшие правила: .
 
- (Если , тогда добавим правило ).
 
В итоге — правоконтекстная грамматика, эквивалентная конечному автомату, который задает регулярный язык.
Пример
Исходная грамматика генерирует язык: . Результирущая грамматика генирирует регулярный язык: .
Сравнение двух методов
Ясно, что оба языка, генерируемых конечным автомат для первого метода и апрокисимируещей граматикой для второго метода, содержат в себе язык генерируемый исходной грамматикой. Привлекателным свойством аппроксимации по сравнению с , то, что она можеть быть применима к большим грамматикам: для каждого нетерминала грамматике , добавляется не более одного нового нетерминала в и размер результирующий грамматики максимум в раза больше, чем размер исходной. Так как для апроксимации грамматики , количество состаяний апроксимируещего автомата в худшем случаи может составлять , что может быть критично для аппроксимации больших грамматик. Также,еще несколько эффекивных методов аппрокимации можно найти в статьях, приведенных в ссылках.
См. также
- Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора
 - Замкнутость регулярных языков относительно различных операций
 - Основные определения, связанные со строками
 - Замкнутость КС-языков относительно различных операций
 
Примечания
Источники информации
- Jean-Claude Junqua,Gertjan van Noord — Robustness in Language and Speech Technology — Kluwer Academic Publishers, 2001 — ISBN 0-7923-6790-1
 - Strongly Regular Grammars and Regular Approximation of Contex-Free Languages
 - Practical Experiments with Regular Approximation of Context-Free Languages
 - Willem J. M. Levelt — An Introduction to the Theory of Formal Languages and Automata — John Benjamin B.V., 2008 — ISBN 978-90-272-3250-2