编译器错误处理系统
来源:互联网 发布:sql select where or 编辑:程序博客网 时间:2024/06/05 14:47
/*错误处理程序用到的枚举定义*//*错误级别*/enum e_ErrorLevel{ LEVEL_WARNING, LEVEL_ERROR,};/*工作阶段*/enum e_WorkStage{ STAGE_COMPILE, STAGE_LINK,};/**异常处理stage:编译阶段还是链接阶段level:错误级别fmt:参数输出格式ap:可变参数列表**/void handle_exception(int stage,int level,char *fmt,va_list ap){ char buf[1024]; vsprintf(buf,fmt,ap); /**把参数ap按照fmt的格式写入buf**/ if(stage==STAGE_COMPILE) { if(level==LEVEL_WARNING) printf("%s(第%d行):编译警告:%s!\n",filename,line_num,buf); /**filename文件名字,line_num行数是全局变量,在后面提到**/ else { printf("%s(第%d行):编译错误:%s!\n",filename,line_num,buf); exit(-1); } } else { printf("链接错误:%s!\n",buf); exit(-1); }}/**编译警告处理fmt:参数输出格式ap:可变参数列表**/void warning(char *fmt,...) /**fmt用来控制格式,...是具体要操作的参数**/{ va_list ap; va_start(ap,fmt); /**ap是个指针,va_start(ap,fmt)后,ap会指向fmt后面第一个变参**/ handle_exception(STAGE_COMPILE,LEVEL_WARNING,fmt,ap); va_end(ap);}/**编译致命错误处理fmt:参数输出格式ap:可变参数列表**/void error(char *fmt,...){ va_list ap; va_start(ap,fmt); handle_exception(STAGE_COMPILE,LEVEL_ERROR,fmt,ap); va_end(ap);}/**提示错误,此处缺少某个语法成分msg:需要什么语法成分**/void expect(char *msg){ error("缺少%s",msg);}/**跳过单词c,取下一个单词,如果当前单词不是c,提示错误c:要跳过的单词**/void skip(int c){ if(token!=c) error("缺少'%s'",get_tkstr(c)); get_token();}/**取得单词v所代表的源码字符串v:单词编号**/char *get_tkstr(int v){ if(v>tktable.count) /**不在单词表内**/ return NULL; else if(v>=TK_CINT&&v<=TK_CSTR) return sourcestr.data; /**sourcestr是源码字符串,后面会提到,现在不用管**/ else return ((TkWord*)tktable.data[v])->spelling;}/**链接错误处理fmt:参数输出格式ap:可变参数列表**/void link_error(char *fmt,...){ va_list ap; va_start(ap,fmt); handle_exception(STAGE_LINK,LEVEL_ERROR,fmt,ap); va_end(ap);}
0 0
- 编译器错误处理系统
- BCB编译器错误处理sizeof运算符漏洞
- 编译器错误信息: CS0016: 未能写入输出文件 错误处理
- 编译全攻略-编译器处理及LNK错误的解决方法
- 编译器处理警告、错误 #pragma GCC diagnostic ignored "-Wunused"
- Web系统错误日志处理
- 系统级别错误统一处理
- REVIT二次开发 系统错误处理
- 自建windows错误处理系统
- 语言处理系统结构与编译器编译步骤
- 学生信息管理系统(二)----错误处理
- Linux系统程序员的错误处理
- Go语言中的错误处理系统
- 【Yii系列】错误处理和日志系统
- 编译器错误:CS0426
- 内存条与编译器错误
- VC6编译器错误汇总
- VC 编译器错误大全
- 【C/C++】对于可重入、线程安全、异步信号安全几个概念的理解
- MySQL 如何删除有外键约束的表数据
- Prototype_Level3
- 内存对齐
- 面向对象程序设计上机练习六(类和对象)
- 编译器错误处理系统
- mysql---国庆学习第一天
- 树的基本概念
- noip2013火柴排队
- Ubuntu 16.04安装chrome浏览器
- Android-Blockly 如何编辑toolbox侧边菜单栏
- bnu52297Coins(弱校联盟第一场)--找规律
- [LeetCode]--104. Maximum Depth of Binary Tree
- Leetcode-39. Combination Sum