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

📄 errmsg.c

📁 pascal 词法分析器
💻 C
字号:
/*error report func*/
#include <stdio.h>
#include <stdlib.h>
#include "util.h"
#include "errmsg.h"
int lineNum = 1;
static char *fileName = "";

/*创建换行链表,i 参数:每行的结束位置
如果知道字符的位置,则可以推算出字符所在的行 
*/
IntList intList(int i, IntList rest) 
{IntList l= checked_malloc(sizeof *l);
 l->i=i; l->rest=rest;
 return l;
}
/*换行整数链表表头,若当前行未结束,则恰好是当前行的上一行*/
IntList linePos=NULL;
/*换行*/
extern tokPos;
void newLine()
{lineNum++;
 linePos = intList(tokPos, linePos);
}
/*输出错误信息和位置*/
void error(int pos, char *message)
{
  IntList lines = linePos;
  int num=lineNum;
  while (lines && lines->i >= pos) {
     lines=lines->rest; num--;
  }
  
  if (fileName) 
     fprintf(stderr,"ERROR:[%s:",fileName);
  if (lines) 
     fprintf(stderr,"%d.%d: %s]", num, pos-lines->i,message);
  fprintf(stderr,"\n");
}
extern FILE *fp;       /*引用全局文件指针*/

/*重置初始化参数*/
void reset(char* fname)
{
 fileName=fname; 
 lineNum=1;
 linePos=intList(0,NULL);
 if(fp)
    fclose(fp);/*重新打开文件*/
 fp = fopen(fname,"r");
 if (!fp) {
    error(0,"cannot open"); exit(1);
 }
 initBuffer();
 LoadBuffer(1);
}

⌨️ 快捷键说明

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