Город: Санкт-Петербург Новосибирск Казань Язык: Русский English

Формальные языки и синтаксический анализ
Санкт-Петербург / осень 2009, посмотреть все семестры

Запишитесь на курс, чтобы получать уведомления и иметь возможность сдавать домашние задания. Для записи требуется регистрация на сайте.
Перейти к регистрации Войти

Теория формальных языков изучает математические модели синтаксиса. Языки, естественные или искусственные, задаются формальными грамматиками, описывающими построение синтаксически правильных предложений. Руководствуясь грамматикой, алгоритм синтаксического анализа производит разбор предложений на данном языке. В курсе представлены математические основы формальных грамматик, с особенным упором на алгоритмы синтаксического анализа и их вычислительную сложность.

Общая литература к курсу:

Задачи для получения оценки за курс:

<small>(на тройку надо полностью решить две из пяти задач, на четвёрку --- три, на пятёрку --- четыре)</small>

  • 1. Построить бесконтекстную грамматику для языка \(L=\{a^{k_1}b \ldots a^{k_\ell}b \mid \ell \geqslant 1, \; k_i \geqslant 0, \; \exists i: k_i=i\}\). Показать, что построенная грамматика неоднозначна.
  • 2. Построить однозначную булеву грамматику для языка \(L\) из первой задачи.
  • 3. Показать, что если языки \(K\) и \(L\) над алфавитом \(\{a, b\}\) --- линейные конъюнктивные (т.е., представимы конъюнктивной грамматикой с правилами вида \(A \to u_1 B_1 v_1 \& \ldots \& u_n B_n v_n\) и \(A \to w\)), то язык \(KcL\) (где \(c\) --- дополнительный символ) --- тоже линейный конъюнктивный.
  • 4. Для произвольной булевой грамматики \(G\) построить алгоритм, который, получив на входе строку \(w\), будет определять, порождает ли \(G\) хотя бы один из циклических сдвигов строки \(w\). Время работы алгоритма должно быть не более чем кубическим от длины \(w\). <small>(на пятёрку с плюсом: быстрее, чем кубическим) (на четвёрку сойдёт время \(n^{3.81}\), для этого нетрудно приспособить готовый алгоритм из лекций) (замечание: замкнуты ли булевы грамматики относительно циклического сдвига --- неизвестно)</small>
  • 5. Доказать, что для конъюнктивных грамматик неразрешима следующая задача: по данной конъюнктивной грамматике над алфавитом \(\{a, b\}\) определить, порождает ли она в точности язык \(\{a^n b^n | n \geqslant 0\}\), или же какой-то иной язык. <small>(на четвёрку --- то же самое для языка \(\{\epsilon\}\)).</small>

Примеры задач для дальнейших исследований

<small>(уровня хорошей дипломной работы или неплохой статьи, написанной аспирантом)</small>

  • Рассмотреть LL(k) линейные булевы грамматики и проверить, могут ли они задать какой-либо язык, не представимый булевой формулой над LL(1) линейными бесконтекстными языками. (предположительно, нет)
  • Научиться строить однозначные конъюнктивные грамматики над однобуквенным алфавитом для широких классов языков. Для этого надо сперва обстоятельно изучить существующие теоремы о построении неоднозначных конъюнктивных грамматик (Еж, DLT 2007; Еж и Охотин, CSR 2007, STACS 2008).
  • Рассмотреть магазинные автоматы с явными метками (visibly pushdown automata, Алур и Мадхусудан, 2004) и научиться преобразовывать их к линейным конъюнктивным грамматикам.

Большая практическая задача

    Разработать практический генератор синтаксических анализаторов для булевых грамматик. Вся теория есть, алгоритмы построены, их правильность доказана, пробные реализации успешно работают. Осталось разработать и написать программу, которой было бы удобно пользоваться программистам.

Большие теоретические задачи (за каждую определена награда в 360 канадских долларов)

  • Научиться доказывать для некоторых языков, что эти языки не порождаются никакой булевой грамматикой.
  • Определить, замкнуты ли конъюнктивные языки относительно дополнения.

Дата и время Занятие Место Материалы
10 октября
17:20–18:55
Лекция 1, Лекция ПОМИ РАН Нет
10 октября
19:05–20:40
Лекция 2, Лекция ПОМИ РАН Нет
11 октября
11:15–12:50
Лекция 3, Лекция ПОМИ РАН Нет
11 октября
13:00–14:35
Лекция 4, Лекция ПОМИ РАН Нет
11 октября
15:35–17:05
Лекция 5, Лекция ПОМИ РАН Нет
17 октября
17:20–18:50
Лекция 6, Лекция ПОМИ РАН Нет
17 октября
19:05–20:35
Лекция 7, Лекция ПОМИ РАН Нет
18 октября
11:15–12:45
Лекция 8, Лекция ПОМИ РАН Нет
18 октября
13:00–14:30
Лекция 9, Лекция ПОМИ РАН Нет
18 октября
15:35–17:05
Лекция 10, Лекция ПОМИ РАН Нет