收藏 分享(赏)

实验1 词法分析 (2).doc

上传人:dzzj200808 文档编号:2459536 上传时间:2018-09-17 格式:DOC 页数:5 大小:59.50KB
下载 相关 举报
实验1 词法分析 (2).doc_第1页
第1页 / 共5页
实验1 词法分析 (2).doc_第2页
第2页 / 共5页
实验1 词法分析 (2).doc_第3页
第3页 / 共5页
实验1 词法分析 (2).doc_第4页
第4页 / 共5页
实验1 词法分析 (2).doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、河南工业大学实验报告课程名称 编译原理 _ 实验项目 实验一 词法分 计_姓 名_ 学 号_ 指导老师 日 期 2012.4.22 批改日期 成 绩 一.实验目的1 深入理解有限自动机及其应用2 掌握根据语言的词法规则构造识别其单词的有限自动机的方法3基本掌握词法分析程序的开发。二.实验内容及要求编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。 (遇到错误时可显示“Error”,然后跳过错误部分继续显示) (具体参照实验指导中的要求)三.实验过程对于这个实验,总共用了五个函数,即

2、主函数、分三种情况取单词、对取到的单词进行分类。主要完成的功能是从缓冲区中识别出一个个单词,并能够区分所取的单词是什么类型。1)首先定义一系列数组来保存不同类的单词:char *key8=“if“,“else“,“for“,“while“,“do“,“return“,“break“,“continue“; /保留字char *border6=“,“,“;“,“,“,“(“,“)“; /分隔符char *arithmetic4=“+“,“-“,“*“,“/“; /算术运算符char *relation6=“,“=“,“; /关系运算符char *consts20; /常数char *label2

3、0; /标识符2)取词分类模块:int search(char searchchar,int wordtype) /对取的单词进行分类 int i=0;switch (wordtype) case 1:for (i=0;i=7;i+) /如果是保留字 if (strcmp(keyi,searchchar)=0)return(i+1);return(0);case 2:for (i=0;i=5;i+) /如果是分隔符 if (strcmp(borderi,searchchar)=0)return(i+1); return(0);case 3:for (i=0;i=3;i+) /如果是算术运算符

4、if (strcmp(arithmetici,searchchar)=0) return(i+1);return(0);case 4:for (i=0;i=5;i+) /如果是关系运算符 if (strcmp(relationi,searchchar)=0) return(i+1);return(0);case 5:for (i=0;iconstnum;i+) /如果是常数 if (strcmp(constsi,searchchar)=0)return(i+1);i+; /现有的常数数组没有取到的常数constsi-1=(char *)malloc(sizeof(searchchar);str

5、cpy(constsi-1,searchchar); /添加新的常数到常数数组constnum+;return(i);case 6:for (i=0;ilabelnum;i+) /如果是标识符 if (strcmp(labeli,searchchar)=0)return(i+1);i+; /现有的标识符数组没有取到的标识符labeli-1=(char *)malloc(sizeof(searchchar); strcpy(labeli-1,searchchar); /添加新的标识符到标识符数组labelnum+;return(i);3)取得字符不同进行不同的处理,这里以取得非字母数字字符模块为

6、例,该模块比较复杂有一定的代表性:char otherprocess(char buffer) /取到其他字符时,要进行的处理 int i=-1;char othertp20;int otype,otypetp;othertp0=buffer;othertp1=0;if (otype=search(othertp,3) /判断是否为算术运算符 printf(“%s (3,%d)n“,othertp,otype-1);buffer=fgetc(fp); /取下个字符goto out;if (otype=search(othertp,4) /判断是否为关系运算符 buffer=fgetc(fp);

7、othertp1=buffer;othertp2=0;if (otypetp=search(othertp,4) /判断结合下个字符是否为关系运算符 printf(“%s (4,%d)n“,othertp,otypetp-1);buffer=fgetc(fp); /修改部分goto out;elseothertp1=0;printf(“%s (4,%d)n“,othertp,otype-1);goto out;else if (otype=search(othertp,2) /判断是否为分隔符 printf(“%s (2,%d)n“,othertp,otype-1);buffer=fgetc(

8、fp);goto out;if (buffer!=n)buffer=fgetc(fp);out: return(buffer); /返回下个字符4)主函数,测试模块:void main() /主函数,测试程序int i;for (i=0;i=20;i+)labeli=NULL;constsi=NULL;if (fp=fopen(“example.c“,“r“)=NULL)printf(“error“);elsecbuffer = fgetc(fp);while (cbuffer!=EOF) /进入循环,取字符if (isalpha(cbuffer) /如果是字母cbuffer=alphapro

9、cess(cbuffer);else if (isdigit(cbuffer) /如果是数字cbuffer=digitprocess(cbuffer);else cbuffer=otherprocess(cbuffer); /其他字符printf(“overn“);/ getchar();5)读取程序截图:读取的程序代码如下:main()int a,b;a = 10;b = a + 20;四.实验总结(心得)通过此次实验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用 c 语言直接编写词法分析程序。加深了我对词法分析的理解,以前是理论,每天都在听老师讲,感觉还可以,但是自己在做实验时还是有许多不懂的地方,通过看书和问其他同学,还是成功的完成了本次试验,加深了我对理论的巩固,并复习了 c 语言的基本知识,受益匪浅

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报