词法分析实验报告

上传人:94****0 文档编号:61187350 上传时间:2022-03-10 格式:DOCX 页数:8 大小:57.66KB
收藏 版权申诉 举报 下载
词法分析实验报告_第1页
第1页 / 共8页
词法分析实验报告_第2页
第2页 / 共8页
词法分析实验报告_第3页
第3页 / 共8页
资源描述:

《词法分析实验报告》由会员分享,可在线阅读,更多相关《词法分析实验报告(8页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上词法分析器一、实验目的:通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。二、实验要求(1,”main”)(5,”(“)(5,”)“)(5,”“)(1,”int”)(2,”a”)(5,”,”)(2,”b”)(5,”;”)(2,”a”)(4,”=”)(3,”10”)(5,”;”)(2,”b”)(4,”=”)(2,”a”

2、)(4,”+”)(3,”20”)(5,”;”)(5,”“)如源程序为C语言。输入如下一段:main()int a,b;a = 10; b = a + 20;#要求输出如右图。要求:1、将单词分为五种识别关键字:main、if、int、for、while、do、return、break、continue;单词种别码为1。标识符;单词种别码为2。常数为无符号整形数;单词种别码为3。运算符包括:+、-、*、/、=、=、=、!= ;单词种别码为4。分隔符包括:,、;、(、); 单词种别码为5。2、使用一符一种的分法关键字、运算符和分界符可以每一个均为一种标识符和常数仍然一类一种三、实验内容1、功能描述

3、改程序是一个实现词法分析的功能,能识别5种单词,其他单词报错。2、程序结构描述int IsKey(char *Word)关键字匹配函数,查询是否为关键字,若是,返回值为1,否则为0。int IsAlpha(char c) 查看是否为字母,若是,返回值为1,否则为0。int IsNum(char c) 查看是否为数字,若是,返回值为1,否则为0。void scanner(FILE *fp) 扫描函数,扫描程序中的字符串并调用上述三种函数检查是否是字母、数字,是否是关键字,并输出。fseek(fp,-1,1) 回退一个字符。fgetc(fp) 从数据流中区下一个字符。fopen 文件打开函数,返回

4、指向文件第一个字符的指针四、实验结果测试内容为main()int a,b;a = 10;b = a + 20;#结果测试代码为void main()int a,b;if(a = 10;)b += 20;c=%;#结果为测试代码main()int a,b;if(a = 10)b += 20;c=%;return 0;#结果五、实验过程记录1、因为用到回退函数fseek(),而以前没有用过这个函数,所以开始时很苦恼,不知道如何回退一个字符,后来问了同学,才明白原来有这么一个函数,顿时豁然开朗。2、本次试验中word20保存字符串时,不能正确保存,总是出错,原因是while(IsNum(ch)|Is

5、Alpha(ch) Wordi=ch;i+;ch=fgetc(fp); 中,i+与Wordi=ch;次序不对,后来多次思索,发现问题。六、实验总结本次实验花了将近一个下午才完成。在纸上设计的时间大约40分钟,剩下的时间是录入和调试。本次实验使我认识到,一段时间搁置,不编程序,水平会下降,好多有关c语言的知识会忘掉,所以以后我会经常写写程序。另外,通过本次实验,我又进一步加深对词法分析原理的理解。总的来说,获益匪浅!附录#include#include#include#include#include Char*Key9=void,main,int,if,then,else,return,brea

6、k,continue;char ch; / 存储识别出的单词流int IsAlpha(char c) /判断是否为字母if(c=a)|(c=A) return 1;else return 0; int IsNum(char c) /判断是否为数字if(c=0&c=9) return 1;else return 0;int IsKey(char *Word) /识别关键字函数int m,i;for(i=0;i8;i+)if(m=strcmp(Word,Keyi)=0)return 1; return 0;void scanner(FILE *fp) /扫描函数char Word20=0;char

7、 ch;int i,c;ch=fgetc(fp); /获取字符,指针fp并自动指向下一个字符if(IsAlpha(ch) /判断该字符是否是字母Word0=ch;ch=fgetc(fp);i=1;while(IsNum(ch)|IsAlpha(ch) /判断该字符是否是字母或数字Wordi=ch;i+;ch=fgetc(fp); Wordi=0; /0 代表字符结束(空格)fseek(fp,-1,1); /回退一个字符c=IsKey(Word); /判断是否是关键字if(c=0) cout(2,Word)endl;/不是关键字else cout(1,Word)endl; /输出关键字 else

8、 /开始判断的字符不是字母 if(IsNum(ch) /判断是否是数字 Word0=ch; ch=fgetc(fp); i=1; while(IsNum(ch) Wordi=ch; i+; ch=fgetc(fp); Wordi=0; fseek(fp,-1,1); /回退cout(3,Word)endl; else /开始判断的字符不是字母也不是数字 Word0=ch; switch(ch) case: case: case(: case): case: case: case,: case: case;:cout(5,Word)endl; break; case+:ch=fgetc(fp);

9、 if(ch=|ch=+) Word1=ch; cout(4,Word)endl;/运算符+=或判断结果为+ else fseek(fp,-1,1); cout(4,Word)endl;/判断结果为+ break; case-:ch=fgetc(fp); if(ch=|ch=-) Word1=ch; cout(4,Word)endl; else fseek(fp,-1,1); cout(4,Word)endl; /判断结果为- break; case*: case/: case!: case=:ch=fgetc(fp); if(ch=) Word1=ch; cout(4,Word)endl;

10、else fseek(fp,-1,1); cout(4,Word)endl; break; case:ch=fgetc(fp); if(ch=|ch=) Word1=ch; cout(4,Word)endl; else fseek(fp,-1,1); cout4tWordendl; /判断结果为:ch=fgetc(fp); if(ch=|ch=) Word1=ch;cout(4,Word)endl; else fseek(fp,-1,1); cout(4,Word)endl; break; default: cout(无法识别字符,Word)endl; break; void main() FILE *fp;fp=fopen(c:1.txt,r); if(fp=NULL) /读取文件内容,并返回文件指针,该指针指向文件的第一个字符 cout读入文件错误!endl; exit(0);cout* 词法分析结果如下 *n; while(ch!=#) ch=fgetc(fp); if(ch=#) break; /文件以#结尾,作为扫描结束条件 else if(ch= |ch=t|ch=n) /忽略空格,空白,和换行 else fseek(fp,-1,1); /回退一个字节开始识别单词流 scanner(fp); 专心-专注-专业

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!