Скачиваний:
48
Добавлен:
01.05.2014
Размер:
263.68 Кб
Скачать

2

4.Восходящие методы обработки языков

41. Неформальное описание восходящего анализа

П

  1. S (AS)

  2. S b

  3. A (SaA)

  4. A a

Рис.4.1

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

Рассмотрим КС-грамматику G1, правила вывода которой приведены на рис 4.1. Это однозначная грамматика, поэтому каждая выводимая цепочка имеет единственное дерево вывода и единственный правый вывод.

Например, правый вывод цепочки ((baa)b) имеет вид:

S r (AS) r (Ab) r ((SaA)b) r ((Saa)b) r ((baa)b)

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

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

((baa)b) ((Saa)b ((SaA)b) (Ab) S ,

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

В терминах деревьев восходящий анализ заключается в после­довательном построении частичных деревьев из листьев и час­тичных деревьев, построенных на более ранних шагах. На рис. 4.2 приведена последовательность частичных деревьев, которые получаются при восходящем анализецепочки ((baa)b).

Заметим, что свертку не всегда можно выполнить единственным cпособом. Напри­мер, в грамматике G2 (рис. 4.3) при восходящем анализе цепочки acbb символ c можно свернуть к символу S (правило (2)) или к символу В (правило (6)).

a) б)

S S A

( ( b a a ) b ) ( ( b a a ) b )

д)

S

в) г)

A A S A S

S A S A S A

( ( b a a ) b ) ( ( b a a ) b ) ( ( b a a ) b )

Рис. 4.2

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

Б

  1. S aAb

  2. S c

  3. A bS

  4. A Bb

  5. B aA

  6. B c

Рис. 4.3

ольшинство детерминированных восходящих анализаторов базируются на понятииосновы.

Определение.

Пусть S r* Aw r w r* xw – правый вывод в КС-грамматике G = < T, N, S, R >. Тогда вхождение в цепочку w называется основой цепочки w, а правило A основывающим правилом этой цепочки:.

Таким образом, основывающее правило цепочки - это послед­нее правило, примененное в правом выводе цепочки, а основа цепочки - вхождение правой части этого правила в цепочку. Ес­ли грамматика однозначна, у цепочки может быть не более одно­го правого вывода, а следовательно, не более одной основы и одного основывающего правила.

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

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

4.2. LR (К)-грамматики

Соседние файлы в папке ВОСХОДЯЩИЕ МЕТОДЫ ОБРАБОТКИ ЯЗЫКОВ
  • #
    01.05.2014263.68 Кб48LR_K_GR.DOC
  • #
    01.05.2014222 б8Методы _восходящие методы обработки языков_ .log