Minor changes.
[egate.git] / ccl / cclptree.c
1 /* CCL print rpn tree - infix notation
2  * Europagate, 1995
3  *
4  * $Log: cclptree.c,v $
5  * Revision 1.5  1995/02/23 08:31:59  adam
6  * Changed header.
7  *
8  * Revision 1.3  1995/02/15  17:42:16  adam
9  * Minor changes of the api of this module. FILE* argument added
10  * to ccl_pr_tree.
11  *
12  * Revision 1.2  1995/02/14  19:55:11  adam
13  * Header files ccl.h/cclp.h are gone! They have been merged an
14  * moved to ../include/ccl.h.
15  * Node kind(s) in ccl_rpn_node have changed names.
16  *
17  * Revision 1.1  1995/02/14  10:25:56  adam
18  * The constructions 'qualifier rel term ...' implemented.
19  *
20  */
21
22 #include <stdio.h>
23 #include <assert.h>
24 #include <string.h>
25
26 #include <ccl.h>
27
28 void ccl_pr_tree (struct ccl_rpn_node *rpn, FILE *fd_out)
29 {
30
31     switch (rpn->kind)
32     {
33     case CCL_RPN_TERM:
34         fprintf (fd_out, "\"%s\"", rpn->u.t.term);
35         if (rpn->u.t.attr_list)
36         {
37             struct ccl_rpn_attr *attr;
38             for (attr = rpn->u.t.attr_list; attr; attr = attr->next)
39                 fprintf (fd_out, " %d=%d", attr->type, attr->value);
40         }
41         break;
42     case CCL_RPN_AND:
43         fprintf (fd_out, "(");
44         ccl_pr_tree (rpn->u.p[0], fd_out);
45         fprintf (fd_out, ") and (");
46         ccl_pr_tree (rpn->u.p[1], fd_out);
47         fprintf (fd_out, ")");
48         break;
49     case CCL_RPN_OR:
50         fprintf (fd_out, "(");
51         ccl_pr_tree (rpn->u.p[0], fd_out);
52         fprintf (fd_out, ") or (");
53         ccl_pr_tree (rpn->u.p[1], fd_out);
54         fprintf (fd_out, ")");
55         break;
56     case CCL_RPN_NOT:
57         fprintf (fd_out, "(");
58         ccl_pr_tree (rpn->u.p[0], fd_out);
59         fprintf (fd_out, ") not (");
60         ccl_pr_tree (rpn->u.p[1], fd_out);
61         fprintf (fd_out, ")");
62         break;
63     case CCL_RPN_SET:
64         fprintf (fd_out, "set=%s", rpn->u.setname);
65         break;
66     case CCL_RPN_PROX:
67         fprintf (fd_out, "(");
68         ccl_pr_tree (rpn->u.p[0], fd_out);
69         fprintf (fd_out, ") prox (");
70         ccl_pr_tree (rpn->u.p[1], fd_out);
71         fprintf (fd_out, ")");
72         break;
73     default:
74         assert (0);
75     }
76 }