<?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=Ch13</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=Ch13"/>
		<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/Ch13"/>
		<updated>2026-04-26T14:54:21Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=63739</id>
		<title>Устранение левой рекурсии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=63739"/>
				<updated>2018-02-11T19:35:32Z</updated>
		
		<summary type="html">&lt;p&gt;Ch13: Ошибка в примере устранения непосредственной левой рекурсии. Смотри 3-ий пункт процедуры устранения. Порождается ещё и строка вида A'-&amp;gt;a&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Говорят, что [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная (КС) грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит '''непосредственную левую рекурсию''' (англ. ''direct left recursion''), если она содержит правило вида &amp;lt;tex&amp;gt;A \to A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Говорят, что КС-грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит '''левую рекурсию'''  (англ. ''left recursion''), если в ней существует вывод вида &amp;lt;tex&amp;gt;A \Rightarrow^* A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Методы трансляции#Нисходящий разбор|Методы нисходящего разбора]] не в состоянии работать с леворекурсивными грамматиками. Проблема в том, что продукция вида &amp;lt;tex&amp;gt;A \Rightarrow^* A\alpha&amp;lt;/tex&amp;gt; может применяться бесконечно долго, так и не выработав некий терминальный символ, который можно было бы сравнить со строкой. Поэтому требуется преобразование грамматики, которое бы устранило левую рекурсию.&lt;br /&gt;
&lt;br /&gt;
==Устранение непосредственной левой рекурсии==&lt;br /&gt;
Опишем процедуру, устраняющую все правила вида &amp;lt;tex&amp;gt;A \to A\alpha&amp;lt;/tex&amp;gt;, для фиксированного нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Запишем все правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в виде: &lt;br /&gt;
&amp;lt;tex&amp;gt;A \to A\alpha_1 \mid \ldots \mid A\alpha_n \mid \beta_1 \mid \ldots \mid \beta_m &amp;lt;/tex&amp;gt;, где&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} непустая последовательность терминалов и нетерминалов (&amp;lt;tex&amp;gt;\alpha \nrightarrow \varepsilon &amp;lt;/tex&amp;gt;);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; {{---}} непустая последовательность терминалов и нетерминалов, не начинающаяся с &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Заменим правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;A \to\beta_1A^\prime \mid \ldots\ \mid \beta_mA^\prime \mid \beta_1 \mid \ldots \mid \beta_m&amp;lt;/tex&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Создадим новый нетерминал &amp;lt;tex&amp;gt;{A^\prime} \to \alpha_1{A^\prime} \mid \ldots \mid \alpha_n{A^\prime} \mid \alpha_1 \mid \ldots \mid \alpha_n&amp;lt;/tex&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изначально нетерминал &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; порождает строки вида &amp;lt;tex&amp;gt;\beta\alpha_{i0}\alpha_{i1} \ldots \alpha_{ik}&amp;lt;/tex&amp;gt;. В новой грамматике нетерминал &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; порождает &amp;lt;tex&amp;gt;\beta{A^\prime}&amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt;A^\prime&amp;lt;/tex&amp;gt; порождает строки вида &amp;lt;tex&amp;gt;\alpha_{i0}\alpha_{i1} \ldots \alpha_{ik}&amp;lt;/tex&amp;gt;. Из этого очевидно, что изначальная грамматика эквивалентна новой.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&amp;lt;tex&amp;gt;A \to S\alpha \mid A\alpha&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;S \to A\beta&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть непосредственная левая рекурсия &amp;lt;tex&amp;gt;A \to A\alpha&amp;lt;/tex&amp;gt;. Добавим нетерминал &amp;lt;tex&amp;gt;A^\prime&amp;lt;/tex&amp;gt; и добавим правила &amp;lt;tex&amp;gt;A \to S\alpha{A^{\prime}}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; A^{\prime} \to \alpha{A^{\prime}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Новая грамматика:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \to S\alpha{A^{\prime}} \mid S\alpha&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A^{\prime} \to \alpha{A^{\prime} \mid \alpha}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;S \to A\beta&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В новой грамматике нет непосредственной левой рекурсии, но нетерминал &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; леворекурсивен, так как есть &amp;lt;tex&amp;gt; A \Rightarrow S\alpha{A^{\prime}} \Rightarrow A\beta\alpha{A^{\prime}} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Алгоритм  устранения произвольной левой рекурсии==&lt;br /&gt;
Воспользуемся [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt;-правил]]. Получим грамматику без &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt;-правил для языка &amp;lt;tex&amp;gt;L(\Gamma) \setminus \lbrace \varepsilon \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Упорядочим нетерминалы, например по возрастанию индексов, и будем добиваться того, чтобы не было правил вида &amp;lt;tex&amp;gt;A_i \to A_j\alpha&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j \leqslant i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если данное условие выполняется для всех &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;, то в грамматике нет &amp;lt;tex&amp;gt;A_i \Rightarrow^* A_i&amp;lt;/tex&amp;gt;, а значит не будет левой рекурсии. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;N = \lbrace A_1, A_2, \ldots , A_n \rbrace&amp;lt;/tex&amp;gt; {{---}} упорядоченное множество всех нетерминалов.&lt;br /&gt;
&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;A_i \in N&amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;A_j \in \{ N \mid 1 \leqslant j &amp;lt; i \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''for''' &amp;lt;tex&amp;gt;p \in \{ P \mid A_i \to A_j\gamma \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
        удалить продукцию &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; &lt;br /&gt;
        '''for''' &amp;lt;tex&amp;gt;Q \to x_i \in \{A_j \to \delta_1 \mid \ldots \mid \delta_k\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
          добавить правило &amp;lt;tex&amp;gt;A_i \to x_i\gamma&amp;lt;/tex&amp;gt;&lt;br /&gt;
    устранить непосредственную левую рекурсию для &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; присутствовал в языке исходной грамматики, добавим новый начальный символ &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt;S' \to S \, \mid \, \varepsilon &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; итерации внешнего цикла в любой продукции внешнего цикла в любой продукции вида &amp;lt;tex&amp;gt;A_k \to A_l\alpha, k &amp;lt; i&amp;lt;/tex&amp;gt;, должно быть &amp;lt;tex&amp;gt;l &amp;gt; k&amp;lt;/tex&amp;gt;. В результате при следующей итерации внутреннего цикла растет нижний предел &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; всех продукций вида &amp;lt;tex&amp;gt;A_i \to A_m\alpha&amp;lt;/tex&amp;gt; до тех пор, пока не будет достигнуто &amp;lt;tex&amp;gt;i \leqslant m &amp;lt;/tex&amp;gt;.&lt;br /&gt;
   &lt;br /&gt;
После &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; итерации внешнего цикла в грамматике будут только правила вида &amp;lt;tex&amp;gt;A_i \to A_j\alpha&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;gt; i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Можно заметить, что неравенство становится строгим только после применения алгоритма устранения непосредственной левой рекурсии. При этом добавляются новые нетерминалы. Пусть &amp;lt;tex&amp;gt;{A^\prime}_i &amp;lt;/tex&amp;gt; новый нетерминал. Можно заметить, что нет правила вида &amp;lt;tex&amp;gt;\ldots \to {A^\prime}_i&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;{A^\prime}_i&amp;lt;/tex&amp;gt; самый левый нетерминал, а значит новые нетерминалы можно не рассматривать во внешнем цикле. Для строгого поддержания инвариантов цикла можно считать, что созданный на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; итерации в процессе устранения непосредственной левой рекурсии нетерминал имеет номер &amp;lt;tex&amp;gt;A_{-i}&amp;lt;/tex&amp;gt; (т.е. имеет номер, меньший всех имеющихся на данный момент нетерминалов).&lt;br /&gt;
&lt;br /&gt;
На &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; итерации внешнего цикла все правила вида &amp;lt;tex&amp;gt;A_i \to A_j \gamma&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; j &amp;lt; i &amp;lt;/tex&amp;gt; заменяются на &amp;lt;tex&amp;gt;A_i \to \delta_1\gamma \mid \ldots \mid \delta_k\gamma&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;A_j \to \delta_1 \mid \ldots \mid \delta_k&amp;lt;/tex&amp;gt;. Очевидно, что одна итерация алгоритма не меняет язык, а значит язык получившийся в итоге грамматики совпадает с исходным.&lt;br /&gt;
&lt;br /&gt;
===Оценка времени работы===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;a_i&amp;lt;/tex&amp;gt; количество правил для нетерминала &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; итерация внешнего цикла будет выполняться за &amp;lt;tex&amp;gt;O\left(\sum\limits_{A_i \to A_j, j &amp;lt; i} a_j\right) + O(a_i)&amp;lt;/tex&amp;gt;, что меньше чем &amp;lt;tex&amp;gt;O\left(\sum\limits_{i=1}^n a_j\right)&amp;lt;/tex&amp;gt;, значит асимптотика алгоритма &amp;lt;tex&amp;gt;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;
Пример грамматики для которой имеет значение порядок нетерминалов&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A_1 \to 0 \mid 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A_{i+1} \to {A_i}0 \mid {A_i}1 &amp;lt;/tex&amp;gt;  для &amp;lt;tex&amp;gt;1 \leqslant i &amp;lt; n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Упорядочим множество нетерминалов по возрастанию индексов. Легко заметить, что правила для &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; будут представлять из себя все двоичные вектора длины &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, а значит размер грамматики будет экспоненциальным.&lt;br /&gt;
===Порядок выбора нетерминалов===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Говорят, что нетерминал &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} '''прямой левый вывод''' (англ. ''direct left corner'') из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если существует правило вида &amp;lt;tex&amp;gt;A \to X\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Левый вывод''' (англ. ''left corner'') {{---}} [[Транзитивное_отношение|транзитивное]], [[Рефлексивное_отношение|рефлексивное]] замыкание отношения «быть прямым левым выводом».&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&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;j &amp;lt; i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_j&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_i&amp;lt;/tex&amp;gt; на все выводы из &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&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_i&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_j&amp;lt;/tex&amp;gt; {{---}} левый вывод из &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Перестанем добавлять бесполезные выводы, которые не участвуют в удалении левой рекурсии, упорядочив нетерминалы так: если &amp;lt;tex&amp;gt;j &amp;lt; i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; {{---}} прямой левый вывод из &amp;lt;tex&amp;gt;A_i&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;.&lt;br /&gt;
Упорядочим их по уменьшению количества различных прямых левых выводов из них.&lt;br /&gt;
&lt;br /&gt;
Так как отношение «быть левым выводом» транзитивно,то если &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; {{---}} прямой левый вывод из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, то каждый левый вывод из С также будет левым выводом из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. А так как отношение «быть левым выводом» рефлексивно, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; явлеяется своим левым выводом, а значит если &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; {{---}} прямой левый вывод из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} он должен следовать за &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; в упорядоченном множестве, если только &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; не является левым выводом из &amp;lt;tex&amp;gt;C&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;A \to S\alpha &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;S \to S\beta \mid A\gamma \mid \beta&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Среди правил &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; непосредственной рекурсии нет, поэтому во время первой итерации внешнего цикла ничего не происходит. &lt;br /&gt;
Во время второй итерации внешнего цикла правило &amp;lt;tex&amp;gt; S \to A\gamma &amp;lt;/tex&amp;gt; переходит в &amp;lt;tex&amp;gt; S \to S\alpha\gamma &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Грамматика имеет вид &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \to S\alpha &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;S \to{S}{\beta} \mid {S}{\alpha}{\gamma} \mid \beta&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Устраняем левую рекурсию для &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S \to\beta{S_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; {S_1} \to\beta{S_1} \mid \alpha\gamma{S_1} \mid {\beta} \mid {\alpha}{\gamma} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также  ==&lt;br /&gt;
* [[Контекстно-свободные_грамматики,_вывод,_лево-_и_правосторонний_вывод,_дерево_разбора|Контекстно-свободные грамматики]]&lt;br /&gt;
* [[Нормальная_форма_Хомского|Нормальная форма Хомского]]&lt;br /&gt;
* [[Удаление_eps-правил_из_грамматики | Удаления &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt;-правил из грамматики]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' — '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
* ''Robert C. Moore'' — [http://aclweb.org/anthology-new/A/A00/A00-2033.pdf Removing  Left  Recursion  from  Context-Free  Grammars ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Нормальные формы КС-грамматик]]&lt;/div&gt;</summary>
		<author><name>Ch13</name></author>	</entry>

	</feed>