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

📄 casl.y.bak

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

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);
                                }
                                g_tempCode.type = CASL_SUB;
                                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_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            }
;
LOGSTMT: ANDSTMT | ORSTMT | EORSTMT;

ANDSTMT: LBLSTMT AND GR ',' EA
                            {

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);
                                }
                                g_tempCode.type = CASL_AND;
                                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_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            }
;
ORSTMT: LBLSTMT OR GR ','  EA
                            {

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);
                                }
                                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_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            }
;
EORSTMT: LBLSTMT EOR GR ',' EA
                            {

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);
                                }
                                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_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            }
;
RELSTMT: CPASTMT | 
	 CPLSTMT |
	 SLASTMT |
	 SRASTMT |
	 SLLSTMT |
	 SRLSTMT 

CPASTMT: LBLSTMT CPA GR ',' EA

                            {

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);
                                }
                                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_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            }
;
CPLSTMT: LBLSTMT CPL GR ',' EA

                            {

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);
                                }
                                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_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            }

;
SLASTMT: LBLSTMT SLA GR ',' EA

                            {

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);
                                }
                                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_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            }
;
SRASTMT: LBLSTMT SRA GR ',' EA

                            {

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);
                                }
                                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_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            }
;
SLLSTMT: LBLSTMT SLL GR ',' EA

                            {

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);
                                }
                                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_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            }
;
SRLSTMT: LBLSTMT SRL GR ',' EA

                            {

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);
                                }
                                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_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            }
;
CONDSTMT: JMPSTMT | 
	  JPZSTMT | 
	  JMISTMT |
	  JNZSTMT |
	  JZESTMT
JMPSTMT: LBLSTMT JMP EA

                            {

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);
                                }
                                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_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            }
;
JPZSTMT: LBLSTMT JPZ EA

                            {

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);
                                }
                                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_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            }
;
JMISTMT: LBLSTMT JMI EA

                            {

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);
                                }
                                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_vecIntermediateCode.push_back(g_tempCode);   
                                //将下一个Parse的代码的编号加一
                                g_lCurrentParseCodeNumber++;

                            }
;
JNZSTMT: LBLSTMT JNZ EA

                            {

                                if (NULL != $1)
                                {
                                    g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
                                    free((char*)$1);

⌨️ 快捷键说明

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