📄 errors.cpp
字号:
#include "Errors.h"
#include "SymSet.h"
#include <iostream>
using namespace std;
Errors::Errors(PL0Compiler *pl)
{
initErrorMap();
pl0Compiler = pl;
numOfErrors = 0;
}
void Errors::initErrorMap()
{
errorMap.insert(errorVauleType(1,"超出最大位数值范围,应不大于2047"));
errorMap.insert(errorVauleType(2,"数字位数超过允许位数限制,应不大于14位"));
errorMap.insert(errorVauleType(3,"实数格式不正确,小数点后须紧跟数字"));
errorMap.insert(errorVauleType(4,"无效的标识符"));
errorMap.insert(errorVauleType(5,"标识符字符数超过限制,应不大于15位"));
errorMap.insert(errorVauleType(6,"超出最大嵌套层次限制"));
errorMap.insert(errorVauleType(7,"非法字符定义"));
errorMap.insert(errorVauleType(8,"非法转义字符"));
errorMap.insert(errorVauleType(9,"非法字符串"));
errorMap.insert(errorVauleType(10,"空字符"));
errorMap.insert(errorVauleType(11,"const, procedure,function,read,write后应为标识符"));
errorMap.insert(errorVauleType(12,"标识符后应为‘:=’"));
errorMap.insert(errorVauleType(13,"‘=’后应为数"));
errorMap.insert(errorVauleType(14,"缺少‘,’或‘;’或‘:’"));
errorMap.insert(errorVauleType(15,"缺少类型说明符"));
errorMap.insert(errorVauleType(16,"缺少过程或函数名"));
errorMap.insert(errorVauleType(17,"缺少‘)’"));
errorMap.insert(errorVauleType(18,"缺少‘const’或‘var’或‘function’或‘procedure’"));
errorMap.insert(errorVauleType(19,"缺少‘(’"));
errorMap.insert(errorVauleType(20,"不可向非变量赋值"));
errorMap.insert(errorVauleType(21,"未声明标识符"));
errorMap.insert(errorVauleType(22,"write函数格式错误"));
errorMap.insert(errorVauleType(23,"应为‘END’"));
errorMap.insert(errorVauleType(24,"应为‘begin’"));
errorMap.insert(errorVauleType(25,"过程或函数说明后符号不正确"));
errorMap.insert(errorVauleType(26,"函数或过程首部后符号不正确"));
errorMap.insert(errorVauleType(27,"表达式不能以此符号开始"));
errorMap.insert(errorVauleType(28,"表达室内不能有过程调用"));
errorMap.insert(errorVauleType(29,"因子后不能为此符号"));
errorMap.insert(errorVauleType(30,"标识符重定义"));
errorMap.insert(errorVauleType(32,"参数格式与声明不符"));
errorMap.insert(errorVauleType(33,"非函数标识符"));
errorMap.insert(errorVauleType(34,"非过程标识符"));
errorMap.insert(errorVauleType(35,"非法的语句开始符号"));
errorMap.insert(errorVauleType(36,"应为关系运算符"));
errorMap.insert(errorVauleType(37,"‘for’后应为整形变量"));
errorMap.insert(errorVauleType(38,"缺少‘to’"));
errorMap.insert(errorVauleType(39,"缺少‘do’"));
errorMap.insert(errorVauleType(40,"缺少‘then’"));
errorMap.insert(errorVauleType(41,"字符串常量不能参加运算"));
errorMap.insert(errorVauleType(53,"程序结尾应为‘.’"));
errorMap.insert(errorVauleType(51,"应为赋值符号"));
errorMap.insert(errorVauleType(52,"转换可能导致数据丢失"));
}
void Errors::addError(int errorCode)
{
if(numOfErrors < MAX_ERROR_NUM)
{
ErrCodeLoc.push_back( errorInsert(errorCode, getLocation()) );
numOfErrors++;
}
}
bool Errors::display()
{
bool flag = false;
errcode_loc::iterator iter = ErrCodeLoc.begin();
string temp;
for( ; iter != ErrCodeLoc.end(); iter++ )
{
//string errorInfo;
/*switch(iter->first)
{
case 1:
errorInfo = "超出最大位数值范围,应不大于2047";
break;
case 2:
errorInfo = "数字位数超过允许位数限制,应不大于14位";
break;
case 3:
errorInfo = "实数格式不正确,小数点后须紧跟数字";
break;
case 4:
errorInfo = "无效的标识符";
break;
case 5:
errorInfo = "标识符字符数超过限制,应不大于10位";
break;
}*/
if(iter->first < 50)
{
cout<<" error E"<<iter->first<<":\tline:"<<iter->second.first<<"\tcol:"<<iter->second.second<<":\t"<<errorMap[iter->first]<<endl;
flag = true;
}
else
cout<<"warning W"<<iter->first<<":\tline:"<<iter->second.first<<"\tcol:"<<iter->second.second<<":\t"<<errorMap[iter->first]<<endl;
}
cout<<"totally "<<numOfErrors<<"error(s)"<<endl;
return flag;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -