




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
词法分析器实验报告实验目的及要求本次实验通过用C语言设计、编制、调试一个词法分析子程序,识别单词,实现一个C语言词法分析器,经过此过程可以加深对编译器解析单词流的过程的了解。运行环境:硬件:windowsxp软件:visualc++6.0二、实验步骤查询资料,了解词法分析器的工作过程与原理。分析题目,整理出基本设计思路。实践编码,将设计思想转换用c语言编码实现,编译运行。4.测试功能,多次设置包含不同字符,关键字的待解析文件,仔细察看运行结果,检测该分析器的分析结果是否正确。通过最终的测试发现问题,逐渐完善代码中设置的分析对象与关键字表,拓宽分析范围提高分析能力。实验内容本实验中将c语言单词符号分成了四类:关键字key(特别的将main说明为主函数)、普通标示符、常数和界符。将关键字初始化在一个字符型指针数组*key[]中,将界符分别由程序中的case列出。在词法分析过程中,关键字表和case列出的界符的内容是固定不变的(由程序中的初始化确定),因此,从源文件字符串中识别出现的关键字,界符只能从其中选取。标识符、常数是在分析过程中不断形成的。对于一个具体源程序而言,在扫描字符串时识别出一个单词,若这个单词的类型是关键字、普通标示符、常数或界符中之一,那么就将此单词以文字说明的形式输出.每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直到整个源程序全部扫描完毕,从而形成相应的单词串。输出形式例如:void$关键字流程图、程序流程图: printf("%s\t$运算符\n\n",Word);//运算符“+=” } elseif(ch=='+'){ printf("%s\t$运算符\n\n",Word);//判断结果为“++” } else{ fseek(fp,-1,1); printf("%s\t$运算符\n\n",Word);//判断结果为“+” } break; case'-':ch=fgetc(fp); Word[1]=ch; if(ch=='='){ printf("%s\t$运算符\n\n",Word); } elseif(ch=='-'){ printf("%s\t$运算符\n\n",Word);//判断结果为“--” } else{ fseek(fp,-1,1); printf("%s\t$运算符\n\n",Word);//判断结果为“-” } break; case'*': case'/': case'!': case'=':ch=fgetc(fp); if(ch=='='){ printf("%s\t$运算符\n\n",Word); } else{ fseek(fp,-1,1); printf("%s\t$运算符\n\n",Word); } break; case'<':ch=fgetc(fp); Word[1]=ch; if(ch=='='){ printf("%s\t$运算符\n\n",Word);//判断结果为运算符“<=” } elseif(ch=='<'){ printf("%s\t$运算符\n\n",Word);//判断结果为“<<” } else{ fseek(fp,-1,1); printf("%s\t$运算符\n\n",Word);//判断结果为“<” } break;case'>':ch=fgetc(fp); Word[1]=ch; if(ch=='=')printf("%s\t$运算符\n\n",Word); else{ fseek(fp,-1,1); printf("%s\t$运算符\n\n",Word); } break; case'%':ch=fgetc(fp); Word[1]=ch; if(ch=='='){printf("%s\t$运算符\n\n",Word);} if(IsAlpha(ch))printf("%s\t$类型标识符\n\n",Word); else{ fseek(fp,-1,1); printf("%s\t$取余运算符\n\n",Word); } break; default:printf("无法识别字符!\n\n");break; } }}main(){ charin_fn[30];//文件路径FILE*fp;printf("\n请输入源文件名(包括路径和后缀名):");while(1){ gets(in_fn); //scanf("%s",in_fn);if((fp=fopen(in_fn,"r"))!=NULL)break;//读取文件内容,并返回文件指针,该指针指向文件的第一个字符elseprintf("文件路径错误!请重新输入:"); }printf("\n*******************词法分析结果如下*******************\n");do{ ch=fgetc(fp); if(ch=='#')break;//文件以#结尾,作为扫描结束条件 elseif(ch==''||ch=='\t'||ch=='\n'){}//忽略空格,空白,和换行 else{ fseek(fp,-1,1);//回退一个字节开始识别单词流 scanner(fp); }}while(ch!='#');return(0);}实验结果解析源文件:voidmain(){inta=3;a+=b;printf("%d",a);return;}#解析结果:实验总结分析通过本次实验,让再次浏览了有关c语言的一些基本知识,特别是对文件,字符串进行基本操作的方法。C语言中没有string类型,因此本实验中的对字符串提取与识别均借助#include<string.h>及字符型数组来实现。让我练习对字符串函数应用的同时也提高了自己的逻辑思维能力。在本次实验中,我纠正了一个一直以来的概念错误:main不是关键字,它定义为程序的入口,是主函数!在本实验中,虽然我把main初始化在关键字表(字符指针类型数组)*Key[10]中,当与该数组中字符串进行比较时,若与main匹配成功,则返回2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年高中语文 第2单元 置身诗境缘景明情 10 登岳阳楼教学设计 新人教版选修《中国古代诗歌散文欣赏》
- 九年级物理上册 第一章 分子动理论与内能 2 内能和热量教学设计 (新版)教科版
- 九年级化学上册 第七单元 燃料及其利用 课题1 燃烧和灭火示范教学设计 (新版)新人教版
- 6 徽 章(教学设计)苏教版二年级下册综合实践活动
- 2024-2025学年高中生物 专题2 课题3 分解纤维素的微生物的分离教学设计 新人教版选修1
- 16《宇宙的另一边》教学设计-2023-2024学年三年级下册语文统编版
- 2023三年级英语上册 Module 3 Places and activities Unit 9 In my room教学设计 牛津沪教版(三起)
- Unit 5 China and the World. Topic 3 Now it is a symbol of England Section D 教学设计 2024-2025学年仁爱科普版英语九年级下册
- 一年级语文上册 第六单元 课文2 语文园地六教学设计 新人教版
- 《活动6 我的鞋子真干净》(教案)-2024-2025学年三年级上册劳动北师大版
- DL-T5434-2021电力建设工程监理规范
- 2024年上海核工程研究设计院股份有限公司招聘笔试冲刺题(带答案解析)
- 房地产营销毕业论文
- GB/T 43943-2024船舶环境噪声
- 材料力学-第五章弯曲应力
- MOOC 医学心理学-北京大学 中国大学慕课答案
- 2023-2024学年下学期高一思想政治课《心理健康与职业生涯》期中模拟考试卷答案
- 我的人工智能导论职业规划
- 幼儿园沙水区培训活动
- 2024年银行考试-兴业银行笔试参考题库含答案
- 山东省潍坊市2023-2024学年一年级下学期期中质量检测数学试题
评论
0/150
提交评论