📄 nepc.c
字号:
else if(pret1->type==typeFlt && pret2->type==typeInt) { pret1->fval += pret2->ival; free(pret2); return pret1; } else if(pret1->type==typeStr && pret2->type==typeStr) { int m=strlen(pret1->pstr); int n=strlen(pret2->pstr); char *s= malloc(m+n+1); strncpy(s,pret1->pstr,m); strncat(s,pret2->pstr,n); s[m+n]='\0'; free(pret1->pstr); free(pret2->pstr); pret1->pstr=s; return pret1; } else { free(pret1); free(pret2); pret->ival=0; return pret; } break; case '-': pret1=interpret(p->opr.op[0]); pret2=interpret(p->opr.op[1]); if( NULL==pret1 || NULL==pret2) { free(pret1); free(pret2); return NULL; } if(pret1->type==typeInt && pret2->type==typeInt) { pret1->ival -= pret2->ival; free(pret2); return pret1; } else if(pret1->type==typeFlt && pret2->type==typeFlt) { pret1->fval -= pret2->fval; free(pret2); return pret1; } else if(pret1->type==typeInt && pret2->type==typeFlt) { pret2->fval = pret1->ival - pret2->fval; free(pret1); return pret2; } else if(pret1->type==typeFlt && pret2->type==typeInt) { pret1->fval -= pret2->ival; free(pret2); return pret1; } else { free(pret1); free(pret2); pret->ival=0; return pret; } break; case '*': pret1=interpret(p->opr.op[0]); pret2=interpret(p->opr.op[1]); if( NULL==pret1 || NULL==pret2) { free(pret1); free(pret2); return NULL; } if(pret1->type==typeInt && pret2->type==typeInt) { pret1->ival *= pret2->ival; free(pret2); return pret1; } else if(pret1->type==typeFlt && pret2->type==typeFlt) { pret1->fval *= pret2->fval; free(pret2); return pret1; } else if(pret1->type==typeInt && pret2->type==typeFlt) { pret2->fval *= pret1->ival; free(pret1); return pret2; } else if(pret1->type==typeFlt && pret2->type==typeInt) { pret1->fval *= pret2->ival; free(pret2); return pret1; } else { free(pret1); free(pret2); pret->ival=0; return pret; } break; case '/': pret1=interpret(p->opr.op[0]); pret2=interpret(p->opr.op[1]); if( NULL==pret1 || NULL==pret2) { free(pret1); free(pret2); return NULL; } if(pret1->type==typeInt && pret2->type==typeInt) { if(pret2->ival == 0) { pret1->fval /= pret2->ival; pret1->type = typeFlt; } else pret1->ival /= pret2->ival; free(pret2); return pret1; } else if(pret1->type==typeFlt && pret2->type==typeFlt) { pret1->fval /= pret2->fval; free(pret2); return pret1; } else if(pret1->type==typeInt && pret2->type==typeFlt) { pret2->fval = pret1->ival / pret2->fval; free(pret1); return pret2; } else if(pret1->type==typeFlt && pret2->type==typeInt) { pret1->fval /= pret2->ival; free(pret2); return pret1; } else { free(pret1); free(pret2); pret->ival=0; return pret; } break; case '<': pret1=interpret(p->opr.op[0]); pret2=interpret(p->opr.op[1]); if( NULL==pret1 || NULL==pret2) { free(pret1); free(pret2); return NULL; } if(pret1->type==typeInt && pret2->type==typeInt) { if(pret1->ival < pret2->ival) pret->ival =1 ; else pret->ival=0; } else if(pret1->type==typeFlt && pret2->type==typeFlt) { if(pret1->fval < pret2->fval) pret->ival =1 ; else pret->ival=0; } else if(pret1->type==typeInt && pret2->type==typeFlt) { if(pret1->ival < pret2->fval) pret->ival =1 ; else pret->ival=0; } else if(pret1->type==typeFlt && pret2->type==typeInt) { if(pret1->fval < pret2->ival) pret->ival =1 ; else pret->ival=0; } else { pret->ival=0; } free(pret1); free(pret2); return pret; break; case '>': pret1=interpret(p->opr.op[0]); pret2=interpret(p->opr.op[1]); if( NULL==pret1 || NULL==pret2) { free(pret1); free(pret2); return NULL; } if(pret1->type==typeInt && pret2->type==typeInt) { if(pret1->ival > pret2->ival) pret->ival =1 ; else pret->ival=0; } else if(pret1->type==typeFlt && pret2->type==typeFlt) { if(pret1->fval > pret2->fval) pret->ival =1 ; else pret->ival=0; } else if(pret1->type==typeInt && pret2->type==typeFlt) { if(pret1->ival > pret2->fval) pret->ival =1 ; else pret->ival=0; } else if(pret1->type==typeFlt && pret2->type==typeInt) { if(pret1->fval > pret2->ival) pret->ival =1 ; else pret->ival=0; } else { pret->ival=0; } free(pret1); free(pret2); return pret; break; case '%': pret1=interpret(p->opr.op[0]); pret2=interpret(p->opr.op[1]); if( NULL==pret1 || NULL==pret2) { free(pret1); free(pret2); return NULL; } if(pret1->type==typeInt && pret2->type==typeInt) { pret->ival=pret1->ival % pret2->ival ; } else if(pret1->type==typeFlt && pret2->type==typeFlt) { pret->ival= (INT)(pret1->fval) % pret2->ival; } else if(pret1->type==typeInt && pret2->type==typeFlt) { pret->ival=pret1->ival % (INT)(pret2->fval) ; } else if(pret1->type==typeFlt && pret2->type==typeInt) { pret->ival=(INT)(pret1->ival) % (INT)(pret2->ival) ; } else { pret->ival=0; } free(pret1); free(pret2); return pret; break; case AND: pret1=interpret(p->opr.op[0]); pret2=interpret(p->opr.op[1]); if( NULL==pret1 || NULL==pret2) { free(pret1); free(pret2); return NULL; } if(pret1->type==typeInt && pret2->type==typeInt) { pret->ival=pret1->ival && pret2->ival ; } else if(pret1->type==typeFlt && pret2->type==typeFlt) { pret->ival= (INT)(pret1->fval) && pret2->ival; } else if(pret1->type==typeInt && pret2->type==typeFlt) { pret->ival=pret1->ival && (INT)(pret2->fval) ; } else if(pret1->type==typeFlt && pret2->type==typeInt) { pret->ival=(INT)(pret1->ival) && (INT)(pret2->ival) ; } else { pret->ival=0; } free(pret1); free(pret2); return pret; break; case OR: pret1=interpret(p->opr.op[0]); pret2=interpret(p->opr.op[1]); if( NULL==pret1 || NULL==pret2) { free(pret1); free(pret2); return NULL; } if(pret1->type==typeInt && pret2->type==typeInt) { pret->ival=pret1->ival || pret2->ival ; } else if(pret1->type==typeFlt && pret2->type==typeFlt) { pret->ival= (INT)(pret1->fval) || pret2->ival; } else if(pret1->type==typeInt && pret2->type==typeFlt) { pret->ival=pret1->ival || (INT)(pret2->fval) ; } else if(pret1->type==typeFlt && pret2->type==typeInt) { pret->ival=(INT)(pret1->ival) || (INT)(pret2->ival) ; } else { pret->ival=0; } free(pret1); free(pret2); return pret; break; case GE: pret1=interpret(p->opr.op[0]); pret2=interpret(p->opr.op[1]); if( NULL==pret1 || NULL==pret2) { free(pret1); free(pret2); return NULL; } if(pret1->type==typeInt && pret2->type==typeInt) { if(pret1->ival >= pret2->ival) pret->ival =1 ; else pret->ival=0; } else if(pret1->type==typeFlt && pret2->type==typeFlt) { if(pret1->fval >= pret2->fval) pret->ival =1 ; else pret->ival=0; } else if(pret1->type==typeInt && pret2->type==typeFlt) { if(pret1->ival >= pret2->fval) pret->ival =1 ; else pret->ival=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -