Annotation of researchv10no/cmd/twig/trees.c, revision 1.1

1.1     ! root        1: #include "common.h"
        !             2: #include "code.h"
        !             3: #include "sym.h"
        !             4: #include "mem.h"
        !             5: 
        !             6: struct _mem node_mem;
        !             7: 
        !             8: void
        !             9: TreeFree(root)
        !            10:        Node *root;
        !            11: {
        !            12:        if(root==NULL) return;
        !            13:        TreeFree(root->children);
        !            14:        TreeFree(root->siblings);
        !            15:        free(root);
        !            16: }
        !            17: 
        !            18: void
        !            19: TreePrint(tree, flag)
        !            20:        Node *tree;
        !            21:        int flag;
        !            22: {
        !            23:        if(tree==NULL)
        !            24:                return;
        !            25:        printf("%s", (tree->sym)->name);
        !            26:        putchar('(');
        !            27:        TreePrint(tree->children, 0);
        !            28:        putchar(')');
        !            29:        if(tree->siblings!=NULL) {
        !            30:                putchar(',');
        !            31:                TreePrint(tree->siblings, 0);
        !            32:        }
        !            33:        if(flag) putchar('\n');
        !            34: }
        !            35: 
        !            36: Node *
        !            37: rev (sl, nl, nlleaves)
        !            38:        Node *sl, *nl;
        !            39:        int *nlleaves;
        !            40: {
        !            41:        Node *sl2;
        !            42:        if(sl==NULL)
        !            43:                return(nl);
        !            44:        sl2 = sl->siblings;
        !            45:        sl->siblings = nl;
        !            46:        *nlleaves += sl->nlleaves;
        !            47:        return (rev (sl2, sl, nlleaves));
        !            48: }
        !            49: 
        !            50: Node *
        !            51: TreeBuild (symp, children)
        !            52:        SymbolEntry *symp;
        !            53:        Node *children;
        !            54: {
        !            55:        Node *np = (struct node *) mem_get(&node_mem);
        !            56:        np->sym = symp;
        !            57:        np->nlleaves = symp->attr==A_LABEL ? 1 : 0;
        !            58:        np->children = rev (children, NULL, &np->nlleaves);
        !            59:        return(np);
        !            60: }
        !            61: 
        !            62: TreeInit()
        !            63: {
        !            64:        mem_init(&node_mem, sizeof(struct node));
        !            65: }
        !            66: 
        !            67: cntnodes(np)
        !            68:        Node *np;
        !            69: {
        !            70:        if(np==NULL) return(0);
        !            71:        else return(1+cntnodes(np->children)+cntnodes(np->siblings));
        !            72: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.