СЕМАНТИЧЕСКАЯ ИНТЕРПРЕТАЦИЯ

До сих пор в данной главе рассматривался только синтаксический анализ языка. В этом разделе обратимся к семантике — извлечению смысла фрагментов речи. В данной главе в качестве языка представления используется логика первого порядка, поэтому семантическая интерпретация представляет собой процесс связывания с некоторым словосочетанием некоторого выражения логики первого порядка. Интуитивно ясно, что смысл словосочетания "the wumpus" — это образ большого, мохнатого животного, который может быть представлен в логике в виде логического терма Wumpus а смыслом словосочетания "the wumpus is dead" является логическое выражение Dead{Wumpus . В этом разделе такие интуитивные представления будут определены более точно. Начнем с простого примера — с правила для описания позиций в решетке:
NP -» Digit Digit
Дополним данное правило, добавив к каждой составляющей параметр, который представляет семантику этой составляющей. Будет получено следующее:
NP([x,y]) -> Digit (х) Digit (у)
Это правило гласит, что строка, состоящая из цифры с семантикой х, за которой следует еще одна цифра с семантикой у, образует словосочетание NP с семантикой [х,у], которое представляет собой применяемое нами обозначение квадрата в решетке — в мире вампуса.
Обратите внимание на то, что семантика всего словосочетания NP в основном формируется на основе семантики составляющих частей. Мы уже сталкивались с подобной идеей композиционной семантики и раньше: в логике смысл выражения PAQ определяется значениями Р, Q и л, а в арифметике смысл выражения х+у определяется значениями х, у и +. В листинге 22.6 показано, как можно воспользоваться системой обозначений DCG, чтобы дополнить грамматику арифметических выражений с семантикой, а на рис. 22.6 показано дерево синтаксического анализа выражения 3+ (42) согласно этой грамматике. Корнем данного дерева синтаксического анализа является выражение Ехр (5), семантической интерпретацией которого становится 5.
Листинг 22.6. Грамматика арифметических выражений, расширенная с учетом семантики. Каждая переменная х± представляет семантику одной из составляющих. Обратите внимание на использование обозначения операции проверки {test} для определения логических предикатов, которые должны быть удовлетворены, но не являются составляющими
Ехр(х) —> Exp(xi) Operator(op) Ехр{х2) {x~Apply(op, xi, х2) } Ехр(х) -» (Ехр(х) ) Ехр(х) —» Number (х) Number(х) —> Digit(х)
Number (х) —» Number (xi) Digit (Х2) {х=10 х xi+x2}
Digit(x) —> х {0 < х < 9}
Operator(х) —> х {х е { + , -, х}}







Материалы

Яндекс.Метрика