/Parser/listnode.c
http://unladen-swallow.googlecode.com/ · C · 66 lines · 57 code · 7 blank · 2 comment · 13 complexity · d54fa146761c8448a5b3f7c92cbd74b6 MD5 · raw file
- /* List a node on a file */
- #include "pgenheaders.h"
- #include "token.h"
- #include "node.h"
- /* Forward */
- static void list1node(FILE *, node *);
- static void listnode(FILE *, node *);
- void
- PyNode_ListTree(node *n)
- {
- listnode(stdout, n);
- }
- static int level, atbol;
- static void
- listnode(FILE *fp, node *n)
- {
- level = 0;
- atbol = 1;
- list1node(fp, n);
- }
- static void
- list1node(FILE *fp, node *n)
- {
- if (n == 0)
- return;
- if (ISNONTERMINAL(TYPE(n))) {
- int i;
- for (i = 0; i < NCH(n); i++)
- list1node(fp, CHILD(n, i));
- }
- else if (ISTERMINAL(TYPE(n))) {
- switch (TYPE(n)) {
- case INDENT:
- ++level;
- break;
- case DEDENT:
- --level;
- break;
- default:
- if (atbol) {
- int i;
- for (i = 0; i < level; ++i)
- fprintf(fp, "\t");
- atbol = 0;
- }
- if (TYPE(n) == NEWLINE) {
- if (STR(n) != NULL)
- fprintf(fp, "%s", STR(n));
- fprintf(fp, "\n");
- atbol = 1;
- }
- else
- fprintf(fp, "%s ", STR(n));
- break;
- }
- }
- else
- fprintf(fp, "? ");
- }