Line data Source code
1 :
2 : /* List a node on a file */
3 :
4 : #include "pgenheaders.h"
5 : #include "token.h"
6 : #include "node.h"
7 :
8 : /* Forward */
9 : static void list1node(FILE *, node *);
10 : static void listnode(FILE *, node *);
11 :
12 : void
13 0 : PyNode_ListTree(node *n)
14 : {
15 0 : listnode(stdout, n);
16 0 : }
17 :
18 : static int level, atbol;
19 :
20 : static void
21 0 : listnode(FILE *fp, node *n)
22 : {
23 0 : level = 0;
24 0 : atbol = 1;
25 0 : list1node(fp, n);
26 0 : }
27 :
28 : static void
29 0 : list1node(FILE *fp, node *n)
30 : {
31 0 : if (n == 0)
32 0 : return;
33 0 : if (ISNONTERMINAL(TYPE(n))) {
34 : int i;
35 0 : for (i = 0; i < NCH(n); i++)
36 0 : list1node(fp, CHILD(n, i));
37 : }
38 0 : else if (ISTERMINAL(TYPE(n))) {
39 0 : switch (TYPE(n)) {
40 : case INDENT:
41 0 : ++level;
42 0 : break;
43 : case DEDENT:
44 0 : --level;
45 0 : break;
46 : default:
47 0 : if (atbol) {
48 : int i;
49 0 : for (i = 0; i < level; ++i)
50 0 : fprintf(fp, "\t");
51 0 : atbol = 0;
52 : }
53 0 : if (TYPE(n) == NEWLINE) {
54 0 : if (STR(n) != NULL)
55 0 : fprintf(fp, "%s", STR(n));
56 0 : fprintf(fp, "\n");
57 0 : atbol = 1;
58 : }
59 : else
60 0 : fprintf(fp, "%s ", STR(n));
61 0 : break;
62 : }
63 : }
64 : else
65 0 : fprintf(fp, "? ");
66 : }
|