Математическая теория формальных языков

Неоднозначность в контекстно-свободных грамматиках

Разбить на страницы
Показывать лекцию целиком

Перейдем к более богатому классу языков - к контекстно-свободным языкам. Они находят применение в разнообразных программных продуктах, таких как компиляторы, средства форматирования исходного кода, средства статического анализа программ, синтаксические редакторы, системы верстки, программы просмотра форматированного текста, поисковые системы.

Начнем рассмотрение контекстно-свободных языков с введения понятия деревьев вывода, что позволит определить важное для компьютерных приложений понятие однозначности контекстно-свободной грамматики. Чтобы не вдаваться в детали определения изоморфизма ориентированных деревьев, будем использовать в определении однозначности понятие левостороннего вывода (раздел 7.2). Соответствие деревьев вывода и левосторонних (а также правосторонних) выводов понадобится также в лекции 13.

Из класса всех контекстно-свободных языков можно выделить подкласс тех языков, для которых существует хотя бы одна однозначная грамматика. В разделе 7.3* доказывается, что все праволинейные (то есть автоматные) языки принадлежат этому подклассу.

В последнем разделе этой лекции приводятся важные конкретные примеры однозначных контекстно-свободных грамматик, моделирующих системы правильно вложенных скобок и польскую (префиксную) запись выражений.

7.1. Деревья вывода

Определение 7.1.1. Выводам в контекстно-свободной грамматике соответствуют так называемые деревья вывода ( деревья разбора, derivation tree, parse tree) - некоторые упорядоченные деревья, вершины которых помечены символами алфавита $$N \cup \Sigma$$. Корень дерева отвечает начальному символу. Каждому символу слова w1, на которое заменяется начальный символ на первом шаге вывода, ставится в соответствие вершина дерева, и к ней проводится дуга из корня. Полученные таким образом непосредственные потомки корня упорядочены согласно порядку их меток в слове w1. Для тех из полученных вершин, которые помечены символами из множества N, делается аналогичное построение, и т. д.

Кроной (yield) дерева вывода называется слово, записанное в вершинах, помеченных символами из алфавита $$\Sigma$$.

Пример 7.1.2. Рассмотрим контекстно-свободную грамматику$$\begin{align*} S \; {\to} \; SS , \\ S \; {\to} \; ab , \\ S \; {\to} \; aSb . \end{align*}$$ Выводу $$S \pRightarrow SS \pRightarrow Sab \pRightarrow SSab \pRightarrow abSab \pRightarrow ababab $$ соответствует следующее дерево вывода.$$\xymatrix @=6pt { S \ar[dllll]\ar[drr] \\ S \ar[dll]\ar[drr] S \ar[dl]\ar[dr] \\ S \ar[dl]\ar[dr] S \ar[dl]\ar[dr] a b \\ a b a b }$$ Крона этого дерева вывода - ababab.

Упражнение 7.1.3. Перечислить все деревья вывода в грамматике$$\begin{align*} S \; {\to} \; a , \\ S \; {\to} \; b R , \\ R \; {\to} \; c T T , \\ T \; {\to} \; a , \\ T \; {\to} \; b a . \end{align*}$$

Упражнение 7.1.4. Существует ли праволинейная грамматика без $$\varepsilon$$ -правил, в которой некоторое слово имеет бесконечно много выводов?

7.2. Однозначные контекстно-свободные грамматики

Определение 7.2.1. Вывод в контекстно-свободной грамматике называется левосторонним ( левым, leftmost derivation), если на каждом шаге вывода заменяется самое левое из всех вхождений вспомогательных символов (то есть каждый шаг вывода имеет вид $$u A \theta \Rightarrow u \beta \theta$$, где $$( A \tto \beta ) \in P$$, $$u \in \Sigma ^*$$ и $$\theta \in \ns ^*$$ ). Иногда в левосторонних выводах вместо $$\Rightarrow$$ пишут \lmarrow. Правосторонний ( правый ) вывод определяется аналогично. В правосторонних выводах вместо $$\Rightarrow$$ пишут \rmarrow.

Пример 7.2.2. Вывод$$S \Rightarrow SS \Rightarrow Sab \Rightarrow SSab \Rightarrow abSab \Rightarrow ababab$$ из примера 7.1.2 не является левосторонним.

Лемма 7.2.3. Для каждого слова, выводимого в контекстно-свободной грамматике, существует левосторонний вывод.

Лемма 7.2.4. Пусть G - контекстно-свободная грамматика над алфавитом $$\Sigma$$. Пусть $$w \in \Sigma ^*$$. Тогда существует взаимно-однозначное соответствие между левосторонними выводами слова w в грамматике G и деревьями вывода в грамматике G, кроной которых является w.

Пример 7.2.5. Рассмотрим дерево вывода из примера 7.1.2. Ему соответствует левосторонний вывод$$S \mymathrel{\lmarrow} SS \mymathrel{\lmarrow} SSS \mymathrel{\lmarrow} abSS \mymathrel{\lmarrow} ababS \mymathrel{\lmarrow} ababab .$$

Определение 7.2.6. Контекстно-свободная грамматика называется неоднозначной (ambiguous), если существует слово, которое имеет два или более левосторонних вывода (устаревший термин - неопределенная грамматика). В противном случае контекстно-свободная грамматика называется однозначной (unambiguous).

Пример 7.2.7. Контекстно-свободная грамматика из примера 7.1.2 неоднозначна. Слово ababab имеет два левосторонних вывода:$$S \mymathrel{\lmarrow} SS \mymathrel{\lmarrow} SSS \mymathrel{\lmarrow} abSS \mymathrel{\lmarrow} ababS \mymathrel{\lmarrow} ababab$$ и$$S \mymathrel{\lmarrow} SS \mymathrel{\lmarrow} abS \mymathrel{\lmarrow} abSS \mymathrel{\lmarrow} ababS \mymathrel{\lmarrow} ababab .$$

Пример 7.2.8. Пусть $$\Sigma = \{ \trm{p} , \trm{\#} , \trm{)} , \trm{(} , \trm{\lnot} , \trm{\land} , \trm{\lor} \}$$. Контекстно-свободная грамматика$$\begin{align*} S \; {\to} \; S \trm{\lor} D , C \; {\to} \; \trm{\lnot} C , \\ S \; {\to} \; D , C \; {\to} \; \trm{(} S \trm{)} , \\ D \; {\to} \; D \trm{\land} C , C \; {\to} \; V , \\ D \; {\to} \; C , V \; {\to} \; V \trm{\#} , \\ V \; {\to} \; \trm{p} \end{align*}$$ порождает множество всех булевых формул, составленных из переменных p, p#, p##, ..., с помощью скобок и операторов $$\trm{\lnot}$$, $$\trm{\land}$$ и $$\trm{\lor}$$. Эта грамматика является однозначной.

Определение 7.2.9. Контекстно-свободный язык называется существенно неоднозначным (inherently ambiguous), если каждая контекстно-свободная грамматика, порождающая этот язык, является неоднозначной.

Пример 7.2.10. Язык, порождаемый контекстно-свободной грамматикой из примера 7.1.2, не является существенно неоднозначным. Он порождается однозначной грамматикой$$\begin{align*} S \; {\to} \; TS , \\ S \; {\to} \; T , \\ T \; {\to} \; ab , \\ T \; {\to} \; aSb . \end{align*}$$

Пример 7.2.11. Пусть $$\Sigma = \{ a , b , c \}$$. Контекстно-свободный язык {akbmcn | k = m или m = n} является существенно неоднозначным. Доказательство этого факта можно найти в [АхоУль, с. 234-236].

Упражнение 7.2.12. Однозначна ли контекстно-свободная грамматика$$\begin{align*} K \; {\to} \; a , \\ K \; {\to} \; b , \\ K \; {\to} \; K \trm{+} K ,\\ K \; {\to} \; K \trm{-} K \end{align*}$$ с алфавитом $$\Sigma = \{a,b,\trm{+},\trm{-}\}$$?

Упражнение 7.2.13. Однозначна ли контекстно-свободная грамматика$$\begin{align*} K \; {\to} \; a , \\ K \; {\to} \; b , \\ K \; {\to} \; \trm{+} K K , \\ K \; {\to} \; \trm{-} K K \end{align*}$$ с алфавитом $$\Sigma = \{a,b,\trm{+},\trm{-}\}$$?

Упражнение 7.2.14. Однозначна ли контекстно-свободная грамматика$$\begin{align*} K \; {\to} \; a , \\ K \; {\to} \; b , \\ K \; {\to} \; \trm{(} K \trm{+} K \trm{)} , \\ K \; {\to} \; \trm{(} K \trm{-} K \trm{)} \end{align*}$$ с алфавитом $$\Sigma = \{a,b,\trm{+},\trm{-},\trm{)},\trm{(}\}$$?

Упражнение 7.2.15. Однозначна ли контекстно-свободная грамматика$$\begin{align*} E \; {\to} \; E c E , \\ E \; {\to} \; E d E , \\ E \; {\to} \; a E b , \\ E \; {\to} \; i ? \end{align*}$$

Упражнение 7.2.16.Найти однозначную контекстно-свободную грамматику, эквивалентную грамматике$$\begin{align*} S \; {\to} \; a S , \\ S \; {\to} \; a S b , \\ S \; {\to} \; c . \end{align*}$$

Упражнение 7.2.17.Найти однозначную контекстно-свободную грамматику, эквивалентную грамматике$$\begin{align*} S \; {\to} \; a S aaaa , \\ S \; {\to} \; a S aa , \\ S \; {\to} \; aa S a , \\ S \; {\to} \; b . \end{align*}$$

7.3*. Однозначные праволинейные грамматики

Теорема 7.3.1. Каждый праволинейный язык порождается некоторой однозначной праволинейной грамматикой. Другими словами, ни один праволинейный язык не является существенно неоднозначным.

Доказательство. Согласно теоремам 2.4.3 и 2.7.1 исходный язык распознается некоторым детерминированным конечным автоматом. Применив к нему конструкцию из доказательства теоремы 2.4.1, получим однозначную праволинейную грамматику.

Замечание 7.3.2. Этот факт можно получить также из более общей теоремы 12.2.6 с учетом теоремы 12.2.1.

Упражнение 7.3.3. Найти однозначную праволинейную грамматику, порождающую язык a*((a+b)(a+b))*b*.

Упражнение 7.3.4. Найти однозначную праволинейную грамматику, эквивалентную грамматике$$\begin{align*} S \; {\to} \; T aaa T , \\ S \; {\to} \; T bbb T , \\ T \; {\to} \; a T , \\ T \; {\to} \; b T , \\ T \; {\to} \; \varepsilon . \end{align*}$$

Упражнение 7.3.5. Найти однозначную праволинейную грамматику, эквивалентную грамматике$$\begin{align*} S \; {\to} \; a S , T \; {\to} \; ab Z , \\ S \; {\to} \; b S , T \; {\to} \; bb Z , \\ S \; {\to} \; aa T , Z \; {\to} \; a Z , \\ S \; {\to} \; ab T , Z \; {\to} \; b Z , \\ Z \; {\to} \; \varepsilon . \end{align*}$$

Упражнение 7.3.6. Существует ли праволинейная грамматика в нормальной форме с n вспомогательными символами, не эквивалентная ни одной однозначной праволинейной грамматике с количеством вспомогательных символов 2n - 1?

7.4. Языки Дика и Лукасевича

Определение 7.4.1. Языком Дика (Dyck language) над 2n буквами называется контекстно-свободный язык над алфавитом {a1,b1,a2,b2,...,an,bn}, порождаемый грамматикой$$\begin{align*} S \; {\to} \; \varepsilon \\ S \; {\to} \; a_1 S b_1 S \\ \vdots \\ S \; {\to} \; a_n S b_n S . \end{align*}$$

Замечание 7.4.2. Словами этого языка являются последовательности правильно вложенных скобок n типов (если считать символ ai левой скобкой, а символ bi соответствующей правой скобкой).

Теорема 7.4.3. Слово w над алфавитом {a,b} выводится в грамматике$$\begin{align*} S \; {\to} \; \varepsilon , \\ S \; {\to} \; a S b S \end{align*}$$ тогда и только тогда, когда$$| w |_{a} = | w |_{b}$$ и для всех слов $$x \prefix w$$ выполняется неравенство$$| x |_{a} \geq | x |_{b} .$$

Теорема 7.4.4. При любом положительном целом n грамматика из определения 7.4.1 является однозначной.

Определение 7.4.5. Языком Лукасевича (Lukasiewicz language) над n + 1 буквами называется контекстно-свободный язык над алфавитом {a0,a1,...,an}, порождаемый грамматикой$$\begin{align*} S \; {\to} \; a_0 , \\ S \; {\to} \; a_1 S , \\ S \; {\to} \; a_2 S S , \\ \vdots \\ S \; {\to} \; a_n S^n . \end{align*}$$

Теорема 7.4.6. Слово w над алфавитом {a0,a1,...,an} принадлежит языку Лукасевича над n + 1 буквами тогда и только тогда, когда$$\sum_{i=0}^n (i-1) | w |_{a_i} = -1$$ и для всех слов $$x \prefix w$$, кроме x = w, выполняется неравенство$$\sum_{i=0}^n (i-1) | x |_{a_i} \geq 0 .$$

Теорема 7.4.7. При любом $$n \in \mathbb{N}$$ грамматика из определения 7.4.5 является однозначной.

Упражнение 7.4.8. Принадлежит ли слово aababb языку, порождаемому грамматикой$$\begin{align*} S \; {\to} \; a S b S , \\ S \; {\to} \; \varepsilon ? \end{align*}$$

Упражнение 7.4.9. Принадлежит ли слово cacbcbbacacccaaaacabcaa языку, порождаемому грамматикой$$\begin{align*} S \; {\to} \; a , \\ S \; {\to} \; b S , \\ S \; {\to} \; c S S ? \end{align*}$$

Упражнение 7.4.10. Эквивалентны ли грамматика$$\begin{align*} T \; {\to} \; a , \\ T \; {\to} \; T T , \\ T \; {\to} \; T T b ? \end{align*}$$ и грамматика$$\begin{align*} R \; {\to} \; a , \\ R \; {\to} \; R a , \\ R \; {\to} \; R R b ? \end{align*}$$

Упражнение 7.4.11. Описать язык, порождаемый грамматикой$$\begin{align*} F \; {\to} \; a b , \\ F \; {\to} \; a F b, \\ F \; {\to} \; F F . \end{align*}$$

Упражнение 7.4.12. Описать язык, порождаемый грамматикой$$\begin{align*} F \; {\to} \; a , \\ F \; {\to} \; b F, \\ F \; {\to} \; c F F, \\ F \; {\to} \; d F F F . \end{align*}$$

Упражнение 7.4.13. Найти однозначную контекстно-свободную грамматику, порождающую язык $$\{ w \in \{a,b\}^* \mid | w |_a \geq | w |_b \}$$.

Страницы:

Перейдем к более богатому классу языков - к контекстно-свободным языкам. Они находят применение в разнообразных программных продуктах, таких как компиляторы, средства форматирования исходного кода, средства статического анализа программ, синтаксические редакторы, системы верстки, программы просмотра форматированного текста, поисковые системы.

Начнем рассмотрение контекстно-свободных языков с введения понятия деревьев вывода, что позволит определить важное для компьютерных приложений понятие однозначности контекстно-свободной грамматики. Чтобы не вдаваться в детали определения изоморфизма ориентированных деревьев, будем использовать в определении однозначности понятие левостороннего вывода (раздел 7.2). Соответствие деревьев вывода и левосторонних (а также правосторонних) выводов понадобится также в лекции 13.

Из класса всех контекстно-свободных языков можно выделить подкласс тех языков, для которых существует хотя бы одна однозначная грамматика. В разделе 7.3* доказывается, что все праволинейные (то есть автоматные) языки принадлежат этому подклассу.

В последнем разделе этой лекции приводятся важные конкретные примеры однозначных контекстно-свободных грамматик, моделирующих системы правильно вложенных скобок и польскую (префиксную) запись выражений.

7.1. Деревья вывода

Определение 7.1.1. Выводам в контекстно-свободной грамматике соответствуют так называемые деревья вывода ( деревья разбора, derivation tree, parse tree) - некоторые упорядоченные деревья, вершины которых помечены символами алфавита $$N \cup \Sigma$$. Корень дерева отвечает начальному символу. Каждому символу слова w1, на которое заменяется начальный символ на первом шаге вывода, ставится в соответствие вершина дерева, и к ней проводится дуга из корня. Полученные таким образом непосредственные потомки корня упорядочены согласно порядку их меток в слове w1. Для тех из полученных вершин, которые помечены символами из множества N, делается аналогичное построение, и т. д.

Кроной (yield) дерева вывода называется слово, записанное в вершинах, помеченных символами из алфавита $$\Sigma$$.

Пример 7.1.2. Рассмотрим контекстно-свободную грамматику$$\begin{align*} S \; {\to} \; SS , \\ S \; {\to} \; ab , \\ S \; {\to} \; aSb . \end{align*}$$ Выводу $$S \pRightarrow SS \pRightarrow Sab \pRightarrow SSab \pRightarrow abSab \pRightarrow ababab $$ соответствует следующее дерево вывода.$$\xymatrix @=6pt { S \ar[dllll]\ar[drr] \\ S \ar[dll]\ar[drr] S \ar[dl]\ar[dr] \\ S \ar[dl]\ar[dr] S \ar[dl]\ar[dr] a b \\ a b a b }$$ Крона этого дерева вывода - ababab.

Упражнение 7.1.3. Перечислить все деревья вывода в грамматике$$\begin{align*} S \; {\to} \; a , \\ S \; {\to} \; b R , \\ R \; {\to} \; c T T , \\ T \; {\to} \; a , \\ T \; {\to} \; b a . \end{align*}$$

Упражнение 7.1.4. Существует ли праволинейная грамматика без $$\varepsilon$$ -правил, в которой некоторое слово имеет бесконечно много выводов?

7.2. Однозначные контекстно-свободные грамматики

Определение 7.2.1. Вывод в контекстно-свободной грамматике называется левосторонним ( левым, leftmost derivation), если на каждом шаге вывода заменяется самое левое из всех вхождений вспомогательных символов (то есть каждый шаг вывода имеет вид $$u A \theta \Rightarrow u \beta \theta$$, где $$( A \tto \beta ) \in P$$, $$u \in \Sigma ^*$$ и $$\theta \in \ns ^*$$ ). Иногда в левосторонних выводах вместо $$\Rightarrow$$ пишут \lmarrow. Правосторонний ( правый ) вывод определяется аналогично. В правосторонних выводах вместо $$\Rightarrow$$ пишут \rmarrow.

Пример 7.2.2. Вывод$$S \Rightarrow SS \Rightarrow Sab \Rightarrow SSab \Rightarrow abSab \Rightarrow ababab$$ из примера 7.1.2 не является левосторонним.

Лемма 7.2.3. Для каждого слова, выводимого в контекстно-свободной грамматике, существует левосторонний вывод.

Лемма 7.2.4. Пусть G - контекстно-свободная грамматика над алфавитом $$\Sigma$$. Пусть $$w \in \Sigma ^*$$. Тогда существует взаимно-однозначное соответствие между левосторонними выводами слова w в грамматике G и деревьями вывода в грамматике G, кроной которых является w.

Пример 7.2.5. Рассмотрим дерево вывода из примера 7.1.2. Ему соответствует левосторонний вывод$$S \mymathrel{\lmarrow} SS \mymathrel{\lmarrow} SSS \mymathrel{\lmarrow} abSS \mymathrel{\lmarrow} ababS \mymathrel{\lmarrow} ababab .$$

Определение 7.2.6. Контекстно-свободная грамматика называется неоднозначной (ambiguous), если существует слово, которое имеет два или более левосторонних вывода (устаревший термин - неопределенная грамматика). В противном случае контекстно-свободная грамматика называется однозначной (unambiguous).

Пример 7.2.7. Контекстно-свободная грамматика из примера 7.1.2 неоднозначна. Слово ababab имеет два левосторонних вывода:$$S \mymathrel{\lmarrow} SS \mymathrel{\lmarrow} SSS \mymathrel{\lmarrow} abSS \mymathrel{\lmarrow} ababS \mymathrel{\lmarrow} ababab$$ и$$S \mymathrel{\lmarrow} SS \mymathrel{\lmarrow} abS \mymathrel{\lmarrow} abSS \mymathrel{\lmarrow} ababS \mymathrel{\lmarrow} ababab .$$

Пример 7.2.8. Пусть $$\Sigma = \{ \trm{p} , \trm{\#} , \trm{)} , \trm{(} , \trm{\lnot} , \trm{\land} , \trm{\lor} \}$$. Контекстно-свободная грамматика$$\begin{align*} S \; {\to} \; S \trm{\lor} D , C \; {\to} \; \trm{\lnot} C , \\ S \; {\to} \; D , C \; {\to} \; \trm{(} S \trm{)} , \\ D \; {\to} \; D \trm{\land} C , C \; {\to} \; V , \\ D \; {\to} \; C , V \; {\to} \; V \trm{\#} , \\ V \; {\to} \; \trm{p} \end{align*}$$ порождает множество всех булевых формул, составленных из переменных p, p#, p##, ..., с помощью скобок и операторов $$\trm{\lnot}$$, $$\trm{\land}$$ и $$\trm{\lor}$$. Эта грамматика является однозначной.

Определение 7.2.9. Контекстно-свободный язык называется существенно неоднозначным (inherently ambiguous), если каждая контекстно-свободная грамматика, порождающая этот язык, является неоднозначной.

Пример 7.2.10. Язык, порождаемый контекстно-свободной грамматикой из примера 7.1.2, не является существенно неоднозначным. Он порождается однозначной грамматикой$$\begin{align*} S \; {\to} \; TS , \\ S \; {\to} \; T , \\ T \; {\to} \; ab , \\ T \; {\to} \; aSb . \end{align*}$$

Пример 7.2.11. Пусть $$\Sigma = \{ a , b , c \}$$. Контекстно-свободный язык {akbmcn | k = m или m = n} является существенно неоднозначным. Доказательство этого факта можно найти в [АхоУль, с. 234-236].

Упражнение 7.2.12. Однозначна ли контекстно-свободная грамматика$$\begin{align*} K \; {\to} \; a , \\ K \; {\to} \; b , \\ K \; {\to} \; K \trm{+} K ,\\ K \; {\to} \; K \trm{-} K \end{align*}$$ с алфавитом $$\Sigma = \{a,b,\trm{+},\trm{-}\}$$?

Упражнение 7.2.13. Однозначна ли контекстно-свободная грамматика$$\begin{align*} K \; {\to} \; a , \\ K \; {\to} \; b , \\ K \; {\to} \; \trm{+} K K , \\ K \; {\to} \; \trm{-} K K \end{align*}$$ с алфавитом $$\Sigma = \{a,b,\trm{+},\trm{-}\}$$?

Упражнение 7.2.14. Однозначна ли контекстно-свободная грамматика$$\begin{align*} K \; {\to} \; a , \\ K \; {\to} \; b , \\ K \; {\to} \; \trm{(} K \trm{+} K \trm{)} , \\ K \; {\to} \; \trm{(} K \trm{-} K \trm{)} \end{align*}$$ с алфавитом $$\Sigma = \{a,b,\trm{+},\trm{-},\trm{)},\trm{(}\}$$?

Упражнение 7.2.15. Однозначна ли контекстно-свободная грамматика$$\begin{align*} E \; {\to} \; E c E , \\ E \; {\to} \; E d E , \\ E \; {\to} \; a E b , \\ E \; {\to} \; i ? \end{align*}$$

Упражнение 7.2.16.Найти однозначную контекстно-свободную грамматику, эквивалентную грамматике$$\begin{align*} S \; {\to} \; a S , \\ S \; {\to} \; a S b , \\ S \; {\to} \; c . \end{align*}$$

Упражнение 7.2.17.Найти однозначную контекстно-свободную грамматику, эквивалентную грамматике$$\begin{align*} S \; {\to} \; a S aaaa , \\ S \; {\to} \; a S aa , \\ S \; {\to} \; aa S a , \\ S \; {\to} \; b . \end{align*}$$

7.3*. Однозначные праволинейные грамматики

Теорема 7.3.1. Каждый праволинейный язык порождается некоторой однозначной праволинейной грамматикой. Другими словами, ни один праволинейный язык не является существенно неоднозначным.

Доказательство. Согласно теоремам 2.4.3 и 2.7.1 исходный язык распознается некоторым детерминированным конечным автоматом. Применив к нему конструкцию из доказательства теоремы 2.4.1, получим однозначную праволинейную грамматику.

Замечание 7.3.2. Этот факт можно получить также из более общей теоремы 12.2.6 с учетом теоремы 12.2.1.

Упражнение 7.3.3. Найти однозначную праволинейную грамматику, порождающую язык a*((a+b)(a+b))*b*.

Упражнение 7.3.4. Найти однозначную праволинейную грамматику, эквивалентную грамматике$$\begin{align*} S \; {\to} \; T aaa T , \\ S \; {\to} \; T bbb T , \\ T \; {\to} \; a T , \\ T \; {\to} \; b T , \\ T \; {\to} \; \varepsilon . \end{align*}$$

Упражнение 7.3.5. Найти однозначную праволинейную грамматику, эквивалентную грамматике$$\begin{align*} S \; {\to} \; a S , T \; {\to} \; ab Z , \\ S \; {\to} \; b S , T \; {\to} \; bb Z , \\ S \; {\to} \; aa T , Z \; {\to} \; a Z , \\ S \; {\to} \; ab T , Z \; {\to} \; b Z , \\ Z \; {\to} \; \varepsilon . \end{align*}$$

Упражнение 7.3.6. Существует ли праволинейная грамматика в нормальной форме с n вспомогательными символами, не эквивалентная ни одной однозначной праволинейной грамматике с количеством вспомогательных символов 2n - 1?

7.4. Языки Дика и Лукасевича

Определение 7.4.1. Языком Дика (Dyck language) над 2n буквами называется контекстно-свободный язык над алфавитом {a1,b1,a2,b2,...,an,bn}, порождаемый грамматикой$$\begin{align*} S \; {\to} \; \varepsilon \\ S \; {\to} \; a_1 S b_1 S \\ \vdots \\ S \; {\to} \; a_n S b_n S . \end{align*}$$

Замечание 7.4.2. Словами этого языка являются последовательности правильно вложенных скобок n типов (если считать символ ai левой скобкой, а символ bi соответствующей правой скобкой).

Теорема 7.4.3. Слово w над алфавитом {a,b} выводится в грамматике$$\begin{align*} S \; {\to} \; \varepsilon , \\ S \; {\to} \; a S b S \end{align*}$$ тогда и только тогда, когда$$| w |_{a} = | w |_{b}$$ и для всех слов $$x \prefix w$$ выполняется неравенство$$| x |_{a} \geq | x |_{b} .$$

Теорема 7.4.4. При любом положительном целом n грамматика из определения 7.4.1 является однозначной.

Определение 7.4.5. Языком Лукасевича (Lukasiewicz language) над n + 1 буквами называется контекстно-свободный язык над алфавитом {a0,a1,...,an}, порождаемый грамматикой$$\begin{align*} S \; {\to} \; a_0 , \\ S \; {\to} \; a_1 S , \\ S \; {\to} \; a_2 S S , \\ \vdots \\ S \; {\to} \; a_n S^n . \end{align*}$$

Теорема 7.4.6. Слово w над алфавитом {a0,a1,...,an} принадлежит языку Лукасевича над n + 1 буквами тогда и только тогда, когда$$\sum_{i=0}^n (i-1) | w |_{a_i} = -1$$ и для всех слов $$x \prefix w$$, кроме x = w, выполняется неравенство$$\sum_{i=0}^n (i-1) | x |_{a_i} \geq 0 .$$

Теорема 7.4.7. При любом $$n \in \mathbb{N}$$ грамматика из определения 7.4.5 является однозначной.

Упражнение 7.4.8. Принадлежит ли слово aababb языку, порождаемому грамматикой$$\begin{align*} S \; {\to} \; a S b S , \\ S \; {\to} \; \varepsilon ? \end{align*}$$

Упражнение 7.4.9. Принадлежит ли слово cacbcbbacacccaaaacabcaa языку, порождаемому грамматикой$$\begin{align*} S \; {\to} \; a , \\ S \; {\to} \; b S , \\ S \; {\to} \; c S S ? \end{align*}$$

Упражнение 7.4.10. Эквивалентны ли грамматика$$\begin{align*} T \; {\to} \; a , \\ T \; {\to} \; T T , \\ T \; {\to} \; T T b ? \end{align*}$$ и грамматика$$\begin{align*} R \; {\to} \; a , \\ R \; {\to} \; R a , \\ R \; {\to} \; R R b ? \end{align*}$$

Упражнение 7.4.11. Описать язык, порождаемый грамматикой$$\begin{align*} F \; {\to} \; a b , \\ F \; {\to} \; a F b, \\ F \; {\to} \; F F . \end{align*}$$

Упражнение 7.4.12. Описать язык, порождаемый грамматикой$$\begin{align*} F \; {\to} \; a , \\ F \; {\to} \; b F, \\ F \; {\to} \; c F F, \\ F \; {\to} \; d F F F . \end{align*}$$

Упражнение 7.4.13. Найти однозначную контекстно-свободную грамматику, порождающую язык $$\{ w \in \{a,b\}^* \mid | w |_a \geq | w |_b \}$$.

Вернуться к учебному плану