Last change
on this file was 391, checked in by dmik, 11 years ago |
python: Merge vendor 2.7.6 to trunk.
|
-
Property svn:eol-style
set to
native
|
File size:
1.2 KB
|
Line | |
---|
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 | PyNode_ListTree(node *n)
|
---|
14 | {
|
---|
15 | listnode(stdout, n);
|
---|
16 | }
|
---|
17 |
|
---|
18 | static int level, atbol;
|
---|
19 |
|
---|
20 | static void
|
---|
21 | listnode(FILE *fp, node *n)
|
---|
22 | {
|
---|
23 | level = 0;
|
---|
24 | atbol = 1;
|
---|
25 | list1node(fp, n);
|
---|
26 | }
|
---|
27 |
|
---|
28 | static void
|
---|
29 | list1node(FILE *fp, node *n)
|
---|
30 | {
|
---|
31 | if (n == 0)
|
---|
32 | return;
|
---|
33 | if (ISNONTERMINAL(TYPE(n))) {
|
---|
34 | int i;
|
---|
35 | for (i = 0; i < NCH(n); i++)
|
---|
36 | list1node(fp, CHILD(n, i));
|
---|
37 | }
|
---|
38 | else if (ISTERMINAL(TYPE(n))) {
|
---|
39 | switch (TYPE(n)) {
|
---|
40 | case INDENT:
|
---|
41 | ++level;
|
---|
42 | break;
|
---|
43 | case DEDENT:
|
---|
44 | --level;
|
---|
45 | break;
|
---|
46 | default:
|
---|
47 | if (atbol) {
|
---|
48 | int i;
|
---|
49 | for (i = 0; i < level; ++i)
|
---|
50 | fprintf(fp, "\t");
|
---|
51 | atbol = 0;
|
---|
52 | }
|
---|
53 | if (TYPE(n) == NEWLINE) {
|
---|
54 | if (STR(n) != NULL)
|
---|
55 | fprintf(fp, "%s", STR(n));
|
---|
56 | fprintf(fp, "\n");
|
---|
57 | atbol = 1;
|
---|
58 | }
|
---|
59 | else
|
---|
60 | fprintf(fp, "%s ", STR(n));
|
---|
61 | break;
|
---|
62 | }
|
---|
63 | }
|
---|
64 | else
|
---|
65 | fprintf(fp, "? ");
|
---|
66 | }
|
---|
Note:
See
TracBrowser
for help on using the repository browser.