Магазинные автоматы. Восходящий и нисходящий разбор. — КиберПедия 

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Магазинные автоматы. Восходящий и нисходящий разбор.



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

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

При формальном определении конфигурации (мгновенного состояния) МП-автомата удобно считать все содержимое стека словом (в алфавите, в котором перечислены все возможные данные, "умещающиеся" в одной ячейке стека). Прежде чем определить конфигурацию, придется принять произвольное соглашение о том, в каком порядке записывать содержимое стека в этом слове. Например, при LL-разборе верхушка стека находится в начале слова, а при LR — в конце.

 

Недетерминированный конечный автомат (НКА) — по опр-ю есть пятерка

K = (Q, , , S, F), где

Q — конечное мн-во сост-й,

— конечное мн-во допустимых входных символов (входной алфавит),

r(Q) — функция переходов (отображающая множество во множество подмножеств множества Q), определяющая поведение управляющего устройства,

S — мн-во начальных состояний,

F — мн-во конечных состояний.

 

Автомат с магазинной памятью (МП-автомат) — это семерка

M = (Q, , Г, , Z0, q0, F), где

Q — -/-/-;

— -/-/-;

Γ — конечный алфавит магазинных символов;

r (Q´Г*) — ф-я переходов (r (Q´Г*) — мн-во конечных подмн-в );

маркер дна, символ, находящийся в магазине в начальный момент (начальный символ магазина);

— начальное сост-е (напишем q0 или S — разницы нет, общность не нарушается);

— -/-/-.

 

Конфигурация МП-автомата — это тройка (q, w, u), где

— текущее состояние управляющего устройства;

— непрочитанная часть входной цепочки; первый символ цепочки w находится под входной головкой (если w = , то считается, что вся входная лента прочитана);

— содержимое магазина (если u = , то магазин считается пустым).

Начальной конфигурацией МП-автомата M называется конфигурация вида (q0, w, Z0), где (т.е. управляющее устройство находится в начальном состоянии, входная лента содержит цепочку, которую нужно проанализировать, а в магазине имеется только начальный символ Z0).

Заключительной конфигурацией называется конфигурация вида (q, , "), где (т.е. управляющее устройство находится в одном из заключительных состояний, а входная цепочка целиком прочитана).

 

Такт работы МП-автомата M представим в виде бинарного отношения , определенного на конфигурациях:



, если множество d(q, a, Z) содержит (p, v), где , , , и (если верхушка магазина слева).

, и — транзитивное и рефлексивно-транзитивное замыкание отношения , а также его степень k > 0 соответственно.

Говорят, что цепочкаwдопускается МП-автоматом M, если (q0, w, Z0) (q, , u) для некоторых и .

Множество всех цепочек, допускаемых автоматом M, называется языком, допускаемым (распознаваемым, определяемым) автоматом M (обозначается L(M)).

 

Теорема: Язык допускается МП-автоматом тогда и только тогда, когда он допускается опустошением магазина.

Теорема: Язык является контекстно-свободным тогда и только тогда, когда он допускается МП-автоматом.

 

Пример (скобочный автомат):

S ® aSb | e | SS — грамматика.

МПА (детерминированный), основанный на самом простом алгоритме проверки — счётчике открывающих скобок:

(® — направление стека)

® a b e
q0 Z0 q0 Z0a — (отвергаем входное слово) qf "
q0 a q0 aa q0 e

 

Пример (полиндромы):

(Полиндромы — слова, кот. читаются одинаково слева направо и справа налево. Применяются в ДНК-анализе.)

Рассмотрим грамматику для полиндрома с чётным кол-вом букв:

S ® aSa | bSb | e.

Решение:

Прочитали до середины, накапливая a и b в стеке, после — начинаем стирать. Проблема: не знаем, где середина. Спасает то, что можем работать недетерминированно, предполагая середину всегда, когда это возможно.

МПА (недетерм.; Соответствующий язык — тоже недетерм.):

® a b e
q0 Z0 q0 Z0a q0 Z0b qf "
q0 a q0 aa q0 ab
q1 e
q0 b q0 ba q0 bb
q1 e
q1 a q1 e
q1 b q1 e
q1 Z0 qf "

 

Признаки недетерминированности МПА:

1)Наличие в какой-либо клетке таблицы более 1 варианта поведения;

2)Наличие в как-либо строке таблицы (q Г) как переходов, так и e-переходов.

 

Разбор.

Задача разбора состоит в

1)ответе на вопрос, принадлежит ли заданная цепочка языку,

2)(если да) в восстановлении дерева вывода(дерева разбора) для этой цепочки.



Методы построения дерева вывода разбиваются на два больших класса восходящие и нисходящие — в соответствии с порядком построения дерева разбора. В современных компиляторах применяются как нисходящие, так и восходящие методы.

 

2.1. Разбор сверху-вниз (предсказывающий, нисходящий):

Нисходящие методы начинаются с корня дерева и пытаются так его наращивать, чтобы последующие узлы дерева соответствовали синтаксису анализируемого выражения. (Появились сразу после изобретения грамматик.)

Главная задача предсказывающего разбора — определение правила вывода, которое нужно применить к нетерминалу.

LL-разбор:

(1-я L значит, что входную цепочку читаем слева направо, 2-я L — дерево разбора строим слева.)

Шаблоны правил LL-разбора:

1)d(q, e, A) ' (q, a);

2)d(q, a, a) = {(q, e)}.

 

LL-анализатор называется LL(k)-анализатором, если данный анализатор использует предпросмотр на k символов при разборе входного потока. Грамматика, которая может быть распознана LL(k)-анализатором без возвратов к предыдущим символам, называется LL(k)-грамматикой.

 

2.2. Разбор снизу-вверх типа сдвиг-свертка (восходящий):

В процессе разбора снизу-вверх типа свертка-перенос строится дерево разбора входной цепочки, начиная с листьев к корню. Этот процесс можно рассматривать как «свертку» цепочки w к начальному символу грамматики. На каждом шаге свертки подцепочка, которую можно сопоставить правой части некоторого правила вывода, заменяется символом левой части этого правила вывода, и если на каждом шаге выбирается правильная подцепочка, то в обратном порядке прослеживается правосторонний вывод.

Для удобства свёртки (см. дальшв 1-м шаблоне: a) в LR-разборе используется понятие расширенного МПА:

M = (Q, , Г, , Z0, q0, F),

где смысл всех символов тот же, что и для обычного МП-автомата, кроме d, представляющего собой отображение конечного подмножества множества (разница в *) во множество конечных подмножеств множества .

Теорема: Пусть M = (Q, , Г, , Z0, q0, F) — расширенный МП-автомат. Тогда существует МП-автомат M', такой, что L(M') = L(M).

(Т.е. понятия приводятся друг к другу.)

 

LR-разбор:

(L — входная цепочка читается слева направо, R — дерево разбора строится справа.)

Шаблоны правил LR-разбора:

1)d(q, e, a) ' (q, A) — свёртка;

2)d(q, a, e) ' (q, a) — перенос.

Не пишем «=», п.ч. заранее не знаем, будем делать перенос или свёртку.

 

Грамматика называется LR(0)-грамматикой, если в ней нет конфликтов типа сдвиг/свертка и свертка/свертка ни для одного слова S.

Для выбора между сдвигом или сверткой в LR(0)-разборе используется только состояние стека. В LR(k)-разборе учитывается также k первых символов непросмотренной части входной цепочки (т.наз. аванцепочка).

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

СУ-схемы.

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

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

 

Грамматика — это четверка

G = (N, S, P, S), где

N — алфавит нетерминальных символов;

S — алфавит терминальных символов,

P — конечное множество правил вида a®b, где aÎ(NÈS)*N(NÈS)*, bÎ(NÈS)*,

S — начальный знак (или аксиома) грамматики.

 

Cхемой синтаксически управляемого перевода (или трансляции, сокращенно: СУ-схемой) называется пятерка

Tr = (N, S, D, R, S), где

N — конечное мн-во нетерминальных символов (алфавит);

S — конечный входной алфавит;

D — конечный выходной алфавит;

R — конечное мн-во правил перевода вида A ® a, b, где aÎ(NÈS)*, bÎ(NÈD)* и вхождения нетерминалов в цепочку a образуют перестановку вхождений нетерминалов в цепочку b, так что каждому вхождению нетерминала B в цепочку a соответствует некоторое вхождение этого же нетерминала в цепочку b; если нетерминал B встречается более одного раза, для указания соответствия используются верхние целочисленные индексы;

S — начальный символ, выделенный нетерминал из N.

 

Определим выводимую пару (аналог сентенц.формы) в схеме Tr следующим образом:

(1) (S, S) — выводимая пара, в которой символы S соответствуют друг другу;

(2) если (aAb; a'Ab') — выводимая пара, в цепочках которой вхождения A соответствуют друг другу, и A ® g,g’ — правило из R, то (agb; a'g'b') — выводимая пара.

Для обозначения такого вывода одной пары из другой будем пользоваться обозначением Þ: (aAb, a'Ab') Þ (agb, a'g'b'). Рефлексивно-транзитивное замыкание отн-я Þ обозначим Þ*.

Переводом τ(Tr), определяемым СУ-схемой Tr, назовем множество пар

{(x, y) | (S, S)Þ*(x, y), xÎS*, yÎD*}.

 

СУ-схема Tr = (N, S, D, R, S) называется простой, если для каждого правила A ® a, b из R соответствующие друг другу вхождения нетерминалов встречаются в a и b в одном и том же порядке.

Перевод, определяемый простой СУ-схемой, называется простым синтаксически управляемым переводом (простым СУ-переводом).

 

Имея дерево вывода для входной цепочки (полученное ранее (с помощью МПА)), применяем к нему правые части правил СУ-схемы и получаем выходную цепочку. Т.о. СУ-сехма — это алгоритм.

 

Пример (Польская запись: инфиксная форма ® префиксная):

E ® T, T

E ® T+E, +TE

T ® F, F

T ® F*T, +FT

F ® a, a

F ® b, b

F ® (E), E

 

Для префиксной формы $ и более простая однозначная грамматика:

E ® +EE

E ® *EE

E ® a

E ® b

 

Пример ((суффиксная) польская запись ® алгоритм на Assembler’е):

E ® EE+

E ® EE*

E ® a

E ® b

 

Добавим нетерминал I и стартовый:

E ® EE+,

E ® EE*,

E ® I,

I ® a,

I ® b,

S ® IE=,

 

Команды ассемблера:

load, store — загрузить, сохранить в памяти;

push, pop — загрузить из аккумулятора в стек, из стека в аккумулятор;

addsp, mulsp — сложить/умножить то, что в аккумуляторе, с верхушкой стека;

$ — разделитель строк, команд.

Аккумулятор — фактически регистр.

 

E ® E(I)E(II)+, E(I)E(II) pop $ addsp $ push $

E ® E(I)E(II)*, E(I)E(II) pop $ mulsp $ push $

E ® I, I

I ® a, a

I ® b, b

S ® IE=, E pop $ store I $


Методы системного программирования:






Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...





© cyberpedia.su 2017 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав

0.02 с.