Приведение грамматики к ослабленной нормальной форме Грейбах — различия между версиями
Zernov (обсуждение | вклад) |
Zernov (обсуждение | вклад) |
||
Строка 12: | Строка 12: | ||
где <tex> a </tex> {{---}} терминал, <tex> A </tex> {{---}} нетерминал, <tex> S </tex> {{---}} стартовый нетерминал (причём он не должен встречаться в правых частях правил), <tex> \varepsilon </tex> {{---}} пустая строка, <tex> \gamma </tex> {{---}} строка из произвольного числа терминалов и нетерминалов. | где <tex> a </tex> {{---}} терминал, <tex> A </tex> {{---}} нетерминал, <tex> S </tex> {{---}} стартовый нетерминал (причём он не должен встречаться в правых частях правил), <tex> \varepsilon </tex> {{---}} пустая строка, <tex> \gamma </tex> {{---}} строка из произвольного числа терминалов и нетерминалов. | ||
}} | }} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Приведение грамматики к ослабленной нормальной форме Грейбах == | == Приведение грамматики к ослабленной нормальной форме Грейбах == | ||
Строка 55: | Строка 46: | ||
Таким образом, мы получили грамматику в ослабленной нормальной форме Грейбах, которая допускает тот же язык, что и исходная. | Таким образом, мы получили грамматику в ослабленной нормальной форме Грейбах, которая допускает тот же язык, что и исходная. | ||
}} | }} | ||
+ | |||
+ | === Асимптотика === | ||
+ | |||
+ | Алгоритм состоит из трех шагов, сложность первого и последнего шага равны <tex>O(\left| \Gamma \right|)</tex> и <tex>O(\left| \Gamma \right| ^ 2)</tex> соответственно. Таким обзом, сложность алгоритма является <tex>O(\left| \Gamma \right| ^ 2) + O\left(n\sum\limits_{i=1}^n a_j\right)</tex>, где второй член {{---}} сложность алгоритма удаления левой рекурсии. | ||
+ | |||
+ | === Применение === | ||
+ | '''Простота доказательств''' | ||
+ | |||
+ | Использование нормальных форм существенно упрощает доказательство теорем. Например, использование нормальной формы Грейбах позволяет доказать, что для каждого контекстно-свободного языка (не содержащего <tex>\varepsilon</tex>) существует автомат с магазинной памятью без переходов по <tex>\varepsilon</tex>. | ||
+ | |||
+ | '''Разбор грамматики''' | ||
+ | |||
+ | Нормальная форма Холмского позволяет производить разбор грамматики. Например, с помощью [[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ|алгоритма Кока-Янгера-Касами]]. В свою очередь, нормальная форма Грейбах позволяет использовать метод рекурсивного спуска, сложность которого является линейной, несмотря на возвраты. | ||
[[Категория: Теория формальных языков]] | [[Категория: Теория формальных языков]] | ||
[[Категория: Контекстно-свободные грамматики]] | [[Категория: Контекстно-свободные грамматики]] |
Версия 17:32, 6 декабря 2016
Определение: |
Грамматикой в нормальной форме Грейбах (Greibach normal form) называется контекстно-свободная грамматика, в которой могут содержаться только правила одного из следующих типов:
|
Определение: |
Грамматикой в ослабленной нормальной форме Грейбах (Greibach weak normal form) называется контекстно-свободная грамматика, в которой могут содержаться только правила одного из следующих типов:
|
Приведение грамматики к ослабленной нормальной форме Грейбах
Теорема: |
Любую контекстно-свободную грамматику можно привести к ослабленной нормальной форме Грейбах. |
Доказательство: |
Рассмотрим контекстно-свободную грамматику . Для приведения её к нормальной ослабленной форме Грейбах нужно выполнить три шага. На каждом шаге мы строим новую грамматику, допускающую тот же язык, что и .
|
Асимптотика
Алгоритм состоит из трех шагов, сложность первого и последнего шага равны
и соответственно. Таким обзом, сложность алгоритма является , где второй член — сложность алгоритма удаления левой рекурсии.Применение
Простота доказательств
Использование нормальных форм существенно упрощает доказательство теорем. Например, использование нормальной формы Грейбах позволяет доказать, что для каждого контекстно-свободного языка (не содержащего
) существует автомат с магазинной памятью без переходов по .Разбор грамматики
Нормальная форма Холмского позволяет производить разбор грамматики. Например, с помощью алгоритма Кока-Янгера-Касами. В свою очередь, нормальная форма Грейбах позволяет использовать метод рекурсивного спуска, сложность которого является линейной, несмотря на возвраты.