Совместное применение синтаксических и семантических конструкций в системе обозначений DCG

Система обозначений DCG фактически позволяет включать определение смысла непосредственно в грамматику, что дает возможность избежать необходимости про­межуточного формирования дерева синтаксического анализа. Это — еще одно рас­ширение системы обозначений, поддерживаемое DCG, которое является очень удоб­ным для решения указанной задачи. Это расширение позволяет вставлять обычные цели Prolog в грамматические правила. Такие цели должны быть заключены в фи­гурные скобки, чтобы их можно было отличить от других символов грамматики. Та­ким образом, любое выражение, которое заключено в фигурные скобки, будучи об­наруженным интерпретатором Prolog, выполняется как обычная цель Prolog. Такое выполнение может, например, предусматривать арифметические вычисления.

Это средство может использоваться для подготовки такого варианта грамматики движения робота, который позволяет непосредственно совмещать операции извлече­ния смысла с синтаксическими конструкциями. Для этого необходимо добавить оп­ределение смысла; иными словами, ввести расстояние перемещения в результате не­которого движения в качестве параметра нетерминальных символов move и sLep, например, следующим образом: move[ Dist)

Этот предикат теперь обозначает синтаксическую конструкцию move, смыслом которой является Dist. Соответствующая грамматика приведена ниже. move( D) --> step! D),

move( D) —> step( Dl), move( D2), {D is Dl + D2}, stepi 1) --> [ up]. step{ -1) —> [ down].

Второе правило этой грамматики может служить примером применения системы обозначений, в которой используются фигурные скобки. Это правило можно описать словами, как показано ниже.

Движение, смыслом которого является D, состоит из следующего:

• шаг, смысловым значением которого является D1;

• движение, имеющее смысловое значение D2, при выполнении которого должно также быть удовлетворено отношение D is Dl + D2.



Часть II. Применение языка Prolog в области искусственного интеллекта

В действительности способ обработки семантических конструкций путем включе­ния правил формирования смысла непосредственно в грамматику DCG является на­столько удобным, что с его помощью часто удается полностью избежать необходимо­сти применять промежуточный этап формирования дерева синтаксического анализа. Благодаря исключению этого промежуточного этапа программы становятся, как принято их называть, свернутыми, (collapsed). Обычно в результате этого достигают­ся такие преимущества, что программы, кроме того, становятся более краткими и эффективными. Но этот подход характеризуется также некоторыми недостатками: свернутая программа может оказаться менее наглядной, менее гибкой и более слож­ной для корректировки.

В качестве еще одной иллюстрации данного метода совместного применения син­таксических и смысловых конструкций рассмотрим немного более интересный вари­ант грамматики движений робота. Предположим, что для управления манипулято­ром робота могут использоваться два приводных механизма •— gl и д2. После полу­чения команды перемещения на один шаг роботом, использующим приводной механизм gl, робот выполняет движение на 1 мм вверх или вниз, а при использова­нии приводного механизма д2 происходит движение на расстояние 2 мм. Предполо­жим, что вся программа управления роботом состоит из команд переключения на тот или иной приводной механизм (gl или д2) и команд перемещения на один шаг, а оканчивается командой stop. Примеры таких программ приведены ниже.

stop

gl up up stop

gl up up g2 down up stop

gl gl g2 up up gl up down up g2 stop

Последняя программа имеет следующий смысл (т.е. расстояние перемещения в результате движения): Dist =2* (1 + 11 + 1* (1-1+1) =5

Для обработки таких программ управления роботом существующая грамматика движений робота должна быть расширена с помощью следующих правил: р:;од( 0) --> [ stop] .

prog ( Dist) --> деаг( _) , рюд ( Dist) .

prog( Dist) -> gear( Gl, move[ D) , prog( Distl), {Dist is G * D + Distl}.

gear( 1) -> [ gl].

gear{ 2) -> [ g2) .

Наши рекомендации