编译原理实验4.docVIP

  • 21
  • 0
  • 约5.2千字
  • 约 9页
  • 2018-01-02 发布于河南
  • 举报
编译原理实验4

西北师范大学计算机科学与工程学院学生实验报告 学号:201371020107 2015 年 11 月 10 日 系别 计算机科学与技术学院 专业 软件工程 班级 2013级软件一班 姓名 高凯 课程名称 计算机编译原理 课程类型 专业必修 学时数 实验名称 词法分析程序的手动和自动实现 实验目的和要求: 目标:掌握词法分析程序设计和实现。 输入:一段任意的程序。 输出:表形式的相应属性字列序。 要求:1,不处理说明部分,但属性字的符号类中除了编码外,应包含更多地信息。 2,小子集包含的符号类型应具有典型性,且尽可能丰富。3,为了方便输入,提供帮助信息,说明可以有哪些符号,属于字结构如何等。 实验内容: 源代码: #includestdio.h #includestdlib.h #includestring.h #define _KEY_WORD_END waiting fou your expanding/*定义关键字的结束标志*/ typedef struct { int typenum; /*种别码*/ char *word; }WORD; char input[255]; /*源程序缓字符冲区*/ char token[255]=; /*单词缓冲区*/ int p_input; /*源程序字符指针*/ int p_token; /*单词缓冲区指针*/ char ch; char *rwtab[]={void,int,float,char,if,else,while,do,return,_KEY_WORD_END}; WORD *scaner(); /*词法扫描函数,获得一个单词*/ void main() { int over=1; int count=0; WORD *oneword = new WORD; printf(Enter Your words(end with #):); scanf(%[^#]s,input); /*输入源程序字符串到缓冲区,以#结束*/ p_input=0; printf(词法分析结果是:\n\n); while (over1000 over!= -1) { oneword=scaner(); if(oneword-word==OVER) break; else if(oneword-typenum 1000) printf((%d,%s) ,oneword-typenum ,oneword-word ); over=oneword-typenum ; count++; if(count%6==0) printf(\n);//每六行输出 } } char m_getch() /*从输入源读一个字符到CH中*/ { ch=input[p_input]; p_input=p_input+1; return ch; } void getbc() /*去掉空白字符*/ { while (ch == || ch== 10) { ch = input[p_input]; p_input=p_input+1; } } void concat() /*拼接单词*/ { token[p_token]=ch; p_token=p_token+1; token[p_token]=\0; } int letter()/*判断是否是字母*/ { if(ch=a ch=z|| ch =A ch =Z) return 1; else return 0; } int digit()/*判断是否是数字*/ { if(ch=0 ch=9) return 1; else return 0; } int reserve()/*检索关键字表格*/ { int i=1; while(strcmp(rwtab[i],_KEY_WORD_END)) { if(!strcmp(rwtab[i],token)) { return i+24; } i=i+1; } return 1; } void retract()/*回退一个字符*/ { p_input=p_input-1; } char *dtb() { return NULL; } WORD *scaner()/*词法扫描程序*/ { int i=0; WORD *myword =new WORD; myword-typenum=0; myword-

文档评论(0)

1亿VIP精品文档

相关文档