blob: 9d24c0f0c91f4d982c5a15ccebb9b96cedfc17a3 [file] [log] [blame]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001/* List a node on a file */
2
Guido van Rossum3f5da241990-12-20 15:06:42 +00003#include "pgenheaders.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00004#include "token.h"
5#include "node.h"
6
Guido van Rossum3f5da241990-12-20 15:06:42 +00007/* Forward */
8static void list1node PROTO((FILE *, node *));
9
10void
11listtree(n)
12 node *n;
13{
14 listnode(stdout, n);
15}
16
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000017static int level, atbol;
18
Guido van Rossum3f5da241990-12-20 15:06:42 +000019void
20listnode(fp, n)
21 FILE *fp;
22 node *n;
23{
24 level = 0;
25 atbol = 1;
26 list1node(fp, n);
27}
28
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000029static void
30list1node(fp, n)
31 FILE *fp;
32 node *n;
33{
34 if (n == 0)
35 return;
36 if (ISNONTERMINAL(TYPE(n))) {
37 int i;
38 for (i = 0; i < NCH(n); i++)
39 list1node(fp, CHILD(n, i));
40 }
41 else if (ISTERMINAL(TYPE(n))) {
42 switch (TYPE(n)) {
43 case INDENT:
44 ++level;
45 break;
46 case DEDENT:
47 --level;
48 break;
49 default:
50 if (atbol) {
51 int i;
52 for (i = 0; i < level; ++i)
53 fprintf(fp, "\t");
54 atbol = 0;
55 }
56 if (TYPE(n) == NEWLINE) {
57 if (STR(n) != NULL)
58 fprintf(fp, "%s", STR(n));
59 fprintf(fp, "\n");
60 atbol = 1;
61 }
62 else
63 fprintf(fp, "%s ", STR(n));
64 break;
65 }
66 }
67 else
68 fprintf(fp, "? ");
69}