⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 error.cpp

📁 该程序是一个MiniPascal语言的编译器
💻 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 + -