📄 error.cpp
字号:
#include <iostream.h>
#include<string.h>
#include "keyword.h"
#include "global.h"
//*********************************************************************************************//
// 错误处理函数
//code:错误编码,lineno:出错语句所在行数
//错误的具体含义见语法分析部分parse.cpp
//**********************************************************************************************//
void error(int code,int lineno)
{
errorcount++;
cout<<"Line("<<lineno<<"):error C"<<code<<": ";
switch(code){
case 0:
cout<<"[ "<<errortype<<" ]: redefined!"<<endl;
break;
case 1:
char* s;
switch(lookahead)
{
case id :s="id";break;
case number:s="number";break;
case lpar:s="\'(\'";break;
case rpar:s="\')\'";break;
case plus_op :s="\'+\'";break;
case minus_op:s="\'-\'";break;
case relop_LT :s="\'<\'";break;
case relop_LE :s="\"<=\"";break;
case relop_EQ :s="\'=\'";break;
case relop_NE :s="\"<>\"";break;
case relop_GT :s="\'>\'";break;
case relop_GE :s="\">=\"";break;
case assign_op :s="\":=\"";break;
case semicolon :s="\';\'";break;
case colon :s="\':\'";break;
case multi_op :s="\'*\'";break;
case or_op :s="\"or\"";break;
case lbracket :s="\'[\'";break;
case rbracket :s="\']\'";break;
case comma :s="\',\'";break;
case dot :s="\'.\'";break;
case dotdot :s="\"..\"";break;
case lbrace :s="\'{\'";break;
case rbrace :s="\'}\'";break;
case Const :s="\"const\"";break;
case Boolean :s="\"boolean\"";break;
case Integer :s="\"integer\"";break;
case Type :s="\"type\"";break;
case Array :s="\"array\"";break;
case Of :s="\"of\"";break;
case Record :s="\"record\"";break;
case Begin :s="\"begin\"";break;
case End :s="\"end\"";break;
case Var :s="\"var\"";break;
case If :s="\"if\"";break;
case Then :s="\"then\"";break;
case Else :s="\"else\"";break;
case While :s="\"while\"";break;
case Do :s="\"do\"";break;
case Or :s="\"or\"";break;
case And :s="\"and\"";break;
case Div :s="\"div\"";break;
case Mod :s="\"mod\"";break;
case Not :s="\"not\"";break;
case Procedure :s="\"procedure\"";break;
case Program :s="\"program\"";break;
case Read :s="\"read\"";break;
case Write :s="\"write\"";break;
case True :s="\"true\"";break;
case False :s="\"false\"";break;
}
cout<<"{ "<<s<<" }: does not match!"<<endl;
break;
case 2:
cout<<"illegal variants definition !"<<endl;
break;
case 3:
cout<<"illegal initial value of boolean variable!"<<endl;
break;
case 4:
cout<<"wrong lower subscript of array!"<<endl;
break;
case 5:
cout<<"[ "<<token<<" ]: undefined type!"<<endl;
break;
case 6:
cout<<"boolean express should return true or false!"<<endl;
break;
case 7:
cout<<"cannot read to boolean variants!"<<endl;
break;
case 8:
cout<<"[ "<<token<<" ]: undefined characters!"<<endl;
break;
case 9:
cout<<"variants cannot convert from ";
if(rightvar<0)
cout<<"undefined type!";
else
cout<<typelist[rightvar].name;
cout<<" to "<<typelist[leftvar].name<<"!"<<endl;
break;
case 10:
cout<<"not enough parameters when calling procedure!"<<endl;
break;
case 11:
cout<<"illegal operations to booleans!"<<endl;
break;
case 12:
cout<<"addends should be integers!"<<endl;
break;
case 13:
cout<<"logical operations should be booleans!"<<endl;
break;
case 14:
cout<<"multiplicators should be integers!"<<endl;
break;
case 15:
cout<<"illegal attempt to change consts!"<<endl;
break;
case 16:
cout<<"variants are not compatible!"<<endl;
break;
case 17:
cout<<"."<<token<<" not found in fields!"<<endl;
break;
case 18:
cout<<Typename<<" : redefined!"<<endl;
break;
case 19:
cout<<"[ "<<ch<<" ]:illegal characters!"<<endl;
break;
case 20:
cout<<"defined type should be ARRAY or RECORD!"<<endl;
break;
// case 21:
// cout<<"illegal finish of program!"<<endl;
// break;
case 22:
cout<<"subscript of array cannot be booleans !"<<endl;
break;
case 23:
cout<<"\';\' is needed between the parameters!"<<endl;
break;
case 24:
cout<<parameterth<<"th parameter :\n address parameter desire actual parameter be only variants!"<<endl;
break;
case 25:
cout<<"[ "<<errortype<<" ]: not a const!"<<endl;
break;
case 26:cout<<"wrong upper subscript of array!"<<endl;
break;
case 27:cout<<"the lower subscript is greater than the upper!"<<endl;
break;
case 28:cout<<"\';\' is needed at the end of the sentence!"<<endl;
break;
case 29:cout<<"the last sentence of record cannot end with \';\'!"<<endl;
break;
case 30:cout<<"\"..\" is needed in the sentence!"<<endl;
break;
case 31:cout<<"\']\' is needed in the sentence!"<<endl;
break;
case 32:cout<<"\')\' is needed in the sentence!"<<endl;
break;
case 33:cout<<"unexpected end of file found!"<<endl;
break;
case 34:cout<<"more than enough parameters when calling procedure!"<<endl;
break;
default:
cout<<"undefined error!"<<endl;
}
cout<<endl;//
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -