Опубликован: 23.07.2006 | Доступ: свободный | Студентов: 2241 / 912 | Оценка: 4.28 / 4.17 | Длительность: 21:37:00
Специальности: Системный архитектор
Лекция 4:

Теория языков

Магазинные автоматы

Магазинные автоматы, известные также как автоматы с магазинной памятью или как МП-автоматы, формально определяются следующим образом.

Определение. МП-автомат - это семерка P = (Q, \Sigma , Г, \delta , q_{0}, Z_{0}, F) , где:

  • Q - конечное множество состояний
  • \Sigma - конечный входной алфавит
  • Г - конечный алфавит магазинных символов
  • \delta -- функция перехода, отображение множества Q \times (\Sigma \cup \{e\}) \times \Gamma в множество конечных подмножеств множества Q \times \Gamma ^\ast
  • q_0 \in Q - начальное состояние управляющего устройства
  • Z_0 \in \Gamma - символ, находящийся в магазине в начальный момент (начальный символ)
  • F\subseteq Q - множество заключительных состояний.

Определение. Конфигурацией МП-автомата P называется тройка (q, \omega , \alpha } \in Q \times \Sigma ^\ast \times \Gamma ^\ast , где q - текущее состояние управляющего устройства, \omega -- неиспользованная часть входной цепочки (если \omega = \varepsilon , то считается, что вся входная цепочка прочитана), \alpha  - содержимое магазина (самый левый символ цепочки \alpha  считается верхним символом магазина; если \alpha =\varepsilon , то магазин считается пустым).

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

Класс языков, распознаваемых МП-автоматами, в точности совпадает с классом языком, задаваемых КС-грамматиками (мы этого доказывать не будем).

Пример магазинного автомата

Рассмотрим магазинный автомат, распознающий язык {\{}0^{n}1^{n} \quad \vert n\ge 0{\}} .

Пусть P = ({\{}q_{0}, q_{1}, q_{2}{\}}, {\{}0,1{\}}, {\{}Z,0{\}}, \delta , q_{0}, Z, {\{}q_{0}{\}}) , где:

\delta (q_{0}, 0, Z) = {\{}(q_{1}, 0Z){\}} \\
\delta (q_{1}, 0, 0) = {\{}(q_{1}, 00){\}} \\
\delta (q_{1}, 1, 0) = {\{}( q_{2}, \varepsilon ){\}}  \\
\delta (q_{2}, 1, 0) = {\{}(q_{2}, \varepsilon ){\}}   \\
\delta (q_{2}, \varepsilon , Z) = {\{}(q_{0}, \varepsilon ){\}} \\

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

Детерминированные МП-автоматы

МП-автоматы обладают одним существенным недостатком - они недетерминированны по своей природе. На практике нам хотелось бы иметь дело с детерминированными автоматами, в которых в каждой конфигурации возможно не более одного такта:

Определение. МП-автомат P = (Q, \Sigma , Г, \delta , q_{0}, Z_{0}, F) называется детерминированным, если для каждых q \in Q и Z \in Г верно одно из следующих утверждений:

  • \delta (q, \alpha , Z) содержит не более одного элемента для каждого a \in \Sigma и \delta (q, \varepsilon , Z) = {\O}
  • \delta (q, \alpha , Z) = {\O} для всех a \in \Sigma и \delta (q, \varepsilon , Z) содержит не более одного элемента

К сожалению, детерминированные МП-автоматы описывают только подмножество всего класса КС-языков - это подмножество называется детерминированными КС-языками. Этот класс языков называют также LR(k)-грамматиками, так как они могут быть однозначно разобраны путем просмотра цепочки слева направо с заглядыванием вперед не более, чем на k символов.

Детерминированные КС-языки, как и весь класс КС-языков, позволяют проверить пустоту определяемого ими языка или принадлежность заданной цепочки языку. Однако, детерминированные КС-языки не обладают некоторыми важными теоретико-множественными свойствами, например, детерминированные КС-языки не замкнуты относительно пересечения, дополнения или объединения (общий класс КС-языков также не замкнут относительно пересечения и дополнения, но замкнут относительно объединения).

Тем не менее, с точки зрения методов компиляции, класс LR(k)-грамматик чрезвычайно важен, так как на нем и некоторых его разновидностях основаны большинство современных средств синтаксического разбора. Мы рассмотрим LR(k)-грамматики в отдельной лекции.