📄 casl.y.bak
字号:
{
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 + -