Beispiel #1
0
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;
	}
}
Beispiel #2
0
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;
	}
}
Beispiel #4
0
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;
	}
}