TEST语言词法分析器.pdfVIP

  • 18
  • 0
  • 约3.86千字
  • 约 12页
  • 2021-06-25 发布于上海
  • 举报
TEST 语言词法分析器 实验一 TEST 语言词法分析器 一、 实验目的 熟悉词法分析程序的设计方法。 二、 实验内容 1、 在 windows 的VC 环境下,编写 TEST 语言的词法分析程序; 2、 修改附录 B 的词法分析程序,添加保留字 do、双分界符和 ||以及单分界符!的处理。 三、 设计思想 算法的基本任务是从源程序中识别出具有独立意义的单词符号, 其基本思想是根据扫描到单词符号的第一个字符的种类,分析与代码 中相应的单词符号。 四、 源程序 #includestdio.h #includestring.h #includectype.h #define keyword 8 char *key[keyword]={if,int,for,while, do,return,break,continue}; #define yunsuan 9 char yun[yunsuan]=+-*/=!; #define fenge 8 char fen[fenge]=,.;{}(); char ch; int i,k; char buff[20]; void output(int ,char*); void scan(FILE *fp) { int j; ch=fgetc(fp); while(ch== ||ch==\n||ch==\t) {ch=fgetc(fp);} if(isalpha(ch)) /*输入的是字母,进行 标识 符处理*/ {buff[0]=ch; i=1; ch=fgetc(fp); while(isalnum(ch)) /*如果是字母数字则组 合,否则结束*/ { buff[i]=ch; i++; ch=fgetc(fp); } buff[i]=\0; /*查找保留字*/ fseek(fp,-1,1); j=0; while((jkeyword) strcmp(buff,key[j])) j++; if(j=keyword) { output(2,buff); } else { output(1,buff); } } else if(isdigit(ch)) { buff[0]=ch; ch=fgetc(fp); i=1; while(isdigit(ch)) /*如果是数字则整合数 字*/ {buff[i]=ch; i++; ch=fgetc(fp);} buff[i]=\0; /*整数整合结束*/ fseek(fp,-1,1); output(3,buff); } else if(strchr(fen,ch)0) /*判断分隔符*/ {buff[0]=ch; ch=fgetc(fp); buff[1]=\0; fseek(fp,-1,1); output(5,buff);} else if(strchr(yun,ch)0) /*判断运算符*/ {buff[0]=ch; if(ch===) /*双运算符*/ {ch=fgetc(fp); if(ch===) {output(4,==);} else {fseek(fp,-1,1); output(4,=);}} else if(ch==) { ch=fgetc(fp); if(ch===) {output(4,=);} else {fseek(fp,-1,1); output(4,);}} else if(ch==) { ch=fgetc

文档评论(0)

1亿VIP精品文档

相关文档