📄 casl.y
字号:
g_iCurrentEARegNumber = 1;
}
| GR2
{
g_iCurrentEARegNumber = 2;
}
| GR3
{
g_iCurrentEARegNumber = 3;
}
| GR4
{
g_iCurrentEARegNumber = 4;
}
;
STSTMT: LBLSTMT { g_tempCode.iSrcCodeLineNumber = g_iLineNumber;}
ST GR','EA NEW_LINE
{
if (NULL != $1)
{
g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
free((char*)$1);
}
g_tempCode.type = CASL_ST;
g_tempCode.operand1.type = REG_OPERAND;
g_tempCode.operand1.OperandVal.regOperand.regNumber = g_iCurrentRegNumber;
g_tempCode.operand2.type = EA_OPERAND;
//对于EA地址操作数的处理比较麻烦!!!!!!
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++;
}
;
LEASTMT: LBLSTMT { g_tempCode.iSrcCodeLineNumber = g_iLineNumber;}
LEA GR','EA NEW_LINE
{
if (NULL != $1)
{
g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
free((char*)$1);
}
g_tempCode.type = CASL_LEA;
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++;
}
;
MATHSTMT: ADDSTMT | SUBSTMT;
ADDSTMT: LBLSTMT { g_tempCode.iSrcCodeLineNumber = g_iLineNumber;}
ADD GR','EA NEW_LINE
{
if (NULL != $1)
{
g_mapLabel.insert(LabelMap::value_type(g_lCurrentParseCodeNumber, (char*)$1));
free((char*)$1);
}
g_tempCode.type = CASL_ADD;
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++;
}
;
SUBSTMT: LBLSTMT { g_tempCode.iSrcCodeLineNumber = g_iLineNumber;}
SUB GR ',' EA NEW_LINE
{
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_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
g_vecIntermediateCode.push_back(g_tempCode);
//将下一个Parse的代码的编号加一
g_lCurrentParseCodeNumber++;
}
;
LOGSTMT: ANDSTMT | ORSTMT | EORSTMT;
ANDSTMT: LBLSTMT { g_tempCode.iSrcCodeLineNumber = g_iLineNumber;}
AND GR ',' EA NEW_LINE
{
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_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
g_vecIntermediateCode.push_back(g_tempCode);
//将下一个Parse的代码的编号加一
g_lCurrentParseCodeNumber++;
}
;
ORSTMT: LBLSTMT { g_tempCode.iSrcCodeLineNumber = g_iLineNumber;}
OR GR ',' EA NEW_LINE
{
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_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
g_vecIntermediateCode.push_back(g_tempCode);
//将下一个Parse的代码的编号加一
g_lCurrentParseCodeNumber++;
}
;
EORSTMT: LBLSTMT { g_tempCode.iSrcCodeLineNumber = g_iLineNumber;}
EOR GR ',' EA NEW_LINE
{
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_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
g_vecIntermediateCode.push_back(g_tempCode);
//将下一个Parse的代码的编号加一
g_lCurrentParseCodeNumber++;
}
;
RELSTMT: CPASTMT |
CPLSTMT |
SLASTMT |
SRASTMT |
SLLSTMT |
SRLSTMT
CPASTMT: LBLSTMT { g_tempCode.iSrcCodeLineNumber = g_iLineNumber;}
CPA GR ',' EA NEW_LINE
{
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_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
g_vecIntermediateCode.push_back(g_tempCode);
//将下一个Parse的代码的编号加一
g_lCurrentParseCodeNumber++;
}
;
CPLSTMT: LBLSTMT { g_tempCode.iSrcCodeLineNumber = g_iLineNumber;}
CPL GR ',' EA NEW_LINE
{
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_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
g_vecIntermediateCode.push_back(g_tempCode);
//将下一个Parse的代码的编号加一
g_lCurrentParseCodeNumber++;
}
;
SLASTMT: LBLSTMT { g_tempCode.iSrcCodeLineNumber = g_iLineNumber;}
SLA GR ',' EA NEW_LINE
{
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_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
g_vecIntermediateCode.push_back(g_tempCode);
//将下一个Parse的代码的编号加一
g_lCurrentParseCodeNumber++;
}
;
SRASTMT: LBLSTMT { g_tempCode.iSrcCodeLineNumber = g_iLineNumber;}
SRA GR ',' EA NEW_LINE
{
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_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
g_vecIntermediateCode.push_back(g_tempCode);
//将下一个Parse的代码的编号加一
g_lCurrentParseCodeNumber++;
}
;
SLLSTMT: LBLSTMT { g_tempCode.iSrcCodeLineNumber = g_iLineNumber;}
SLL GR ',' EA NEW_LINE
{
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_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
g_vecIntermediateCode.push_back(g_tempCode);
//将下一个Parse的代码的编号加一
g_lCurrentParseCodeNumber++;
}
;
SRLSTMT: LBLSTMT { g_tempCode.iSrcCodeLineNumber = g_iLineNumber;}
SRL GR ',' EA NEW_LINE
{
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_tempCode.iSrcCodeLineNumber = g_iLineNumber - 1;
g_vecIntermediateCode.push_back(g_tempCode);
//将下一个Parse的代码的编号加一
g_lCurrentParseCodeNumber++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -