Даже не очень наблюдательный человек скажет вам, что не встречал в своей жизни двух абсолютно одинаковых деревьев. Придумано множество методов, позволяющих создавать при каждом очередном обращении объект, внешне отличающийся от любого из предыдущих, хотя между ними и есть очевидное структурное и типологическое сходство, которое определяется набором достаточно ясных правил. Ниже мы рассмотрим, как можно использовать древовидные структуры данных для формирования объектов, которые выглядят на экране как растения.
В информатике древовидные структуры используются повсеместно. Классический пример - грамматический разбор скобочных форм. В основном грамматический разбор в компьютерных и естественных языках выполняется по одной схеме. Разбор предложения компьютерного языка - программы - позволяет уяснить связь между отдельными ее компонентами, а разбор предложения естественного языка позволяет понять связь между отдельными членами предложения (кто, кого и когда). Дерево, представляющее структуру проанализированного предложения, описывает синтаксис этого предложения. Интерпретация отдельных элементов дерева- слов- придает предложению определенный смысл, т.е. определяет семантику предложения.
Если нас интересует только синтаксис языка, то существует прямая корреляция между правилами языка и формой дерева, которое представляет предложение на этом языке. Эту идею можно распространить и на иерархию объектов в графической системе - в той части, которая относится к отношениям между набором правил и древовидной моделью. Подобные системы известны под названием древовидных грамматик (tree grammars). Такая грамматика определяется множеством символов и множеством правил подстановки или порождающих правил (productions), которые четко предписывают, как можно заменить определенный символом другим символов или комбинацией других символов. Типичное правило представляется в форме А ->ВС, В -> ABA.
Располагая набором порождающих правил, можно сформировать бесконечное множество строк символов. В общем случае по отношению к некоторому символу в определенной ситуации можно применить более чем одно правило, а потому при случайном выборе фактически применяемого правила можно при каждом новом обращении к программе формировать отличающийся вариант строки. Программа может быть написана таким образом, что не только сформирует новую строку, но и, получив строку в качестве аргумента, сможет проанализировать, является ли она (строка) членом множества строк, сформированных в соответствии с определенным набором правил. Следовательно, можно будет иметь набор правил формирования объектов определенного класса (скажем, деревьев или кустиков) и отдельно от него программу, которая сможет определить, к какому классу принадлежит тот или иной объект сцены, основываясь на информации о разных грамматиках, порождающих формы объектов.