Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpora1_Kalabin.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
755.2 Кб
Скачать
  1. Деревья вывода. Канонические выводы. Двусмысленные порождающие грамматики

Графическим деревом вывода можно представить КС-грамматики, показывая, как нетерминалы, стоящие в узлах дерева, заменяются цепочками правых частей соответствующих продукций. Контекстно-свободные (КС) грамматики - по сути, частный подкласс грамматик Хомского - цепочка левой части, определяющая заменяемую подцепочку, содержит только один единственный символ нетерминального словаря. Деревья вывода цепочек языка, порождаемого КС-грамматикой, имеют следующую структуру. Корень дерева помечен начальным символом грамматики, в каждом внутреннем узле дерева стоит нетерминал, листья помечены терминальными символами так, что читаемые слева направо, они представляют терминальную цепочку, выведенную из начального символа. Из любого узла дерева, помеченного нетерминальным символом Q, идут вниз ветви к узлам, помеченным Х1Х2 ... Хк, если Q →Х1Х2 ... Хк – это одно из правил грамматики (рис. 2.3).

Таким образом, вывод любой цепочки языка, порождаемой КС-грамматикой из ее начального символа, может быть экономно представлен деревом вывода. Очевидно, что как правый, так и левый выводы цепочки языка единственные в КС-грамматике, они однозначно восстанавливаются по дереву вывода (так же, как дерево вывода однозначно строится по любому выводу цепочки). В связи с этим правый и левый выводы называются каноническими выводами цепочки в КС-грамматике.

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

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

Пример: V3={a,b,c}; L3={anbcm| n, m>0}.

Структура любой цепочки языка L3 – АВС (А – цепочки из а, С – цепочки из с), и поскольку количества символов а в начале цепочек языка и с в конце цепочек могут не совпадать, отдельные части структуры цепочек можно генерировать независимо. Искомая грамматика:

G3: S→ ABC; A→ aA ; A→ a; B→b; C→ Cc; C→ c

Введем небольшое упрощение при записи правил грамматики. Все альтернативные замены одного и того же нетерминала (т.е. различные правые части правил с одинаковой левой частью) будем записывать в одну строку через знак альтернативы '': G3: S→ ABC; A→ aA  a; B→b;C→ Cc c

Пример вывода в грамматике G3: S → ABC → aABC → aaABC → aaaBC → aaabC → aaabCc aaabcc. Здесь на каждом шаге вывода в промежуточной цепочке заменялась самая левая подцепочка, которую можно было заменить в соответствии с правилами грамматики. Такой вывод называется левым. Ту же цепочку языка можно породить в этой грамматике и с помощью другого вывода – например, заменяя самый правый нетерминал в промежуточной цепочке вывода. Такой вывод называется правым: S → ABC→ ABCс → AB→ Abcс aAbcc aaAbccaaabcc. Наконец, можно породить ту же цепочку ни левым, ни правым выводом, произвольно выбирая заменяемую подстроку: S→ ABC → ABCс aABСс aAbСс aaAbСс aaAbcс aaabcc.

ОпределениeДве грамматики называются эквивалентными, если они порождают один и тот же язык.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]