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

📄 casl_tab.c

📁 这是一个软件水平资格考试中使用的CASL汇编语言的编译器,实现文件中包括一个编译器,一个虚拟机,一个类似于Debug的调试器.
💻 C
📖 第 1 页 / 共 5 页
字号:
                                g_lCurrentParseCodeNumber++;

                            ;
    break;}
case 67:
#line 456 "casl.y"
{ g_tempCode.iSrcCodeLineNumber = g_iLineNumber;;
    break;}
case 68:
#line 458 "casl.y"
{

                                if (NULL != yyvsp[-6])
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)yyvsp[-6]));
                                    free((char*)yyvsp[-6]);
                                }
                                g_tempCode.type = CASL_OR;
                                g_tempCode.operand1.type = REG_OPERAND;
                                g_tempCode.operand1.OperandVal.regOperand.regNumber = g_iCurrentRegNumber;
                                g_tempCode.operand2.type = EA_OPERAND;
                                g_tempCode.operand2.OperandVal.eaOperand.regNumber = g_iCurrentEARegNumber;
                                g_tempCode.operand2.OperandVal.eaOperand.address = g_currentEAAddress;
//                                g_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
                                g_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            ;
    break;}
case 69:
#line 478 "casl.y"
{ g_tempCode.iSrcCodeLineNumber = g_iLineNumber;;
    break;}
case 70:
#line 480 "casl.y"
{

                                if (NULL != yyvsp[-6])
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)yyvsp[-6]));
                                    free((char*)yyvsp[-6]);
                                }
                                g_tempCode.type = CASL_EOR;
                                g_tempCode.operand1.type = REG_OPERAND;
                                g_tempCode.operand1.OperandVal.regOperand.regNumber = g_iCurrentRegNumber;
                                g_tempCode.operand2.type = EA_OPERAND;
                                g_tempCode.operand2.OperandVal.eaOperand.regNumber = g_iCurrentEARegNumber;
                                g_tempCode.operand2.OperandVal.eaOperand.address = g_currentEAAddress;
//                                g_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
                                g_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            ;
    break;}
case 77:
#line 507 "casl.y"
{ g_tempCode.iSrcCodeLineNumber = g_iLineNumber;;
    break;}
case 78:
#line 510 "casl.y"
{

                                if (NULL != yyvsp[-6])
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)yyvsp[-6]));
                                    free((char*)yyvsp[-6]);
                                }
                                g_tempCode.type = CASL_CPA;
                                g_tempCode.operand1.type = REG_OPERAND;
                                g_tempCode.operand1.OperandVal.regOperand.regNumber = g_iCurrentRegNumber;
                                g_tempCode.operand2.type = EA_OPERAND;
                                g_tempCode.operand2.OperandVal.eaOperand.regNumber = g_iCurrentEARegNumber;
                                g_tempCode.operand2.OperandVal.eaOperand.address = g_currentEAAddress;
//                                g_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
                                g_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            ;
    break;}
case 79:
#line 530 "casl.y"
{ g_tempCode.iSrcCodeLineNumber = g_iLineNumber;;
    break;}
case 80:
#line 533 "casl.y"
{

                                if (NULL != yyvsp[-6])
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)yyvsp[-6]));
                                    free((char*)yyvsp[-6]);
                                }
                                g_tempCode.type = CASL_CPL;
                                g_tempCode.operand1.type = REG_OPERAND;
                                g_tempCode.operand1.OperandVal.regOperand.regNumber = g_iCurrentRegNumber;
                                g_tempCode.operand2.type = EA_OPERAND;
                                g_tempCode.operand2.OperandVal.eaOperand.regNumber = g_iCurrentEARegNumber;
                                g_tempCode.operand2.OperandVal.eaOperand.address = g_currentEAAddress;
//                                g_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
                                g_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            ;
    break;}
case 81:
#line 554 "casl.y"
{ g_tempCode.iSrcCodeLineNumber = g_iLineNumber;;
    break;}
case 82:
#line 557 "casl.y"
{

                                if (NULL != yyvsp[-6])
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)yyvsp[-6]));
                                    free((char*)yyvsp[-6]);
                                }
                                g_tempCode.type = CASL_SLA;
                                g_tempCode.operand1.type = REG_OPERAND;
                                g_tempCode.operand1.OperandVal.regOperand.regNumber = g_iCurrentRegNumber;
                                g_tempCode.operand2.type = EA_OPERAND;
                                g_tempCode.operand2.OperandVal.eaOperand.regNumber = g_iCurrentEARegNumber;
                                g_tempCode.operand2.OperandVal.eaOperand.address = g_currentEAAddress;
//                                g_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
                                g_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            ;
    break;}
case 83:
#line 577 "casl.y"
{ g_tempCode.iSrcCodeLineNumber = g_iLineNumber;;
    break;}
case 84:
#line 580 "casl.y"
{

                                if (NULL != yyvsp[-6])
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)yyvsp[-6]));
                                    free((char*)yyvsp[-6]);
                                }
                                g_tempCode.type = CASL_SRA;
                                g_tempCode.operand1.type = REG_OPERAND;
                                g_tempCode.operand1.OperandVal.regOperand.regNumber = g_iCurrentRegNumber;
                                g_tempCode.operand2.type = EA_OPERAND;
                                g_tempCode.operand2.OperandVal.eaOperand.regNumber = g_iCurrentEARegNumber;
                                g_tempCode.operand2.OperandVal.eaOperand.address = g_currentEAAddress;
//                                g_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
                                g_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            ;
    break;}
case 85:
#line 600 "casl.y"
{ g_tempCode.iSrcCodeLineNumber = g_iLineNumber;;
    break;}
case 86:
#line 603 "casl.y"
{

                                if (NULL != yyvsp[-6])
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)yyvsp[-6]));
                                    free((char*)yyvsp[-6]);
                                }
                                g_tempCode.type = CASL_SLL;
                                g_tempCode.operand1.type = REG_OPERAND;
                                g_tempCode.operand1.OperandVal.regOperand.regNumber = g_iCurrentRegNumber;
                                g_tempCode.operand2.type = EA_OPERAND;
                                g_tempCode.operand2.OperandVal.eaOperand.regNumber = g_iCurrentEARegNumber;
                                g_tempCode.operand2.OperandVal.eaOperand.address = g_currentEAAddress;
//                                g_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
                                g_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            ;
    break;}
case 87:
#line 623 "casl.y"
{ g_tempCode.iSrcCodeLineNumber = g_iLineNumber;;
    break;}
case 88:
#line 626 "casl.y"
{

                                if (NULL != yyvsp[-6])
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)yyvsp[-6]));
                                    free((char*)yyvsp[-6]);
                                }
                                g_tempCode.type = CASL_SRL;
                                g_tempCode.operand1.type = REG_OPERAND;
                                g_tempCode.operand1.OperandVal.regOperand.regNumber = g_iCurrentRegNumber;
                                g_tempCode.operand2.type = EA_OPERAND;
                                g_tempCode.operand2.OperandVal.eaOperand.regNumber = g_iCurrentEARegNumber;
                                g_tempCode.operand2.OperandVal.eaOperand.address = g_currentEAAddress;
//                                g_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
                                g_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            ;
    break;}
case 94:
#line 651 "casl.y"
{g_tempCode.iSrcCodeLineNumber = g_iLineNumber;;
    break;}
case 95:
#line 654 "casl.y"
{

                                if (NULL != yyvsp[-4])
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)yyvsp[-4]));
                                    free((char*)yyvsp[-4]);
                                }
                                g_tempCode.type = CASL_JMP;
                                g_tempCode.operand1.type = EA_OPERAND;
                                g_tempCode.operand1.OperandVal.eaOperand.regNumber = g_iCurrentEARegNumber;
                                g_tempCode.operand1.OperandVal.eaOperand.address = g_currentEAAddress;
                                g_tempCode.operand2.type = EMPTY_OPERAND;
//                                g_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
                                g_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            ;
    break;}
case 96:
#line 673 "casl.y"
{ g_tempCode.iSrcCodeLineNumber = g_iLineNumber;;
    break;}
case 97:
#line 676 "casl.y"
{

                                if (NULL != yyvsp[-4])
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)yyvsp[-4]));
                                    free((char*)yyvsp[-4]);
                                }
                                g_tempCode.type = CASL_JPZ;
                                g_tempCode.operand1.type = EA_OPERAND;
                                g_tempCode.operand1.OperandVal.eaOperand.regNumber = g_iCurrentEARegNumber;
                                g_tempCode.operand1.OperandVal.eaOperand.address = g_currentEAAddress;
                                g_tempCode.operand2.type = EMPTY_OPERAND;
//                                g_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
                                g_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            ;
    break;}
case 98:
#line 695 "casl.y"
{ g_tempCode.iSrcCodeLineNumber = g_iLineNumber;;
    break;}
case 99:
#line 698 "casl.y"
{

                                if (NULL != yyvsp[-4])
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)yyvsp[-4]));
                                    free((char*)yyvsp[-4]);
                                }
                                g_tempCode.type = CASL_JMI;
                                g_tempCode.operand1.type = EA_OPERAND;
                                g_tempCode.operand1.OperandVal.eaOperand.regNumber = g_iCurrentEARegNumber;
                                g_tempCode.operand1.OperandVal.eaOperand.address = g_currentEAAddress;
                                g_tempCode.operand2.type = EMPTY_OPERAND;
//                                g_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
                                g_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            ;
    break;}
case 100:
#line 717 "casl.y"
{ g_tempCode.iSrcCodeLineNumber = g_iLineNumber;;
    break;}
case 101:
#line 720 "casl.y"
{

                                if (NULL != yyvsp[-4])
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)yyvsp[-4]));
                                    free((char*)yyvsp[-4]);
                                }
                                g_tempCode.type = CASL_JNZ;
                                g_tempCode.operand1.type = EA_OPERAND;
                                g_tempCode.operand1.OperandVal.eaOperand.regNumber = g_iCurrentEARegNumber;
                                g_tempCode.operand1.OperandVal.eaOperand.address = g_currentEAAddress;
                                g_tempCode.operand2.type = EMPTY_OPERAND;
//                                g_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
                                g_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            ;
    break;}
case 102:
#line 739 "casl.y"
{ g_tempCode.iSrcCodeLineNumber = g_iLineNumber;;
    break;}
case 103:
#line 742 "casl.y"
{
                                                                            
                                if (NULL != yyvsp[-4])
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)yyvsp[-4]));
                                    free((char*)yyvsp[-4]);
                  

⌨️ 快捷键说明

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