词法分析实验报告.docx

词法分析实验报告.docx

ID:57382409

大小:54.20 KB

页数:8页

时间:2020-08-14

词法分析实验报告.docx_第1页
词法分析实验报告.docx_第2页
词法分析实验报告.docx_第3页
词法分析实验报告.docx_第4页
词法分析实验报告.docx_第5页
资源描述:

《词法分析实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

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

3、种标识符和常数仍然一类一种三、实验内容1、功能描述改程序是一个实现词法分析的功能,能识别5种单词,其他单词报错。2、程序结构描述intIsKey(char*Word)关键字匹配函数,查询是否为关键字,若是,返回值为1,否则为0。intIsAlpha(charc)查看是否为字母,若是,返回值为1,否则为0。intIsNum(charc)查看是否为数字,若是,返回值为1,否则为0。voidscanner(FILE*fp)扫描函数,扫描程序中的字符串并调用上述三种函数检查是否是字母、数字,是否是关键字,并输出。fseek(fp,-1,1)回退一个字符。fgetc(f

4、p)从数据流中区下一个字符。fopen 文件打开函数,返回指向文件第一个字符的指针四、实验结果测试内容为main(){inta,b;a=10;b=a+20;}#结果测试代码为voidmain(){inta,b;if(a=10;)b+=20;c=%;}#结果为测试代码main(){inta,b;if(a<="10")b+=20;c=%@;return0;}#结果五、实验过程记录1、因为用到回退函数fseek(),而以前没有用过这个函数,所以开始时很苦恼,不知道如何回退一个字符,后来问了同学,才明白原来有这么一个函数,顿时豁然开朗。2、本次试验中word[20]保

5、存字符串时,不能正确保存,总是出错,原因是while(IsNum(ch)

6、

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

8、e#include#include#includeChar*Key[9]={"void","main","int","if","then","else","return","break","continue"};charch;//存储识别出的单词流intIsAlpha(charc){//判断是否为字母if(((c<='z')&&(c>='a'))

9、

10、((c<='Z')&&(c>='A')))return1;elsereturn0;}intIsNum(charc){//判断是否为数字

11、if(c>='0'&&c<='9')return1;elsereturn0;}intIsKey(char*Word){//识别关键字函数intm,i;for(i=0;i<8;i++){if((m=strcmp(Word,Key[i]))==0)return1;}return0;}voidscanner(FILE*fp){//扫描函数charWord[20]={''};charch;inti,c;ch=fgetc(fp);//获取字符,指针fp并自动指向下一个字符if(IsAlpha(ch)){//判断该字符是否是字母Word[0]=ch;ch=fgetc(

12、fp);i=1;while(IsNum

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。