<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=93.72.100.135&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=93.72.100.135&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/93.72.100.135"/>
		<updated>2026-04-22T09:28:37Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=69971</id>
		<title>Приведение грамматики к ослабленной нормальной форме Грейбах</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=69971"/>
				<updated>2019-02-26T19:55:28Z</updated>
		
		<summary type="html">&lt;p&gt;93.72.100.135: Опечатка в правилах вывода из S в шагах 4 и 5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Грамматикой в '''нормальной форме Грейбах''' (англ. ''Greibach normal form'') называется [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]], в которой могут содержаться только правила одного из следующих типов:&lt;br /&gt;
:&amp;lt;tex&amp;gt; A \rightarrow a\gamma &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt; S \rightarrow \varepsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
где &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; {{---}} терминал, &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} нетерминал (возможно, стартовый), &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал (причём он не должен встречаться в правых частях правил), &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; {{---}} пустая строка, &amp;lt;tex&amp;gt; \gamma &amp;lt;/tex&amp;gt; {{---}} строка из не более, чем двух нетерминалов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Грамматикой в '''ослабленной нормальной форме Грейбах''' (англ. ''Greibach weak normal form'') называется [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]], в которой могут содержаться только правила одного из следующих типов:&lt;br /&gt;
:&amp;lt;tex&amp;gt; A \rightarrow a\gamma &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt; S \rightarrow \varepsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
где &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; {{---}} терминал, &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} нетерминал (возможно, стартовый), &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал (причём он не должен встречаться в правых частях правил), &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; {{---}} пустая строка, &amp;lt;tex&amp;gt; \gamma &amp;lt;/tex&amp;gt; {{---}} строка из произвольного числа терминалов и нетерминалов.  &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приведение грамматики к ослабленной нормальной форме Грейбах ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Любую контекстно-свободную грамматику можно привести к ослабленной нормальной форме Грейбах.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим контекстно-свободную грамматику &amp;lt;tex&amp;gt; \Gamma &amp;lt;/tex&amp;gt;. Для приведения её к нормальной ослабленной форме Грейбах нужно выполнить три шага. На каждом шаге мы строим новую грамматику, допускающую тот же язык, что и &amp;lt;tex&amp;gt; \Gamma &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Избавимся от &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt;-правил. Для этого воспользуемся [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt;-правил]].&lt;br /&gt;
#Воспользуемся [[Устранение_левой_рекурсии|алгоритмом устранения левой рекурсии]].Получим грамматику, все правила которой будут иметь следующий вид:&lt;br /&gt;
#* &amp;lt;tex&amp;gt; A_i \rightarrow a \gamma &amp;lt;/tex&amp;gt;, &lt;br /&gt;
#* &amp;lt;tex&amp;gt; A_i \rightarrow A_j \gamma &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; A_i &amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; A_j &amp;lt;/tex&amp;gt; {{---}} нетерминалы, &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; {{---}} терминал, &amp;lt;tex&amp;gt; \gamma &amp;lt;/tex&amp;gt; {{---}} произвольная последовательность из терминалов и нетерминалов, &amp;lt;tex&amp;gt; i &amp;lt; j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Воспользуемся следующей функцией для придания грамматике нужного вида:&lt;br /&gt;
 '''function''' greibah(правила &amp;lt;tex&amp;gt;A_1 \dots A_n&amp;lt;/tex&amp;gt; из контекстно-свободной грамматики &amp;lt;tex&amp;gt; \Gamma &amp;lt;/tex&amp;gt;): &lt;br /&gt;
    '''for''' i = n .. 1&lt;br /&gt;
       '''for''' j = i + 1 .. n&lt;br /&gt;
          Для каждого правила вывода из &amp;lt;tex&amp;gt; A_j &amp;lt;/tex&amp;gt; вида &amp;lt;tex&amp;gt; A_j \rightarrow \delta_1 | \ldots | \delta_k &amp;lt;/tex&amp;gt; заменить каждое правило &amp;lt;tex&amp;gt; A_i \rightarrow A_j \gamma &amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; A_i \rightarrow \delta_1\gamma | \ldots | \delta_k\gamma &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После каждой итерации главного цикла все правила для &amp;lt;tex&amp;gt; A_k &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;k \geqslant i&amp;lt;/tex&amp;gt;) будут иметь вид &amp;lt;tex&amp;gt; A_k \rightarrow a \gamma &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Значит, после применения процедуры все правила грамматики будут иметь вид &amp;lt;tex&amp;gt; A \rightarrow a \gamma &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили грамматику в ослабленной нормальной форме Грейбах, которая допускает тот же язык, что и исходная.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 500px; height: 500px; float: left;&amp;quot;&lt;br /&gt;
!style=&amp;quot;background:#41aef0&amp;quot;|Текущий шаг&lt;br /&gt;
!style=&amp;quot;background:#41aef0&amp;quot;|Грамматика после применения правила&lt;br /&gt;
|-&lt;br /&gt;
|''0. Исходная грамматика''&lt;br /&gt;
|&amp;lt;tex&amp;gt;S\rightarrow XA|BB&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;B\rightarrow b|SB&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;X\rightarrow b&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;A\rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|''1. Удаление &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил''&lt;br /&gt;
|&amp;lt;tex&amp;gt;S\rightarrow XA|BB&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;B\rightarrow b|SB&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;X\rightarrow b&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;A\rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|''2. Удаление стартового нетерминала из правых частей правил&lt;br /&gt;
|&amp;lt;tex&amp;gt;S\rightarrow XA|BB&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;B\rightarrow bAB|BBB|b&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;X\rightarrow b&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;A\rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|''3. Удаление левой рекурсии&lt;br /&gt;
|&amp;lt;tex&amp;gt;S\rightarrow XA|BB&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;B\rightarrow bAB|b|bABZ|bZ&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;Z\rightarrow BB|BBZ&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;X\rightarrow b&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;A\rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|''4. Выполняем функцию '''greibah''' для правила &amp;lt;tex&amp;gt;S\rightarrow XA|BB&amp;lt;/tex&amp;gt;&lt;br /&gt;
|&amp;lt;tex&amp;gt;S\rightarrow bA|bABB|bB|bABZB|bZB&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;B\rightarrow bAB|b|bABZ|bZ&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;Z\rightarrow BB|BBZ&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;X\rightarrow b&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;A\rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|''5. Выполняем функцию '''greibah''' для правила &amp;lt;tex&amp;gt;Z\rightarrow BB|BBZ&amp;lt;/tex&amp;gt;&lt;br /&gt;
|&amp;lt;tex&amp;gt;S\rightarrow bA|bABB|bB|bABZB|bZB&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;B\rightarrow bAB|b|bABZ|bZ&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;Z\rightarrow bABB|bB|bABZB|bZB|bABBZ|bBZ|bABZBZ|bZBZ&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;X\rightarrow b&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;A\rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Асимптотика ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм состоит из трех шагов, сложность первого и последнего шага равны &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;O(\left| \Gamma \right| ^ 2)&amp;lt;/tex&amp;gt; соответственно. Таким обзом, сложность алгоритма является &amp;lt;tex&amp;gt;O(\left| \Gamma \right| ^ 2) + O\left(n\sum\limits_{i=1}^n a_j\right)&amp;lt;/tex&amp;gt;, где второй член {{---}} сложность алгоритма удаления левой рекурсии.&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
'''Простота доказательств'''&lt;br /&gt;
&lt;br /&gt;
Использование нормальных форм существенно упрощает доказательство теорем. Например, использование нормальной формы Грейбах позволяет доказать, что для каждого контекстно-свободного языка (не содержащего &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;) существует автомат с магазинной памятью без переходов по &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. &amp;lt;ref&amp;gt;[http://www.cis.upenn.edu/~jean/old511/html/cis51108sl4b.pdf Jean Gallier {{---}} Discrete Mathematics]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Разбор грамматики'''&lt;br /&gt;
&lt;br /&gt;
Нормальная форма Холмского позволяет производить разбор грамматики. Например, с помощью [[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ|алгоритма Кока-Янгера-Касами]]. В свою очередь, нормальная форма Грейбах позволяет использовать метод рекурсивного спуска, сложность которого является линейной, несмотря на возвраты.&lt;br /&gt;
&lt;br /&gt;
== См. также  ==&lt;br /&gt;
* [[Контекстно-свободные_грамматики,_вывод,_лево-_и_правосторонний_вывод,_дерево_разбора|Контекстно-свободные грамматики]]&lt;br /&gt;
* [[Нормальная_форма_Куроды | Нормальная форма Куроды]]&lt;br /&gt;
* [[Нормальная_форма_Хомского | Нормальная форма Хомского]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [[wikipedia:en:Greibach normal form | Wikipedia {{---}} Greibach normal form]]&lt;br /&gt;
* [http://www.iitg.ernet.in/gkd/ma513/oct/oct18/note.pdf MA513: Formal Languages and Automata Theory]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Нормальные формы КС-грамматик]]&lt;/div&gt;</summary>
		<author><name>93.72.100.135</name></author>	</entry>

	</feed>