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

📄 errorreport.h

📁 模拟了tec2000的所有功能
💻 H
字号:
#pragma once
#include<stdio.h>
char * error[]={                  //错误指针
	"无法打开.asm源文件",//0
	"这一行中有太多参数",//1
	"发现未配对的单引号",//2
	"发现非法结构:某对单引号中的字符数大于2,无法求值",//3
	"\'char1char2\'的值为(int)char1*256+(int)char2",//4
	"某16进制数出现异常",//5
	"可能原因:出现非法字符或字符串太长",//6
	"某10进制数出现异常",//7
	"可能原因:出现非法字符,字符串太长或是不能识别的立即数或标号",//8
	"操作数中无法识别的数据类型",//9
	"此行中有奇数个单引号",//10
	"系统提示:不支持转义字符",//11
	"END语句出现错误",//12
	"END语句不应有参数",//13
	"前面已检测到END语句",//14
	"ORG语句出现错误",//15
	"ORG语句带一个参数",//16
	"非初始ORG语句指定的地址不应小于当前地址",//17
	"DW语句出现错误",//18
	"DW语句后没有内容",//19
	"DW语句的某参数中发现未配对的单引号",//20
	"标号语句出现错误",//21
	"空标号错误",//22
	"EQU语句出现错误",//23
	"缺少操作数,EQU语句正确格式:{变量名} EQU {表达式}",//24
	"无法识别语句类型",//25
	"文件末尾未找到END语句",//26
	".asm源文件应以END语句结尾",//27
	"指令格式错误",//28
	"操作数个数错误",//29
	"在第一条指令前没有初始ORG语句指明基准地址",//30
	"无法继续汇编",//31
	"非法寄存器指定语句(DR)",//32
	"系统提示:类号23的指令格式为OP DR",//33
	"系统提示:类号22的指令格式为OP SR",//34
	"系统提示:类号1的指令格式为OP DR SR",//35
	"非法寄存器指定语句(SR)",//36
	"操作数中发生与方括号有关的错误",//37
	"可能原因:没有方括号或方括号未配对",//38
	"系统提示:LDRR DR,[SR]",//39
	"系统提示:STRR [DR],SR",//40
	"系统提示:MVRD DR,DATA",//41
	"表达式求值时发生除零错误",//42
	"系统提示:LDRA DR,[ADR]",//43
	"系统提示:STRA [ADR],SR",//44
	"系统提示:STRX/LDRX DR, offset[SR]",//45 
	"无法创建.cod文件",//46
};

class Error{                         //错误类
	friend class ErrorReport;
private:
	int line;			             //.asm文件出错所在行数 
	int des;	                     //error[]中对应出错指针
	Error * next;		
public:
	Error(int l,int d):line(l),des(d),next(NULL){}
	~Error(void){}
    int GetLineNum(void){return line;}
	int GetDes(void){return des;}
	int CompareLineNum(Error *);
	Error * GetNext(void){ return next;}

};

int Error::CompareLineNum(Error * e){   //比较出错对象
	int eLine;
	if(e==NULL)return -1;
	else{
		eLine=e->GetLineNum();
		if(line==eLine)return 1;
		else return -1;
	}
}


class ErrorReport {           //出错对象链表类

private:
	Error * head;
	int errorCount;           //记载出错的个数
	int p;                    //buffer[]中指针 
	char buffer[4096];        //用于输出出错记录 
public:
	ErrorReport(void):head(NULL),errorCount(0),p(0){buffer[0]='\0';}
	~ErrorReport(void){Clear();}
	Error * GetHead(void){return head;}
	void Clear(void);
    void AddError(int,int);
	char * ToString(void);
	int GetErrorCount(void) { return this->errorCount; }
};

void ErrorReport::AddError(int l,int d){   //发现出错,将对应错误对象加入ErrorReport链表
	Error * newerror,* temp;
	newerror=new Error(l,d);
	if(head==NULL)head=newerror;
	else{
		temp=head;
	while(temp->next != NULL){temp=temp->next;}
	temp->next=newerror;
	
	}
	errorCount++;
}

void ErrorReport::Clear(void){               //析构
	static Error * k=head;
	while(k!=NULL){
		head = head->next;
		delete k;
		k=head;
	}
	p=0;
	errorCount=0;
	buffer[0]='\0';
}

char * ErrorReport::ToString(void)          //将ErrorReport各节点对象中的出错记录输出到buffer中
{
	int i,line;
	static char ch, * des;
	Error * k=head;
	while(k!=NULL){
		line=k->GetLineNum();
		if(line!=0)p+=sprintf(buffer+p,"Line %d:",line);
		//
		i=0;
		des=error[k->GetDes()];
		p+=sprintf(buffer+p,"%s",des);
		buffer[p++]='\r';
		buffer[p++]='\n';
		//
		k=k->next;
	}
	buffer[p++]='\0';
	return buffer;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -