
- •Входные языки сапр и
- •Предисловие
- •1. Языки формулировки задания
- •1.1. Функции. Программ перевода.
- •Общие требования к языкам формулировки задания.
- •1.1.2. Требования к языкам формулировки задания с точки зрения их использования.
- •1.2.Лексический и синтаксический анализ.
- •1.3.Проверка контекста и порождение сценария.
- •2.Теория формальных языков.
- •2.1. Порождающие грамматики
- •2.2. Иерархия распознающих автоматов
- •3. Синтаксис языков программирования.
- •3.1. Основные характеристики языков.
- •3.2. Нормальные формы Бекуса
- •3.3. Определение и общие свойства порождающих грамматик
- •3.4. Контекстно-свободные грамматики
- •3.4.1. Определение дерева вывода.
- •3.4.2. Алгоритм получения скобочной записи синтаксического дерева вывода.
- •3.4.3. Операции над бинарными отношениями.
- •3.5. Автоматные грамматики.
- •3.6. Методы распознавания и анализа языков.
- •3.6.1. Машина Тьюринга как распознающее устройство.
- •3.6.2. Автоматы и преобразователи с магазинной памятью.
- •3.7. Построение анализаторов кс-языков по порождающим грамматикам.
- •3.7.1. Анализаторы предшествования.
- •3.7.2. Lr(k)-анализатор
- •3.7.3. Глобальный анализатор
- •3.8. Контекстные условия языков программирования
3.5. Автоматные грамматики.
Определение: 1) Правило вывода порождающей грамматики будем называть заключительным, если оно имеет вид Ах, где А – нетерминальный символ, а х – терминальная цепочка.
2) Правило вывода порождающей грамматики называется праволинейным (леволинейным), если оно имеет вид АхВ.
3) Не укорачивающую КС-грамматику называют праволинейной (леволинейной), если все ее правила праволинейны (леволинейны) или заключительны.
Лемма 5. По любой праволинейной грамматике может быть построена эквивалентная ей автоматная грамматика. По любой грамматике, включающей лишь правила вида Аа также праволинейные и заключительные правила, может быть построена почти эквивалентная автоматная грамматика.
3.6. Методы распознавания и анализа языков.
3.6.1. Машина Тьюринга как распознающее устройство.
Определение: Машиной Тьюринга называется пятерка следующих объектов: Т=(К, Н, q0, F) (формальное определение машины Тьюринга),
где : К – конечное множество состояний машины;
Н – конечное множество символов рабочей ленты;
КН=, L, RН;
q0 – начальное состояние, q0К;
F – подмножество заключительных состояний, FK;
– функция, отображающая множества КН в семейство всех подмножеств множества К (Н{L, R}).
Информацию, хранимую в памяти машины Тьюринга, и положение управляющей головки удобно представлять в виде так называемой конфигурации машины, которая задается цепочкой символов следующего вида : ai1ai2 ... aik-1q aik ... ain, где ail – символы рабочей ленты, q – состояние машины.
Пусть и – две конфигурации машины Тьюринга.
Запись используется тогда, когда машина может перейти из конфигурации в конфигурацию за один рабочий такт.
Еслимашина переходит из конфигурации в конфигурацию занесколько рабочих тактов, то используется запись .
Определение: Машина Тьюринга вычисляет функцию
f(a), если q0 a ,
где aH*,
l(a)1,
– конфигурация, в которую входит одно из заключительных состояний машины.
Цепочку, полученную из вычеркиванием символа состояния и всех вхождений пустых символов, будем считать значением функции f от аргумента a
Все машины Тьюринга делятся на детерминированные и недетерминированные.
Машина Тьюринга называется детерминированной, если любая ее конфигурация однозначно определяет следующий такт работы машины.
Машина Тьюринга называется недетерминированной, если для некоторых конфигураций такт машины определяется неоднозначно.
Определение: Линейно-ограниченный автомат – это машина Тьюринга, рабочая лента которой ограничена длиной рассматриваемой цепочки. Линейно-ограниченным автоматом называется пятерка следующих объектов: В=(К, Н, q0, F),
где К – непустое множество состояний;
Н – непустое множество символов рабочей ленты, КН=
функция, отображающая множествоКН в семейство всех подмножеств множества КН{L, R, N};
q0 – начальное состояние, q0К;
F – подмножество заключительных состояний, FK\{q0}.
Утверждение: Класс языков, допускаемых линейно-ограниченными автоматами совпадает с классом НС языков.
Определенным недостатком машин Тьюринга при использовании их для распознавания является то обстоятельство, что анализируемая цепочка преобразуется в процессе работы. Удобнее для целей распознавания определить машину Тьюринга так, чтобы она читала распознаваемую цепочку, записанную на входной ленте, слева направо, не меняя эту цепочку. При этом можно считать, что в рабочей ленте в начальный момент никакая информация не содержится, а в процессе работы туда записывается некоторая цепочка, которая преобразуется по правилам, определенным для машин Тьюринга. Различные классы таких «двухленточных» машин Тьюринга обычно используются для распознавания формальных языков, в том числе языков программирования. Приведем их точное определение.
Определение: Машиной Тьюринга с входной лентой называется шестерка следующих объектов:
T’=(K, Н, q0, F),
где К – конечное множество состояний машины;
Н – конечное множество символов рабочей ленты
– конечное множество символов входной ленты.
КНК (Н{L, R}).
q0 – начальное состояние;
F – подмножество заключительных состояний.
Существует еще одна разновидность машин Тьюринга –машина с входной и выходной лентами. Выходная лента служит для записи синтаксической структуры. Определение такой машины подобно определению машины Т’ с той разницей, что на каждом такте работы машина с выходной лентой может на нее записать некоторую цепочку символов. Поэтому вводится в рассмотрение еще одно конечное множество символов – множество символов выходной ленты, а функция имеет следующий вид КНК (Н{L, R})*.