📄 calc_yacc.y
字号:
case IFX: if(p_node->node_data.op.op_n > 2) { char m_LabStrA[16]; char m_LabStrB[16]; /*if else*/ cc_builder(p_node->node_data.op.op_s[0]); zzlabel(m_LabStrA); fprintf(asout, "jump_z %s\n", m_LabStrA); cc_builder(p_node->node_data.op.op_s[1]); zzlabel(m_LabStrB); fprintf(asout, "jump %s\n", m_LabStrB); fprintf(asout, "label: %s\n", m_LabStrA); cc_builder(p_node->node_data.op.op_s[2]); fprintf(asout, "label: %s\n", m_LabStrB); } else { char m_LabStrA[16]; /*if then*/ cc_builder(p_node->node_data.op.op_s[0]); zzlabel(m_LabStrA); fprintf(asout, "jump_z %s\n", m_LabStrA); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout, "label: %s\n", m_LabStrA); } break; case GOTO: fprintf(asout,"jump %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); break; case LABE: fprintf(asout,"label: %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); cc_builder(p_node->node_data.op.op_s[1]); break; case DO: /* do ... while(...); */ { char m_LabStrA[16]; zzlabel(m_LabStrA); fprintf(asout, "label: %s\n", m_LabStrA); cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout, "jump_n %s\n", m_LabStrA); } break; case WH: /* while(...) ... */ { char m_LabStrA[16]; char m_LabStrB[16]; zzlabel(m_LabStrA); fprintf(asout, "label: %s\n", m_LabStrA); cc_builder(p_node->node_data.op.op_s[0]); zzlabel(m_LabStrB); fprintf(asout, "jump_z %s\n", m_LabStrB); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout, "jump %s\n", m_LabStrA); fprintf(asout, "label: %s\n", m_LabStrB); } break; case CALL: { int i = cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"push_i %d\n",i); fprintf(asout,"call_f %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); } break; case ',': { int i = cc_builder(p_node->node_data.op.op_s[0]); int j = cc_builder(p_node->node_data.op.op_s[1]); return(i + j); } break; case ';': cc_builder(p_node->node_data.op.op_s[0]); fprintf(asout,"cn_pop\n"); break; case ASSIGN: /* = */ cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"assign %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); break; case ASSADD: /* += */ cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"as_add %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); break; case ASSSUB: /* -= */ cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"as_sub %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); break; case ASSMUL: /* *= */ cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"as_mul %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); break; case ASSDIV: /* /= */ cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"as_div %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); break; case ASSBAL: /* %= */ cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"as_bal %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); break; case ASSAND: /* &= */ cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"as_and %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); break; case ASSXOR: /* ^= */ cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"as_xor %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); break; case ASSOOR: /* |= */ cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"as_or %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); break; case ASSSHL: /* <<= */ cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"as_shl %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); break; case ASSSHR: /* >>= */ cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"as_shr %s\n", p_node-> node_data.op.op_s[0]-> node_data.id.s_label); break; case OOR:/*||*/ cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"lg_or \n"); break; case AND:/*&&*/ cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"lg_and\n"); break; case '|': cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"bt_or \n"); break; case '^': cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"bt_xor\n"); break; case '&': cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"bt_and\n"); break; case CNE: cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"cmp_ne \n"); break; case CEQ: cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"cmp_eq \n"); break; case CLE:/*<=*/ cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"cmp_le \n"); break; case CGE:/*>=*/ cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"cmp_ge \n"); break; case '<': cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"cmp_l \n"); break; case '>': cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"cmp_g \n"); break; case SHL:/*<<*/ cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"bt_shl\n"); break; case SHR:/*>>*/ cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"bt_shr\n"); break; case '+': cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"nb_add\n"); break; case '-': cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"nb_sub\n"); break; case '*': cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"nb_mul\n"); break; case '/': cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"nb_div\n"); break; case '%': cc_builder(p_node->node_data.op.op_s[0]); cc_builder(p_node->node_data.op.op_s[1]); fprintf(asout,"nb_bal\n"); break; case '!': cc_builder(p_node->node_data.op.op_s[0]); fprintf(asout,"lg_not\n"); break; case '~': cc_builder(p_node->node_data.op.op_s[0]); fprintf(asout,"bt_not\n"); break; case UMI: cc_builder(p_node->node_data.op.op_s[0]); fprintf(asout,"nb_umi\n"); break; default: return(0); } break; default: return(0); } return(1); } return(0);}void yyerror(char *s){}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -