Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Алгоритм Эрли (основные принципы)




 

Алгоритм Эрли основан на том, что для заданной КС-грамматики G(VT,VN,P,S) и входной цепочки  = а1a2…an, VT*, || = n строится последовательность спис­ков ситуаций I0, I1,..., In. Каждая ситуация, входящая в список Ij, для входной це­почки , представляет собой структуру вида [AX1X2...Xk•Xk+1...Xm,i], k: Xk(VNVT), причем правило AX1...Xmпринадлежит множеству правил Р грамматики G, и 0in, 0km. Символ • (“точка”) – это метасимвол особого вида, который не входит ни во множество терминальных (VN), ни во множест­во нетерминальных (VT) символов грамматики, В ситуации этот символ может стоять в любой позиции, в том числе в начале (•X1...Xm) или в конце (X1…Xm•) всей цепочки символов правила A X1...Xm. Если цепочка символов правила пустая (А), то ситуация будет выглядеть так; [A•,i].

Список ситуаций строится таким образом, что j, 0jn: [Aα•β,i]Ij, тогда и только тогда, если  S*γA, γ *a1...ai, и α*ai+1...aj. Иначе говоря, между вто­рым компонентом ситуации и номером списка, в котором он появляется, заклю­чена часть входной цепочки, выводимая из А. Условия ситуации Ijгарантируют возможность применения правила Аαβ в выводе некоторой входной цепочки, совпадающей с заданной цепочкой  до позиции j.

Условием существования вывода заданной входной цепочки в грамматике G(VN,VT,P,S) после завершения алгоритма Эрли служит [S•,0]In. На осно­вании полученного в результате выполнения алгоритма списка ситуаций можно затем с помощью специальной процедуры построить всю цепочку вывода и по­лучить номера применяемых правил. Причем проще построить правосторонний вывод.

Как и все табличные алгоритмы, алгоритм Эрли обладает полиномиальными характеристиками в зависимости от длины входной цепочки. Доказано, что для произвольной КС-грамматики G(VN,VT,P,S) время выполнения данного алго­ритма Тэбудет иметь кубическую зависимость от длины входной цепочки, а не­обходимый объем памяти Мэ– квадратичную зависимость от длины входной цепочки: α, αVT*, n=|α|: Тэ= О(n3) и Мэ= О(n2). Но для однозначных КС-грамматик алгоритм Эрли имеет лучшие характеристики – его время выполне­ния в этом случае квадратично зависит от длины входной цепочки: Тэ= О(n2). Кроме того, для некоторых классов КС-грамматик время выполнения этого ал­горитма линейно зависит от длины входной цепочки (правда, для этих классов, как правило, существуют более простые алгоритмы распознавания).

В целом алгоритм Эрли имеет лучшие характеристики среди всех универсаль­ных алгоритмов распознавания входных цепочек для произвольных КС-грамма­тик. Он превосходит алгоритм Кока–Янгера–Касами для однозначных грамма­тик (которые представляют интерес в первую очередь), хотя и является более сложным в реализации.

 

3.7. Принципы построения распознавателей
КС-языков без возвратов

 

Выше были рассмотрены различные универсальные распознаватели для КС-языков – то есть распознаватели, позволяющие выполнить разбор цепочек для любого КС-языка (заданного произвольной КС-грамматикой). Они универсаль­ны, но имеют неудовлетворительные характеристики. Распознаватели с возвра­тами имеют экспоненциальную зависимость требуемых для выполнения алго­ритма разбора вычислительных ресурсов от длины входной цепочки символов, а табличные распознаватели – полиномиальную. Для практического примене­ния в реальных компиляторах такие характеристики являются неудовлетвори­тельными.

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

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

Для многих классов КС-грамматик (и соответствующих им классов КС-языков) можно построить распознаватели, имеющие лучшие характеристики, чем рассмот­ренные выше распознаватели с возвратами и табличные. Эти распознаватели уже не будут универсальными – они будут применимы только к заданному классу КС-языков с соответствующими ограничениями, зато они будут иметь лучшие характеристики.

Cледует всегда помнить, что проблема преобразования КС-грамматик алгоритмически неразрешима. Если какая-то грамматика не принадлежит к требуе­мому классу КС-грамматик, это еще не значит, что заданный ею язык не может быть описан грамматикой такого класса. Иногда удается выполнить преобразо­вания и привести исходную грамматику к требуемому виду. Но, к сожалению, этот процесс не формализован, не поддается алгоритмизации и требует участия человека. Чаще всего такую работу вынужден выполнять разработчик компиля­тора (правда, выполняется она только один раз для синтаксических конструкций каждого языка программирования).

Существуют два принципиально разных класса распознавателей. Первый – нисходящие распознаватели, которые порождают цепочки левостороннего вывода и строят дерево вывода сверху вниз. Второй – восходящие распознаватели, кото­рые порождают цепочки правостороннего вывода и строят дерево вывода снизу вверх. Названия “нисходящие” и “восходящие” связаны с порядком построения дерева вывода. Как правило, все распознаватели читают входную цепочку симво­лов слева направо, поскольку предполагается именно такая нотация в написании исходного текста программ.

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

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





Поделиться с друзьями:


Дата добавления: 2016-11-18; Мы поможем в написании ваших работ!; просмотров: 1243 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Ваше время ограничено, не тратьте его, живя чужой жизнью © Стив Джобс
==> читать все изречения...

2264 - | 2207 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.