PageRenderTime 36ms CodeModel.GetById 26ms app.highlight 8ms RepoModel.GetById 1ms app.codeStats 0ms

/Parser/listnode.c

http://unladen-swallow.googlecode.com/
C | 66 lines | 57 code | 7 blank | 2 comment | 13 complexity | d54fa146761c8448a5b3f7c92cbd74b6 MD5 | raw file
 1
 2/* List a node on a file */
 3
 4#include "pgenheaders.h"
 5#include "token.h"
 6#include "node.h"
 7
 8/* Forward */
 9static void list1node(FILE *, node *);
10static void listnode(FILE *, node *);
11
12void
13PyNode_ListTree(node *n)
14{
15	listnode(stdout, n);
16}
17
18static int level, atbol;
19
20static void
21listnode(FILE *fp, node *n)
22{
23	level = 0;
24	atbol = 1;
25	list1node(fp, n);
26}
27
28static void
29list1node(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}