📄 codeeditview.cpp
字号:
case LeadBEExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'!' or identifier or '(' expected while '%s' found",m_word);
}
break;
case LeadBTExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'!' or identifier or '(' expected while '%s' found",m_word);
}
break;
case LeadBFExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'!' or identifier or '(' expected while '%s' found",m_word);
}
break;
case OperandExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'Operand' expected while '%s' found",m_word);
}
break;
case OperatorExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'Operator' expected while '%s' found",m_word);
}
break;
case ComparisonOpExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'ComparisonOp' expected while '%s' found",m_word);
}
break;
case ThenExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'then' expected while '%s' found",m_word);
}
break;
case IDExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'identifier' expected while '%s' found",m_word);
}
break;
case DoExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'Do' expected while '%s' found",m_word);
}
break;
case ASSIGNExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'ASSIGN' expected while '%s' found",m_word);
}
break;
case SEMIExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'SEMI' expected while '%s' found",m_word);
}
break;
case LPARENExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'LPAREN' expected while '%s' found",m_word);
}
break;
case RPARENExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'RPAREN' expected while '%s' found",m_word);
}
break;
case COMMAExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'COMMA' expected while '%s' found",m_word);
}
break;
case COLONExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'COLON' expected while '%s' found",m_word);
}
break;
case RCUTExcept:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'RCUT' expected while '%s' found",m_word);
}
break;
case UndeclaredId:
{
CString m_word;
int position = m_cCompiler.m_eErrorTable[ i ].Position;
m_word = m_cCompiler.m_dModel[ position ].TokenString;
if (m_word == ""){//说明不是标志符,也不是数字
m_word = TypeToStr(m_cCompiler.m_dModel[ position ].TokenType);
}
Detail.Format("'%s' : undeclared identifier",m_word);
}
break;
case IdRedefinition:
{
int position = m_cCompiler.m_eErrorTable[ i ].Position;
CString word = m_cCompiler.m_Variable[ position ];
Detail.Format("'%s' : Redefinition",word);
}
break;
case COLONMiss:
{
Detail.Format("miss ':' before integer or real");
}
break;
case ExtraWordAfterEnd:
{
Detail.Format("unexpected end of file");
}
break;
case ExtraSEMI:
{
Detail.Format("Extra ; before else");
}
break;
case SEMIMiss:
{
Detail.Format("miss ; before S语句");
}
break;
case TypeUnsuited:
{
Detail.Format("Type Unsuitable ");
}
break;
default:
break;
}
CString ErrorMsg = "";
ErrorMsg.Format("Line(%d): error P00%d: %s",
m_cCompiler.m_eErrorTable[i].OccurLine,
m_cCompiler.m_eErrorTable[i].ErrorType,Detail);
pFrame->m_pMsgView->AddMsg(ErrorMsg);
}
}
CString CCodeEditView::GetOp(int OP)
{
CString Opstr = "";
switch( OP ){
case PLUS:
Opstr = "+";
break;
case TIMES:
Opstr = "*";
break;
case SUB:
Opstr = "-";
break;
case ASSIGN:
Opstr = ":=";
break;
case EQ :
Opstr = "j=";
break;
case LT:
Opstr = "j<";
break;
case LE :
Opstr = "j<=";
break;
case GT:
Opstr = "j>";
break;
case GE :
Opstr = "j>=";
break;
case NE:
Opstr = "j<>";
break;
case JMP :
Opstr = "jmp";
break;
case JNZ:
Opstr = "jnz";
break;
default:
break;
}
return Opstr;
}
CString CCodeEditView::GetArg1(int OP,int arg,vector<SymbolRecord> SymbolRecord)
{
if(OP==JMP) {//跳转语句的操作数缺省
arg1type = 3;//无意义缺省的参数
return "0";
}
CString Argstr = "";
if(arg >= 0){//到符号表中去找
if(SymbolRecord[arg].TokenType==INTEGER||SymbolRecord[arg].TokenType==REAL){//是变量
arg1type = 1;
Argstr = SymbolRecord[arg].TokenString;
return Argstr;
}
else{
if(SymbolRecord[arg].TokenType==INTNUM){//是整型常数
arg1type = 0;
Argstr = SymbolRecord[arg].TokenString;
return Argstr;
}
else{
int u = SymbolRecord[arg].TokenType ;
Argstr = SymbolRecord[arg].TokenString;
}
}
}
else{//是临时变量
int Num = -arg ;
Argstr.Format("T%d",Num);
arg1type = 2;
return Argstr;
}
return Argstr;
}
CString CCodeEditView::GetArg2(int OP,int arg,vector<SymbolRecord> SymbolRecord)
{
if(OP==JMP||OP==ASSIGN||OP==JNZ){
arg2type = 3;
return "0";
}
CString Argstr = "";
if(arg >= 0){//到符号表中去找
if(SymbolRecord[arg].TokenType==INTEGER||SymbolRecord[arg].TokenType==REAL){//是变量
arg2type = 1;
Argstr = SymbolRecord[arg].TokenString;
}
else{
if(SymbolRecord[arg].TokenType==INTNUM){//是整型常数
arg2type = 0;
Argstr = SymbolRecord[arg].TokenString;
}
else Argstr = SymbolRecord[arg].TokenString;
}
}
else{//是临时变量
int Num = -arg ;
arg2type = 2;
Argstr.Format("T%d",Num);
}
return Argstr;
}
CString CCodeEditView::GetResult(int OP, int arg, vector<SymbolRecord> SymbolRecord)
{
CString Argstr = "";
if(OP==ASSIGN||OP==SUB||OP==PLUS||OP==TIMES){
//这些语句结果为变量或临时变量
if(arg >= 0){//是变量
resulttype = 1;
Argstr = SymbolRecord[arg].TokenString;
}
else{//是临时变量
resulttype = 2;
int Num = -arg ;
Argstr.Format("T%d",Num);
}
}
else{
//result域中为四元式编号
resulttype = 0;
Argstr.Format("%d",arg);
}
return Argstr;
}
CString CCodeEditView::TypeToStr(int type)
{
switch(type){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -