Главная Промышленная автоматика. (q, i, ар, у)Н(9» ссЛ, /у) При условии, ЧТО А-j-p - правило из Р с номером / и р - первая правая часть в линейном упорядочении, определенном в (1), которая является суффиксом цепочки ар. Номер этого правила записывается в L2. Если шаг 1 применим, повторить его. В противном случае перейти к шагу 2. Шаг 2. Перенос (я, ct, y)\-(q, /-fl, аа;, sy) при условии, что 1фП\\. Перейти к шагу 1. Если i = п-\-\, перейти к шагу 3. При выполнении шага 2 i-й входной символ переносится в верхнюю часть магазина Л1, позиция входного указателя увеличивается и в магазин L2 записывается s, чтобы указать, что сделан перенос. Шаг 3. Допускание (q, rt+1, $5, v)l-( rt+1, $5, v) Выдать Я (у), где h - гомоморфизм, определенный равенствами h(s)=e, h(l) = j для всех номеров правил, h(y) - обращенный правый разбор цепочки w. После этого остановиться. Если шаг 3 неприменим, перейти к шагу 4. Шаг 4. Переход в состояние возврата (q, п+1, а, у)\-{Ь, rt+1, а, у) при условии, что аф$3. Перейти к шагу 5. Шаг 5. Возврат (а) (&, i, аА, jy)\-{q, аВ, ky) если А->р - правило из Р с номером /, а следующим правилом в упорядочении (1), правая часть которого является суффиксом цепочки ар, является правило В->-Р с номером k. (Заметим, что арар.) Перейти к шагу 1. (Здесь происходит возврат к предыдущей свертке и делается попытка свертки с помощью следующей альтернативы.) (б) (Ь, п+1, аА, jy)\-(b, п+\, ар, у) если Л--р - правило из Р с номером / и для цепочки ар пе остается никакой другой свертки. Перейти к шагу 5. (Если других сверток не существует, надо «взять назад» данную свертку н продолжать возврат, оставляя входной указатель на позиции п+\.) если i: (b, i, аА, !y)\-(q, /+1, ара, sy) rt-fl, Л-i-p - правило из P с номером / и для ар не остается никакой другой свертки. Здесь символ aai перено- Одна такая лозушка оказывается тогда, когда грамматика содержит циклы, т, е. выводы вида Л~>""Л для некоторого нетерминала Л. Число частичных деревьев может быть в этом случае бесконечным, так что грамматики с циклами мы исключим из рассмотрения. Трудности создаются также е-правилами, так как тогда можно проделать произвольное число сверток, при которых пустая цепочка «свертывается» к нетерминалу. Восходящий разбор можно расширить так, чтобы он охватывал грамматики с -правилами, но пока для простоты мы предпочитаем обходиться без е-правил. Алгоритм 4.2. Восходящий разбор с возвратами. Вход. КС-грамматика G (N, S, P,S) без циклов и -правил (все ее правила занумерованы от 1 до р) и входная цепочка Выход. Один обращенный правый разбор, если он существует, и слово «ошибка» в противном случае. Метод. (1) Произвольным образом упорядочить правила. (2) Алгоритм будет изложен в терминах 4-компонентных конфигураций, подобных тем, что использовались в алгоритме 4.1. В конфигурации (s, /, а, Р) (а) S представляет состояние алгоритма, (б) / представляет текущую позицию входного указателя (предполагается, что (/г + 1)-м входным символом служит правый концевой маркер $), (в) а-содержимое магазина L1 (верх которого расположен справа) (г) р - содержимое магазина L2 (верх которого расположен слева). Как и раньше, алгоритм может находиться в одном из трех состояний b или f. В магазине L1 будет храниться цепочка терминалов и нетерминалов, из которой выводится часть входной цепочки, расположенная слева от входного указателя. В магазине L2 будет храниться история переносов и сверток, необходимых для получения из входной цепочки содержимого магазина L1. (3) Начальная конфигурация алгоритма -(, 1$, е). (4) Сам алгоритм работает так. Начинаем с попытки применить шаг 1. Шаг 1. Попытка свертки сится в магазин Ы, а символ s поступает в L2. Перейти к шагу 1. (Мы вернулись к предыдущей свертке и, так как других сверток нет, попробуем сделать перенос.) (г) ф, i, аа, sy)[-{b, ( - 1, а, у) если наверху магазина L2 находится символ переноса s. (Здесь в позиции i исчерпаны все альтернативы и надо «взять назад» операцию переноса. Входной указатель сдвигается влево, терминальный символ устраняется из L1, а символ переноса fins L2). Если этот шаг невыполним, объявить об ошибке. □ Пример 4.4. Применим описанный алгоритм восходящего разбора к грамматике G с правилами (1) Е-В + Т (2) Е~Т (3) T-TF (4) T~F (5) F~a Если наверху магазина L1 появится Е-\-Т, то сначала попытаемся сделать свертку, используя £+Г, а потом -используя Е~Т. Если же появится 7"*, то сначала попробуем X-TiF, а потом T-*F. Для входа а»а восходящий алгоритм пройдет через конфигурации (q, и $, e)Y-(q. 2, $а, s) 1-Й. 2, $Р, 5s) Н {q. 2, $Г, 45s) (9, 2, $£, 245s) -(9, 3, s245s) 1-(9, 4, ss245s) i-(f?. 4, 5ss245s) I-(9. 4, $EiT, 45ss245s) \-(q, 4, 245ss245s) \-{b, 4, 245ss245s) 4, $£*r, 45ss245s) l-(ij, 4, 5ss245s) 1-(&, 4, $£*t2, ss245s) + (&, 3, s245s) \-{b, 2, $£, 245s) [~(q> 3, $r*, s45s) [-((7, 4, ss45s) I-(9, 4, $TF, 5ss45s) h(9, 4, $r, 35ss45s) \-{q, 4, $£, 235ss45s) [-(t, 4, $£, 235ss45s) □ Корректность алгоритма 4.2 можно доказать способом, аналогичным тому, которым было показано, что нисходящий алгоритм работает правильно. Мы дадим здесь лишь набросок доказательства, оставляя большую часть деталей в качестве упражнения. Определение. Пусть G = (N, 2, Р, 5) -КС-грамматика. Будем называть п частичным правым разбором, совместимым с w, если существуют такие а (N и 2)* и префикс х цепочки w, что ayRX. Лемма 4.5. Пусть G -КС-грамматика без циклов и без е-пра-вил. Тогда найдется такая константа с, что число частичных правых разборов, совместимых с входной цепочкой длины п, не превосходит с\ Доказательство. Упражнение. П Теорема 4.4. Алгоритм 4.2 правильно находит правый разбор цепочки W, если он существует, и сигнализирует об ошибке в противном случае. Доказательство. По лемме 4.5 число частичных правых разборов, совместимых с входной цепочкой, конечно. В качестве упражнения предлагаем показать, что пока алгоритм 4.2 не найдет разбор входной цепочки, оп перебирает в естественном порядке все частичные правые разборы. А именно, каждый частичный правый разбор кодируется последовательностью индексов правил и символов переноса (s), и алгоритм 4.2 рассматривает все такие кодирующие последовательности в лексикографическом порядке. Этот лексикографический порядок определяется порядком символов, в котором S находится на последнем месте, а упорядочение индексов правил задается шагом 1 алгоритма 4.2. Заметим, что не каждая последовательность таких символов будет кодом совместимого частичного правого разбора. □ Так же, как для алгоритма 4.1, можно показать, что длины ЛЕагазииных списков в конфигурациях алгоритма 4.2 линейно зависят от длины входной цепочки. Теорема 4.5. Пусть для каоюдого символа из магазинных цепочек, участвующих в конфигурациях алгоритма 4.2, требуется только одна ячейка, и пусть число элементарных операций, неооходимых для вычисления одного шага алгоритма 4.2, ограни-ено. Тогда для входной цепочки длины п алгоритму 4.2 требуются емкость памяти с,п и время с, где с, и с~некотооые foHcmaHmbi. Доказательство. Упражнение. □ Какую последовательность шагов сделает алгоритм 4.2, если более длинная альтернатива считается первой, а входной цепочкой является (а) аЬ} (б) abab} Что будет, если первой считать болеекороткую альтернативу? 4.1.3. Покажите, что каждая КС-грамматика без циклов, не порождающая пустой цепочки, правопокрывается грамматикой, для которой работает алгоритм 4.2, но может не левопокрываться грамматикой, для которой работает алгоритм 4.1. *4.1.4. Покажите, что рекуррентные соотношения D(d) = (D(rf~in+l определяют функцию D (d) ~ ]k% где k-некоторое вещественное число, а наименьшее целое число > л;. Здесь ft = 1,502837... , 4.1.5. Дополните доказательство следствия 2 леммы 4.4. 4.1.6. Модифицируйте алгоритм 4.1 так, чтобы можно было отказаться от использования альтернативы, если из левовыводи-мой цепочки, получающейся после ее применения, нельзя вывести k очередных входных символов, где ft-фиксированное число. 4.1.7. Модифицируйте алгоритм 4Л так, чтобы он работал для произвольной грамматики, наложив ограничения на рост длин магазинов Ы а L2., **4.1.8. Дайте необходимое н достаточное условие, которому должна удовлетворять входная грамматика для того, чтобы алгоритм 4.1 никогда не оказывался в состоянии возврата. 4.1.9. Докажите лемму 4.5. 4.1.10. Докажите теорему 4.5. 4.1.11. Модифицируйте алгоритм 4.2 так, чтобы он работал для произвольной грамматики, наложив ограничения на длины магазинов L1 и L2. 4.1.12. Модифицируйте алгоритм 4.2 так, чтобы он работал быстрее, введя в него проверку того, что частичный правый разбор вместе с частью входной цепочки, расположенной справа от указателя, не содержат ни одной из цепочек длины ft,которые не Могут быть частью правовыводимой цепочки. 4.1.13. Модифицируйте алгоритмы 4.1 и 4.2 так, чтобы они Могли Возвращаться к любой спеднально выделенной конфнгу- Известно несколько модификаций основного алгоритма восходящего разбора, ускоряющих его работу, (1) Можно добавить „заглядывание вперед" так, что если обнаруживается, что следующие k символов справа от входного указателя не могут следовать за Л ни в какой правовыводимой цепочке, то в этот момент не надо делать свертку, соответствующую Л-правилу. (2) Можно попытаться упорядочить сыртки так, чтобы наиболее вероятные из них делались первыми. (3) Можно добавить информацию, позволяющую определять, приведут ли некоторые свертки к успеху. Например, если первая свертка использует правило Л -... а,, где % - первый входной символ, и мы знаем, что нет такой цепочки (/£2*, что S=*Ay, то эту свертку можно сразу исключить. Вообще мы хотим быть уверены в том, что если $а - содержимое магазина L1, то а-префикс правовыводимой цепочки. Хотя проверить это, вообще говоря, сложно, некоторые понятия (такие, как предшествование, обсуждаемое в гл. 5), помогают исключить многие цепочки а, которые могли бы появиться в LI. (4) Можно модифицировать алгоритм так, чтобы ускорить возвраты. Например, можно записать информацию, позволяющую сразу восстановить предыдущую конфигурацию, в которой была сделана свертка. Некоторые из этих соображений изучаются в упр. 4.1.12- 4.1.14 и 4.1.25. Замечания по поводу обнаружения н исправления ошибок, относящиеся к нисходящему возвратному алгоритму, применимы и к восходящему алгоритму. УПРАЖНЕНИЯ 4.1.1. Пусть G определяется правилами S~AS\a A~bSA\b Какую последовательность шагов сделает алгоритм 4.1, если альтернативы рассматриваются в том порядке, как они записаны, а входной цепочкой является (а) Ьа? (б) baba? Какие будут последовательности шагов, если альтернативы рассматриваются в обратном порядке? 4.1.2. Пусть G состоит из правил 5-5Л Л АаА\Ь 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 [56] 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 0.087 |