已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南京航空航天大学金城学院 目 录一概述3二总体方案设计2三详细设计4四程序的调试与运行结果说明6五课程设计总结7六后记7七附录7参考文献13一 概述1.课程设计的目的 能够采用C编程语言实现简单的词法分析程序;设计、编制并调试一个词法分析程序,加深对词法分析原理的理解2.课程设计的要求1、对单词的构词规则有明确的定义;2、编写的分析程序能够正确识别源程序中的单词符号;3、识别出的单词以的形式保存在符号表中(链表或数组);4、词法分析中源程序的输入以.c格式,分析后的符号表,将二元组保存在.txt文件中。3.课程设计的主要设计思想1、算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号;2、其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。二 总体方案设计syn=47报错YNNYNNYYYYNN开始打开文件初始化文件指针识别指针内容文件是否结束结束是否为空格或换行指向下一字符是否为字母拼字母是否为数字是否为符号拼数是否为关键字syn=46syn为对应关键字的 单词种别码对不同符号给出相应的种码值三 详细设计1.关键字表的初值: 关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下: string key32=auto,double,int,struct,break,else,long,switch,case,enum,register,typedef,char,extern,return,union,const,float,short,unsigned,continue,for,signed,void,default,goto,sizeof,volatile,do,while,static,if;设置初始值扫描输入子程序输出单词二元组(单词 种别码)N输入串扫描结束Y结束2.扫描子程序的设计:str用来存放构成单词符号的字符串;str用来整型单词;ch用来存放单词符号的种别码。四 程序的调试与运行结果说明五 课程设计总结词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。通过本试验的完成,我对词法分析器有了进一步的了解,把理论知识应用于实验中。也让我重新熟悉了C语言的相关内容,加深了对C语言知识的深化和用途的理解。通过这次语义分析的实验, 我对高级语言的学习有了更深的认识,了解得更透彻。 我了解了高级语言转化为目标代码或汇编指令的过程,。对今后的学习将起很 大的作用,对以后的编程有很大的帮助. 本次实验虽然只是完成了一个简单的程序,并且程序的主要框架课本上有给出,但在组织程序结构和深入了确上学到了很多,加深对编译原理的理解,掌握编译程序的实现方法和技术。巩固了前面所学的知识。六 后记七 附录#include #include#include#include#include#includeusing namespace std;#define MAX 32 char ch = ;string key32=auto,double,int,struct,break,else,long,switch,case,enum,register,typedef,char,extern,return,union,const,float,short,unsigned,continue,for,signed,void,default,goto,sizeof,volatile,do,while,static,if;int Iskey(string c) /关键字判断 int i; for(i=0;iMAX;i+) if(pare(c)=0) return i+1; return 47;int IsLetter(char c) /判断是否为字母 if(c=a)|(c=A) return 1; else return 0;int IsDigit(char c) /判断是否为数字 if(c=0&c=9) return 46; else return 0;void main()char in_fn30,outfil30;FILE * fpin,*fpon;cout请输入源文件名(包括路径和后缀名):in_fn;if(fpin=fopen(in_fn,r)!=NULL) break;else cout文件路径错误!请输入源文件名(包括路径和后缀名):n;cout另存的文件名为outfil.txtoutfil;/输入需要lingcun的文件名 if(fpon = fopen(outfil,w) = NULL)/打开需要存入的文件 coutcannot open filen; exit(0); */ ofstream outfile(outfil,ios:out); coutn*分析如下*endl; coutn单词*种别endl; outfilen单词*种别endl; / analyse(fpin); /void analyse(FILE *fpin) string str=; /char str90 ; while(ch=fgetc(fpin)!=EOF) str=; if(ch= |ch=t|ch=n) else if(IsLetter(ch) while(IsLetter(ch)|IsDigit(ch)/关键字 if(ch=A) ch=ch+32; str =str+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); if (Iskey(str) coutstrt$Iskey(str)endl; outfilestrt$Iskey(str)n; else coutstrendl;outfilestrn; else if(IsDigit(ch) while(IsDigit(ch)|ch=.&IsDigit(fgetc(fpin)/标识符 str =str+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); coutstrendl;outfilestrn; else switch(ch)/字符 case# :coutchendl;outfilechn; break; case- : ch=fgetc(fpin); if(ch=-) cout-endl;outfilechn; else cout-endl;outfilechn; fseek(fpin,-1L,SEEK_CUR); break; case* :coutchendl;outfilechn;break; case= :coutchendl;outfilechn;break; case/ :coutchendl;outfilechn;break; case( :coutchendl;outfilechn;break; case) :coutchendl;outfilechn;break; case :coutchendl;outfilechn;break; case :coutchendl;outfilechn;break; case; :coutchendl;outfilechn;break; case :coutchendl;outfilechn;break; case_ :coutchendl;outfilechn;break; case :coutchendl;outfilechn;break; case :coutchendl;outfilechn;break; case% :ch=fgetc(fpin); if(ch=s) cout%sendl;outfile%sn; if(ch=d)cout%dendl;outfile%dn; else cout%endl;outfile%n; fseek(fpin,-1L,SEEK_CUR);break; case| : ch=fgetc(fpin); if(ch=|) cout|endl;outfilechn;break; case+: ch=fgetc(fpin); if(ch=+) cout+endl; outfilechn; elsecout+endl; outfilechn;fseek(fpin,-1L,SEEK_CUR);break; case!: ch=fgetc(fpin); if(ch=) cout!=endl;outfilechn; elsecout!endl; outfile!n;fseek(fpin,-1L,SEEK_CUR);break; case? :ch=fgetc(fpin); if(ch=)cout?=endl;outfilechn; elsecout?endl;outfilechn; fseek(fpin,-1L,SEEK_CUR);break; case& :ch=fgetc(fpin); if(ch=&) cout&endl;outfilechn; else cout&endl;outfilechn; fseek(fpin,-1L,SEEK_CUR);break; case: :ch=fgetc(fpin); if(ch=) cout:=endl;outfilechn; else cout:endl;outfilech :ch=fgetc(fpin); if(ch=) cout=endl;outfile=)coutendl;outfilen; else coutendl;outfilen; fseek(fpin,-1L,SEEK_CUR);break; case :ch=fgetc(fpin); if(ch=)cout=endl;outfilechn; else if(ch=)coutendl;outfilechn; elsecoutendl;outfilechn; fseek(fpin,-1L,SEEK_CUR);break; case : ch=fgetc(fpin); if(ch=b) coutbendl;outfilechn;break; if(ch=a) coutaendl;outfilechn;break; if(ch=f) coutaendl;outfilechn;break; if(ch=n) coutnendl;outfilechn;break; if(ch=t) couttendl;outfilechn;break; if(ch=v) cou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 押题宝典安全员之A证(企业负责人)通关考试题库带答案解析
- 2025年生活方式与健康管理考试试题及答案
- G2电站锅炉司炉培训试题及答案
- 材料赋能文创产业-洞察与解读
- 临床医师三基试题集及答案2025年版
- 2025年健康管理师技能考核试卷(含答案)
- 2025年电力行业管理考试题库及答案
- 《中级个人理财》-中级银行从业资格考试彩蛋押题含答案详解
- 2022年施工升降机司机(建筑特殊工种)实操考试题带答案20
- 2023年教师资格之中学综合素质能力提升试卷A卷附答案
- 术后恶心呕吐(PONV)诊疗指南解读
- 创新与创业基础知识普及试题及答案解析
- 机器人安全能力测试题目及答案解析
- 杭州萧山交通投资集团有限公司Ⅱ类岗位招聘7人笔试考试备考试题及答案解析
- DB3713∕T 299-2023 公路大件运输护送技术规范
- 资质转让售卖合同范本
- 2025贵州贵安商业资产运营管理有限公司招聘11人考试笔试备考题库及答案解析
- 2024年黑河市爱辉区林业和草原局所属事业单位招聘真题
- 2025-2026学年上海市徐汇区九年级(上)期中语文试卷(含答案)
- 2025+ESMO指南:非小细胞肺癌诊疗及随访规范
- 根治性胰十二指肠切除术个案护理
评论
0/150
提交评论