/* NAME sample02 DESCRIPTION Tree pattern by jjCollect */ #include #include #include #include "sample02.b" /* include Part-B */ class Node { EXT_Node public: char *name; Node(char *n) {name=strdup(n);} }; /* define pattern */ jjCollect(tree, Node, Node); void put_tree(Node *n, int depth){ /* recursive tree print-out */ tree_iterator i(n); Node *sub; for(int d=0; d < depth; d++) printf(" |"); printf("%s\n", n->name); while( (sub=++i) ) /* depth first */ put_tree(sub, depth+1); } int main(){ /* create objects for test */ Node n0("root") ,n1("n1") ,n11("n11") ,n12("n12") ,n2("n2") ,n21("n21") ,n22("n22") ,n23("n23") ; /* define relation */ tree.add(&n0, &n1); tree.add(&n0, &n2); tree.add(&n1, &n11); tree.add(&n1, &n12); tree.add(&n2, &n21); tree.add(&n2, &n22); tree.add(&n2, &n23); /* print */ put_tree(&n0, 0); } /* Declare pattern-class object */ tree_class tree;