Анализ процесса грамматического разбора

Нижеследующий запрос осуществляет разбор простого предложения:

|? - восх_объект ([the, cow, shakes, the,

tail], О, терминал, _, предложение).

0=[ ]

Как читать диаграммы

Рассмотрим более подробно действия системы грамматического разбора, предпринимаемые ею при обработке запроса. На рис. 5. 3—5. 9 показаны различные стадии грамматического разбора предложения. Каждая стрелка, направленная вниз, обозначает начало нового процесса разбора, целью которого является объект, на который указывает стрелка. Например, первоначальный запрос запускает процесс грамматического разбора с целью найти предложение. Это представлено на рисунке в виде стрелки, направленной вниз и указывающей на прямоугольник со словом "предложение". Каждая стрелка, направленная вверх, обозначает действия восходящей подцели, входящей в состав одного из правил "восх_объект".

Состояние 1 (рис. 5. 3): "предложение" - это цель данного процесса грамматического разбора. Система разбора берет из входного списка слово «the» и выясняет, что это слово — "артикль".

Состояние 2 (рис. 5. 4): система разбора определяет, что "артикль" — это первая компонента "группы_существительного", а затем стартует еще один процесс грамматического разбора для того, чтобы найти во входном списке "существительное". Этот процесс завершается успешно и дает слово « cow».

Состояние 3 (рис. 5. 5): система разбора выясняет, что "группа_существительного" является первой компонентой "предложения", и затем запускает еще один процесс грамматического разбора для того, чтобы найти "глагольную_группу".

Состояние 4 (рис. 5. 6): система грамматического разбора берет из входного списка слово « shakes» и выясняет, что это слово - "глагол".

Состояние 5 (рис. 5. 7): система определяет, что "глагол" является первой компонентой "глагольной_группы", а затем запускает новый процесс грамматического разбора для отыскания "группы_существительного".

Состояние б (рис. 5. 8): система грамматического разбора берет из входного списка слово «the», выясняет, что это слово является артиклем, и определяет, что артикль - это первая компонента группы существительного.

Состояние 7 (рис. 5. 9): система начинает новый процесс грамматического разбора для обнаружения "существительного". Этот процесс успешно заканчивается отысканием слова «tail». Вследствие этого процесс разбора "группы_существительного" будет успешным, далее процесс разбора "глагольной_группы" окажется успешным и, в свою очередь, исходный процесс грамматического разбора "предложения" также завершится успешно.

Леворекурсивные правила

В системе грамматического разбора "объект2" определение объекта "группа_существительного" было модифицировано с тем, чтобы эта группа могла содержать любое количество прилагательных. Это было достигнуто при помощи праворекурсивного определения объекта "прил":

прил -> прилагательное

прил прил ->

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

группа_существительного -> артикль прилсущ (1)

прилсущ -> прил существительное (2)

прилсущ -> существительное (3)

прил -> прил прилагательное (4)

прил -> прилагательное (5)

В этой грамматике дается леворекурсивное определение объекта "прил", который является одним или более прилагательным (В правиле (4) "прил" располагается перед объектом "прилагательное".) Вводится новый промежуточный объект — "прилсущ", который является либо только существительным (в соответствии с правилом (3)), либо существительным, перед которым стоит любое количество прилагательных (по правилу (2)). Правило (1) определяет "группу_существительного" как "артикль", за которым следует "прилсущ". Приведенная грамматика реализуется процедурой "восх_объект2":

% условие окончания при достижении цели:

восх_объект2 (I, I, Цель, _, Цель): -!.

% терминалы:

% + - + - +

восх_обьект2 ([the | R], О, терминал, артикль, Цель):—

восх_объект2 (R, О, артикль, _, Цель).

восх_объект2 ([cow | R], О, терминал, существительное, Цель):—

восх_объект2 (R, О, существительное, _, Цель).

восх_обьект2 ([tail | R], О, терминал, существительное, Цель): -

восх_объект2 (R, О, существительное, _, Цель).

восх_объект2 ([big | R], О, терминал, прилагательное, Цель): —

восх_объект2 (R, О, прилагательное, _, Цель).

восх_объект2 ([strong | R], О, терминал, прилагательное, Цель): —

восх_объект2 (R, О, прилагательное, _, Цель).

% нетерминалы:

% группа существительного -> артикль прилсущ

восх_объект2 (I, О, артикль, группа_существительного, Цель):—

восх_объект2 (I, R, терминал, _, прилсущ),

восх_обьект2 (Р, О, группа_существительного, _, Цель).

% прил -> прил прилагательное

восх_объект2 (I, О, прил, прил. Цель):—

восх_объект2 (I, R, терминал, _, прилагательное),

восх_объект2 (R, О, прил, _, Цель).

% прил -> прилагательное

восх_объект2 (I, О, прилагательное, прил, Цель):—

восх_объект2 (I, О, прил, _, Цель).

% прилсущ -> прил существительное

восх_объект2 (I, О, прил, прилсущ. Цель): -

восх_объект2 (I, R, терминал, _, существительное),

восх_объект2 (Р, О, прилсущ, _, Цель).

% прилсущ -> существительное

восх_объект2 (I, О, существительное, прилсущ, Цель):—

восх_объект2 (I, О, прилсущ, _, Цель).

Соседние файлы в папке Гл.0,1,2,3,4,5,Предисловие