1 Star 0 Fork 1

卐卍/编译原理虎书代码

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
errormsg.c 1.18 KB
一键复制 编辑 原始数据 按行查看 历史
ylyhappy 提交于 2024-05-20 22:34 . 增加语法shu
/*
* errormsg.c - functions used in all phases of the compiler to give
* error messages about the Tiger program.
*
*/
#include "errormsg.h"
bool anyErrors= FALSE;
static string fileName = "";
static int lineNum = 1;
int EM_tokPos=0;
extern FILE *yyin;
typedef struct intList {int i; struct intList *rest;} *IntList;
static IntList intList(int i, IntList rest)
{IntList l= checked_malloc(sizeof *l);
l->i=i; l->rest=rest;
return l;
}
static IntList linePos=NULL;
void EM_newline(void)
{lineNum++;
linePos = intList(EM_tokPos, linePos);
}
void EM_error(int pos, char *message,...)
{va_list ap;
IntList lines = linePos;
int num=lineNum;
anyErrors=TRUE;
while (lines && lines->i >= pos)
{lines=lines->rest; num--;}
if (fileName) fprintf(stderr,"%s:",fileName);
if (lines) fprintf(stderr,"%d.%d: ", num, pos-lines->i);
va_start(ap,message);
vfprintf(stderr, message, ap);
va_end(ap);
fprintf(stderr,"\n");
}
void EM_reset(string fname)
{
anyErrors=FALSE; fileName=fname; lineNum=1;
linePos=intList(0,NULL);
yyin = fopen(fname,"r");
if (!yyin) {EM_error(0,"cannot open"); exit(1);}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/Happy_world_cn/hushu.git
git@gitee.com:Happy_world_cn/hushu.git
Happy_world_cn
hushu
编译原理虎书代码
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385