varElement* doDec(TreeNode *p) { //printf("doDec\n"); //printf("TreeNode->production rule: %d\n", p->productionRule); switch (p->productionRule) { case 1:{ TreeNode *p1 = p->firstChild; //printf("before doDec1\n"); varElement *elem1 = doVarDec(p1); //printf("after doDec1\n"); return elem1; break; } case 2: { TreeNode *p1 = p->firstChild; TreeNode *p3 = p1->rightBrother->rightBrother; //printf("p1->state:%s\n", p1->state); //printf("p3->state:%s\n", p3->state); //printf("before doDec\n"); varElement *elem1 = doVarDec(p1);//产生一个结点 //判断初始化时类型是否匹配 Type t3 = doExp(p3); elem1->initType = t3; //将初始化时等号后面的变量类型赋给这个结点的initType; fprintf(out_fp, "\tlw, $t0, 0($sp)\n"); fprintf(out_fp, "\tsw, $t0, %d($sp)\n", elem1->addr_sp - ADDR); return elem1; break; } } return NULL; }
varElement* doDec(TreeNode *p) { //printf("doDec\n"); //printf("TreeNode->state:%s\n", p->state); switch (p->productionRule) { case 1:{ TreeNode *p1 = p->firstChild; varElement *elem1 = doVarDec(p1); return elem1; break; } case 2: {//先没有处理初始化 TreeNode *p1 = p->firstChild; TreeNode *p3 = p1->rightBrother->rightBrother; //printf("p1->state:%s\n", p1->state); //printf("p3->state:%s\n", p3->state); varElement *elem1 = doVarDec(p1);//产生一个结点 //判断初始化时类型是否匹配 Type t3 = doExp(p3); elem1->type = t3; //将初始化时等号后面的变量类型赋给这个新结点 return elem1; break; } } return NULL; }
varElement* doExtDecList(TreeNode *p) { //printf("doExtDecList\n"); //这个函数会把同一语句中出现的变量串起来 switch (p->productionRule) { case 1:{ TreeNode *p1 = p->firstChild; varElement *elem1 = doVarDec(p1); return elem1; break; } case 2:{ TreeNode *p1 = p->firstChild; TreeNode *p3 = p1->rightBrother->rightBrother; varElement *elem1 = doVarDec(p1); varElement *elem2 = doExtDecList(p3); elem1->next = elem2; return elem1; break; } } }