欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    词法分析实验报告(共8页).docx

    • 资源ID:14060567       资源大小:57.66KB        全文页数:8页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    词法分析实验报告(共8页).docx

    精选优质文档-倾情为你奉上词法分析器一、实验目的:通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。二、实验要求(1,”main”)(5,”(“)(5,”)“)(5,”“)(1,”int”)(2,”a”)(5,”,”)(2,”b”)(5,”;”)(2,”a”)(4,”=”)(3,”10”)(5,”;”)(2,”b”)(4,”=”)(2,”a”)(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、功能描述改程序是一个实现词法分析的功能,能识别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  文件打开函数,返回指向文件第一个字符的指针四、实验结果测试内容为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)|IsAlpha(ch) Wordi=ch;i+;ch=fgetc(fp); 中,i+与Wordi=ch;次序不对,后来多次思索,发现问题。六、实验总结本次实验花了将近一个下午才完成。在纸上设计的时间大约40分钟,剩下的时间是录入和调试。本次实验使我认识到,一段时间搁置,不编程序,水平会下降,好多有关c语言的知识会忘掉,所以以后我会经常写写程序。另外,通过本次实验,我又进一步加深对词法分析原理的理解。总的来说,获益匪浅!附录#include<string.h>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<iostream.h> Char*Key9="void","main","int","if","then","else","return","break","continue"char ch; / 存储识别出的单词流int IsAlpha(char c) /判断是否为字母if(c<='z')&&(c>='a')|(c<='Z')&&(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;i<8;i+)if(m=strcmp(Word,Keyi)=0)return 1; return 0;void scanner(FILE *fp) /扫描函数char Word20='0'char 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 /开始判断的字符不是字母 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); 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; 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<<"4t"<<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; 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); 专心-专注-专业

    注意事项

    本文(词法分析实验报告(共8页).docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开