InterCodes translate_Declist(node* declist){ InterCodes codes1 = InterCodes_init(); codes1 = translate_Dec(declist->child); if(declist->child->brother == NULL){ return codes1; } else{ InterCodes codes2 = InterCodes_init(); codes1 = translate_Dec(declist->child); codes2 = translate_Declist(declist->child->brother->brother); InterCodes_link(codes1, codes2); return codes1; } }
InterCodeNode translate_DecList(treenode *DecList_n){ if(DecList_n == NULL){ //deprintf("DecList is NULL\n"); return NULL; } if(DecList_n->child_num == 1){ //declist -> dec return translate_Dec(DecList_n->node[0]); } //declist -> dec , declist assert(DecList_n->child_num == 3); InterCodeNode node1 = translate_Dec(DecList_n->node[0]); InterCodeNode node2 = translate_DecList(DecList_n->node[2]); return produceNodeByNode(node1,node2); }
intercodes translate_DecList(struct Node *node) { struct Node *child = node->child; assert(child != NULL); intercodes code1 = NULL; intercodes code2 = NULL; //Dec if (child->sibling == NULL) return translate_Dec(child); //Dec COMMA DecList if (child->sibling != NULL && strcmp(child->sibling->type,"COMMA") == 0) { code1 = translate_Dec(child); code2 = translate_DecList(child->sibling->sibling); code1 = link(code1,code2); return code1; } }
struct InterCodes* translate_DecList(struct TreeNode* DecList){ if(strcmp(DecList->children->name, "Dec") == 0){ return translate_Dec(DecList->children); } if(strcmp(DecList->children->name, "DecList") == 0){ struct InterCodes* code1 = translate_Dec(DecList->children->neighbours->neighbours); struct InterCodes* code2 = translate_DecList(DecList->children); struct InterCodes* p = code1; while(p->next != NULL) p = p->next; p->next = code2; code2->prev = p; return code1; } }