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