Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpory_tyap (1).doc
Скачиваний:
23
Добавлен:
17.04.2019
Размер:
1.05 Mб
Скачать

Пример построения Деревьев

Процесс генерации цепочки аналогичен построению следующего дерева (все знают, кто такие деревья?):

- Корень - S

- При применении правила, заменяющего нетерминал X на цепочку y1y2...yn, в дерево добавляются узлы y1y2...yn, они становятся детьми узла, содержащего X.

В результате:

- Крона (узлы, не имеющие детей) дерева - текущее состояние цепочки

- К концу генерации в листьях находятся только нетерминалы и символы "пустая строка"

- По дереву невозможно восстановить последовательность применения правил в разных ветках. Впрочем, этот порядок ни на что и не влияет.

- Но вот каждую ветку можно восстановить точно

Вот так выглядят деревья для примеров из предыдущего пункта:

S

/---|---\

a S b

|

/---|---\

a S b

|

''

и

S

|

E

|

/-----|-----\

E + E

| |

M M

| |

/--|--\ /---|---\

M * M '(' E ')'

| | |

a a M

|

b

В общем, идея должна быть ясна.

В качестве примечания: соответствие дерево --> цепочка всегда однозначно, дерево точно определяет цепочку. А вот соответствие цепочка --> дерево - не всегда. Например, в приведённой выше грамматике цепочку a+b+a можно получить двумя способами:

S S

| |

E E

| |

/-----|-----\ /-----|-----\

E + E E + E

| | | |

M /---|---\ /---|---\ M

| E + E E + E |

a | | | | a

M M M M

| | | |

b a a b

Отличия кажутся незначительными.. До тех пор, пока '+' обозначает ассоциативную операцию, т.е. пока (a+b)+a = a+(b+a) В некоторых случаях это не верно даже для обычного плюса. Ещё смешнее получается, если заменить '+' на '-'. Неоднозначность может быть свойством грамматики, а может быть свойством языка. В первом случае существует однозначная КС-грамматика, описывающая тот же язык.

Синтаксический анализ кс-языков

Вот, наконец, и постановка задачи. Пусть есть КС-грамматика и какая-то цепочка.

- Задача минимум - определить, что цепочка принадлежит языку, описываемому грамматикой. Т.е. что существует такая последовательность применений правил этой грамматики, что из S можно сделать нужную цепочку.

- Задача максимум - построить дерево (вот так причудливо смешались в одно три цели: построить дом, посадить дерево, воспитать сына..).

Задача минимум, конечно, никому обычно не нужна. Строить дерево тоже не всегда нужно, часто дерево достаточно некоторым образом обойти и что-то при этом сделать. Например, в случае с арифметическими операциями - вычислить результат. Но по сути это одно и то же: раз можем обойти, то можем и построить.

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