Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры [4747 вопросов].doc
Скачиваний:
83
Добавлен:
15.06.2014
Размер:
407.04 Кб
Скачать

8 Распознавание цепочек символов с помощью автоматов с магазинной памятью.

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

Определение. Конфигурацией МП-автомата P называется тройка (q, ω, α), гдеq – текущее состояние управляющего устройства, ω – неиспользованная часть входной цепочки (если ω=ε, то считается, что вся входная цепочка прочитана), α – содержимое магазина (самый левый символ цепочки α считается верхним символом магазина; если α=ε, то магазин считается пустым).

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

9 Грамматики языков. Классификация языков по Хомскому.

Каждая конструкция, которая может быть описана регулярным выражением, может быть описана и грамматикой.

Каждый язык программирования имеет правила, которые предписывают синтаксическую структуру корректных программ. Синтаксис конструкций языка программирования может быть описан с помощью кон­текстно-свободных грамматик или нотации БНФ. Грамматика дает точную и при этом простую для понимания синтаксическую спецификацию языка программирования.

Для некоторых классов грамматик мы можем автоматически построить эффективный синтаксический анализатор, который определяет, корректна ли структура исходной программы.

Правильно построенная грамматика придает языку программирования структуру, которая способствует облегчению трансляции исходной программы в объектный код и выявлению ошибок. Для преобразования описаний трансляции, основанных на грамматике языка, в рабочие программы имеется соответствующий программный инстру­ментарий.

Существует 4 типа грамматик языка (по Холмскому):

регулярные множества (A ->xB, A->x);A – не терминал, х – терминал (AT, xN)

G = <T, N, P, S>T – терминал,N – не терминал,P – правило,S – начальное правило

контекстно-свободные грамматики (КС-грамматики)

A->U*, UT,N

контекстно-зависимые грамматики

V+-> U*, |V+|  |U*|

грамматики без ограничений – грамматики, которые нельзя записать регулярными множествами

10 Контекстно-свободные грамматики. Преобразование КС-грамматик.

Контекстно-свободная грамматика состоит из терминалов, нетерминалов, стартового символа и про­дукций.

Терминалы представляют собой базовые символы, из которых формируются строки. Слово "токен" является синонимом слова "терминал", когда мы говорим о грамма­тиках языков программирования.

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

Продукции грамматики определяют способ, которым терминалы и нетерминалы могут объединяться для создания строк. Каждая продукция состоит из нетерми­нала, за которым следует стрелка (или символ : : =), и строка нетерминалов и терминалов.

Свойства КС – грамматик:

рекурсивность грамматики:

левая рекурсивность при A -> AB*

правая рекурсивность при A -> B*A

грамматика с -правилами (при наличии )

факторизация грамматики:

левая при A -> aB* и B -> aC*

правая при A -> B*a и B -> C*a

Дерево разбора может рассматриваться как графическое представление порождения, из которого удалена информация о порядке замещения. Каждый внутренний узел дерева разбора помечается некоторым нетерминалом A, а до­черние узлы слева направо – символами из правой части продукции, использованной в порождении для замены А. Листья дерева разбора помечены нетерминалами или терми­налами и, будучи прочитаны слева направо, образуют сентенциальную форму, называемую кроной, или границей дерева.

Для того чтобы увидеть взаимосвязь между порождением и деревьями разбора, рас­смотрим любое приведение а1 => а2 =>… => аn, где аi— отдельный нетерминал А. Для каждой сентенциальной формы а, в приведении строим дерево разбора, результатом ко­торого является аi. Этот процесс представляет собой индукцию по i. Базисом служит де­рево для а1= А. которое представляет собой единственный узел, помеченный как A. Для выполнения индукции предположим, что мы уже построили дерево разбора, имеющее крону аi-1 = X1X2...Xk (вспомним, что Xi может означать терминал или нетерминал). Предположим, что аi-1, порождает аi , заменой нетерминала Xj на β = Y1Y2... Yr. Таким образом на i-ом шаге порождения к аi-1 применяется продукция Xj → β порождая a = X1 X2... Xj-1 β Xj+1...Xk.

Для моделирования этого шага находим j-й слева лист в текущем дереве разбора, ко­торый помечен Xj. Мы даем этому листу r дочерних узлов, помеченных Y1,Y2,...,Yr сле­ва направо. В специальном случае r = 0, т.е. β =ε , у j-го листа появляется один дочерний узел, помеченный ε.