InterCodes translate_Deflist(node* deflist){ if(deflist != NULL && deflist->child != NULL){ InterCodes codes1 = InterCodes_init(); InterCodes codes2 = InterCodes_init(); codes1 = translate_Def(deflist->child); codes2 = translate_Deflist(deflist->child->brother); InterCodes_link(codes1,codes2); return codes1; } else return NULL; }
intercodes translate_DefList(struct Node *node) { intercodes code1,code2; //NULL if (node == NULL) return NULL; struct Node *child = node->child; assert(child != NULL); //Def DefList code1 = translate_Def(child); code2 = translate_DefList(child->sibling); code1 = link(code1,code2); return code1; }
InterCodeNode translate_DefList(treenode *DefList_n){ if(DefList_n == NULL){ //deprintf("DefList is NULL\n"); return NULL; } if(DefList_n->child_num != 2){ // deflist -> empty //deprintf("DefList is empty\n"); return NULL; } //deflist -> def deflist InterCodeNode node1 = translate_Def(DefList_n->node[0]); InterCodeNode node2 = translate_DefList(DefList_n->node[1]); return produceNodeByNode(node1,node2); }
struct InterCodes* translate_DefList(struct TreeNode* DefList){ if(DefList->children == NULL){ struct InterCodes* code1 = (struct InterCodes*)malloc(sizeof(struct InterCodes)); code1->code.kind = NONE_; return code1; } else{ struct InterCodes* code1 = translate_Def(DefList->children->neighbours); struct InterCodes* code2 = translate_DefList(DefList->children); struct InterCodes* p = code1; while(p->next != NULL) p = p->next; p->next = code2; code2->prev = p; return code1; } }