Работа леворекурсивного правила

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

Запрос к процедуре "восх_объект2"

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

|? - восх_объект2 ([the, big, brown, cow], [], терминал, _,

группа_существительного).

да

Процесс грамматического разбора этого предложения иллюстрируется рис. 5.10-5.15.

Состояние 1 (рис. 5.10): "группа_существительного" является целью грамматического разбора. Процедура разбора берет слово «the» из входного списка и выясняет, что это слово - "артикль".

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

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

Состояние 4 (рис. 5. 13): процедура разбора обнаруживает, что "прил" является первой компонентой "прил" (по первому правилу "прил"), а затем запускает новый процесс грамматического разбора, чтобы найти "прилагательное". Разбор заканчивается успешно и дает слово «brown».

Состояние 5 (рис. 5. 14): процедура разбора выясняет, что "прил" является первой компонентой "прил" (по второму правилу), но больше не может найти прилагательных во входном потоке. Она возвращается назад и определяет, что "прил" является также и первым элементом объекта "прилсущ".

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

Как Вы полагаете, каким будет поведение процедуры восходящего грамматического разбора, если попросить ее сгенерировать предложения при помощи, например, такого запроса:

|?— восх_объект2 (X, [], терминал, _, предложение).?

Использование процедур грамматического разбора

Приведенные примеры систем грамматического разбора — процедуры "объект" и "восх_объект" — могут лишь проверить синтаксис входного предложения. (Процедура "объект" может также генерировать предложения, если только грамматика не содержит рекурсивных правил.) В большинстве приведенных примеров запросов процедура разбора берет входное предложение, а затем подтверждает или опровергает предположение о том, что данное предложение поддается грамматическому разбору Гораздо более важной сферой применения систем грамматического разбора является перевод с одного языка на другой. Этот род задач выполняется компиляторами, программами обработки языка запросов или программными системами машинного перевода.

В разд. 5. 4 будет представлен простой конвертер, преобразующий Пролог-программы, написанные с использованием синтаксиса DEC-10 на подмножество микро-Пролога, называемое синтаксическим ядром микро-Пролога. В отличие от интерфейсной программы для DEC-10, поставляемой вместе с микро-Прологом, программа-конвертер из данной книги может работать с входным файлом в пакетном режиме, вырабатывая выходной файл с преобразованной исходной программой. Эта же программа-конвертер может переводить и программы, написанные на подмножестве микро-Пролога (ядро Пролога), на DEC-10 - версию языка. Программа-конвертер будет полезной в тех случаях, когда Вам потребуется перевести программу с одного из двух названных диалектов Пролога на второй.

В разд. 5. 5 будет представлен интерпретатор простого языка запросов, который транслирует запросы вида

выдать служащий имя и служащий

оклад где отдел является 100.

(Выдать имена и оклады служащих отдела № 100.)

в Пролог-запросы, а затем выполняет эти запросы.

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

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