⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calc_yacc.y

📁 绘制一元函数曲线的工具 输入C语言语法的函数公式, 即可绘制函数的二维曲线 采用内置编译器和虚拟机(这是调整OK的版本)
💻 Y
📖 第 1 页 / 共 2 页
字号:
                    fprintf(asout, "label: %s\n", m_LabStrC);                    cc_builder(p_node->node_data.op.op_s[0]);                    cc_builder(p_node->node_data.op.op_s[1]);                    fprintf(asout, "jmp_nz %s\n", m_LabStrC);                    fprintf(asout, "label: %s\n", m_LabStrB);                    g_label_break = m_OldLabB;                    g_label_conti = m_OldLabC;                }                break;            case FOR: /* for(... ; ... ; ...) ... */                {                    char  m_LabStrA[8];                    char  m_LabStrB[8];                    char  m_LabStrC[8];                    char *m_OldLabB;                    char *m_OldLabC;                    zzlabel(m_LabStrA);                    zzlabel(m_LabStrB);                    zzlabel(m_LabStrC);                    m_OldLabB = g_label_break;                    m_OldLabC = g_label_conti;                    g_label_break = m_LabStrB;                    g_label_conti = m_LabStrC;                    cc_exp_for(p_node->node_data.op.op_s[0]);                    fprintf(asout, "label: %s\n", m_LabStrA);                    if(cc_builder(p_node->node_data.op.op_s[1]))                        fprintf(asout, "jmp_ez %s\n", m_LabStrB);                    cc_builder(p_node->node_data.op.op_s[3]);                    fprintf(asout, "label: %s\n", m_LabStrC);                    cc_exp_for(p_node->node_data.op.op_s[2]);                    fprintf(asout, "jmp_to %s\n", m_LabStrA);                    fprintf(asout, "label: %s\n", m_LabStrB);                    g_label_break = m_OldLabB;                    g_label_conti = m_OldLabC;                }                break;            case WHILE: /* while(...) ...     */                {                    char  m_LabStrB[8]; /*break*/                    char  m_LabStrC[8]; /*conti*/                    char *m_OldLabB;                    char *m_OldLabC;                    zzlabel(m_LabStrB);                    zzlabel(m_LabStrC);                    m_OldLabB = g_label_break;                    m_OldLabC = g_label_conti;                    g_label_break = m_LabStrB;                    g_label_conti = m_LabStrC;                    fprintf(asout, "label: %s\n", m_LabStrC);                    cc_builder(p_node->node_data.op.op_s[0]);                    fprintf(asout, "jmp_ez %s\n", m_LabStrB);                    cc_builder(p_node->node_data.op.op_s[1]);                    fprintf(asout, "jmp_to %s\n", m_LabStrC);                    fprintf(asout, "label: %s\n", m_LabStrB);                    g_label_break = m_OldLabB;                    g_label_conti = m_OldLabC;                }                break;            case BREAK:                if(NULL != g_label_break)                    fprintf(asout, "jmp_to %s\n", g_label_break);                break;            case CONTI:                if(NULL != g_label_conti)                    fprintf(asout, "jmp_to %s\n", g_label_conti);                break;            case GOTO:                fprintf(asout,"jmp_to %s\n", p_node->                        node_data.op.op_s[0]->                        node_data.id.s_label);                break;            case LABEL:                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 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,"pop_lo\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,"add_as %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,"sub_as %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,"mul_as %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,"div_as %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,"rem_as %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,"and_as %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,"xor_as %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,"oor_as %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,"shl_as %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,"shr_as %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,"oor_lg\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,"and_lg\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,"oor_bt\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,"xor_bt\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,"and_bt\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_ll\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_gg\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,"shl_bt\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,"shr_bt\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,"add_nb\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,"sub_nb\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,"mul_nb\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,"div_nb\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,"rem_nb\n");                break;            case '!':                cc_builder(p_node->node_data.op.op_s[0]);                fprintf(asout,"not_lg\n");                break;            case '~':                cc_builder(p_node->node_data.op.op_s[0]);                fprintf(asout,"not_bt\n");                break;            case UMI:                cc_builder(p_node->node_data.op.op_s[0]);                fprintf(asout,"umi_nb\n");                break;            case INCB: /* before, ++ v */                fprintf(asout,"inc_bf %s\n", p_node->                        node_data.op.op_s[0]->                        node_data.id.s_label);                break;            case DECB: /* before, -- v */                fprintf(asout,"dec_bf %s\n", p_node->                        node_data.op.op_s[0]->                        node_data.id.s_label);                break;            case INCA: /* after,  v ++ */                fprintf(asout,"inc_af %s\n", p_node->                        node_data.op.op_s[0]->                        node_data.id.s_label);                break;            case DECA: /* after,  v -- */                fprintf(asout,"dec_af %s\n", p_node->                        node_data.op.op_s[0]->                        node_data.id.s_label);                break;            default:                return(0);            }            break;        default:            return(0);        }        return(1);    }    return(0);}void cc_exp_for(Node *p_node){    if(NULL != p_node)    {        /*p_node->node_type = TYPE_OP      */        /*p_node->node_data.op.oper == ',' */        /*p_node->node_data.op.op_n ==  2  */        cc_exp_for(p_node->node_data.op.op_s[0]);        cc_builder(p_node->node_data.op.op_s[1]);        fprintf(asout,"pop_lo\n");    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -