已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一 词法扫描器设计一 实验目的通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。二 实验内容设计一个简单的类C语言的词法扫描器。三 实验要求1、根据附录给定的文法,从输入的类C语言源程序中,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、分隔符五大类;文法见最后附录。2、提供源程序输入界面;3、词法分析后可查看符号表和TOKEN串表;4、保存符号表和TOKEN串表(如:文本文件); 5、遇到错误时可显示提示信息,然后跳过错误部分继续进行分析。四 实验报告(一) 系统功能(包括各个子功能模块的功能说明)程序主要实现的功能:通过词法分析程序,在源程序中识别并分别出数字、标识符和保留字,并分别将记录到指定的文本文档中,过程中不符合符号表要求的字符视为错误处理。子功能模块:关键字处理;数字处理;字母的处理(标识符和保留字);运算符处理;主程序。(二) 开发平台(操作系统、设计语言)Windows 7,Microsoft Visual C+ 6.0。(三) 设计方案(1) 主数据流图(2) 主要子程序的流程框图(3) 主要数据结构:id Letter int10 Num int10 | Num OP +| - |* |/ | = |= | !=Keywordif | then | else | while | do Lettera|b|c|d|e|f|g|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|ZNum0|1|2|3|4|5|6|7|8|9 | Letter | Num |(四) 具体设计过程(包括主控程序、各个功能模块的具体实现)主模块:judge(FILE *,char *);用词法分析过程的判断子功能模块:Keyword(string );用于判断字符串是否是关键词 Letter(char c);用于判断c是否是字母 Num(char c);用于判断c是否是数字 (五) 源代码#define MAX 50 /长度最大值 50 char ch = ; / 字符 空格string keyword50=bool,break,case,include,char,const, continue,default,do,double,else,false, float,for,if,int,long,namespace,new,return, short,signed,struct,switch,true,using,void,while ,then,class ; / 常见关键字数组 只用了部分30个/*关键字的处理过程*int gjz(string c) int i; for(i=0;iMAX;i+) if(pare(c)=0) return 1; /与关键字数组中用相同的就返回真,否则假 return 0;/*字母的处理过程*int zm(char c) if(c=a)|(c=A) return 1; /比较字母的ASCII码值,在大小写范围内,返回真,否则假。 else return 0;/*数字的处理过程*int num(char c) if(c=0&c=9) return 1; /比较字母的ASCII码值,在0-9范围内,返回真,否则假。 else return 0;/*运算符处理过程*/ 过程中指针总是向前看一个,决定当前的各种单词是否结束,或是根据后边的输入消除当前字符二义性。void caculate(FILE *fpin)ofstream out(lex.txt,ios:out); /文件token.txt输入内存 string arr=; /字符串 while(ch=fgetc(fpin)!=EOF) /没到文件末尾,循环至末尾 arr=; if(ch= |ch=t|ch=n) /空格,缩进,换行,均不做操作 else if(zm(ch) /若有字符 while(zm(ch)|num(ch) /当有字符或数字的时候,循环 arr=arr+ch; /组织拼接字符串 ch=fgetc(fpin); /ch 得到文件输入字符 fseek(fpin,-1L,SEEK_CUR); /循环结束后,重定位流指针,从当前位置左移一位。开始判断新的输入是什么类型 if (gjz(arr)outarrt1t关键字endl; /若是关键字,则输出类型1,关键字 else outarrt2t标识符endl; /若是标识符,则输出类型2,标识符 else if(num(ch) /若是数字 while(num(ch)|ch=.&num(fgetc(fpin)|fgetc(fpin)=e|ch=e)/ 数字 | . &(得到一个字符|字符是e|输入是e) if(ch=.) /. fseek(fpin,-1L,SEEK_CUR);/指针左移 arr=arr+ch; if(ch=e) /e,自然对数的底数 ch=fgetc(fpin); / 新读入 if( ch=+) arr+=+; else arr+=-, fseek(fpin,-1L,SEEK_CUR);/指针左移 ch=fgetc(fpin); fseek(fpin,-3L,SEEK_CUR); / 指针左移3 outarrt3t无符号数endl; /无符号数 3 else switch(ch) case+: case- : case* : case= : case/ :outch t4t运算符endl;break; /+ - * / = 运算符 4 case( : case) : case : case : case; : case# : case. : case, : case : case :outch t5t界限符endl;break; / (),.#; 界限符 case : string string1=; do string1+=ch; ch=fgetc(fpin); while (ch!=);/循环得到 string1+=ch; outstring1t6t字符串endl; /字符串 6 break; case: :ch=fgetc(fpin); if(ch=) out:= t4t运算符endl; /运算符 :=else out= t4t运算符endl; /运算符 = fseek(fpin,-1L,SEEK_CUR); /当指针回退一个字符 break; case :ch=fgetc(fpin); if(ch=)out= t4t运算符endl; /运算符 = if(ch=a)|(ch=A) fseek(fpin,-1L,SEEK_CUR); /指针回退一个字符 out t5t界限符endl; /界限符 else if(ch=)out t7t控制符endl; /控制符 ) out t4t运算符endl;/运算符 elseout t4t运算符endl; /运算符 :ch=fgetc(fpin); if(ch=) out= t4t运算符= if(ch=)out t7t控制符 if(ch=n)fseek(fpin,-1L,SEEK_CUR); out t5t界限符 后边没有操作数。 else out t4t运算符 fseek(fpin,-1L,SEEK_CUR); break; default : outch t无法识别字符x; /cinx;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。coutxx;cout.width(30);coutxx;cout.width(30);coutxendl; /*主程序*void main() char in_fn30; /定义存放文件路径的数组 FILE * fpin; coutin_fn; /输入路径名 if(fpin=fopen(in_fn,r)!=NULL) break; /以只读方式打开文件,如果成功跳出循环继续,若不成功则输出错误信息。 else cout文件路径错误!请输入源文件(包括路径和后缀名):; coutn*词法分析结果如下*endl; caculate(fpin); /调用分析程序 fclose(fpin); /关闭文件 coutendl; /结束行 read(); /调用read(),完成输出 /分析文本文件 内容为一个简单的C语言程序 coutn*lex.txt 词法分析完毕*endl; syst
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年建设项目经理招聘面试题库及参考答案
- 2025年系统集成工程师人员招聘面试参考题库及答案
- 2025年裁缝招聘面试题库及参考答案
- 2025年手机产品经理招聘面试参考题库及答案
- 2025年社区活动策划专员招聘面试参考题库及答案
- 2025年财务Controller招聘面试参考题库及答案
- 2025年首席技术官招聘面试参考题库及答案
- 2025年物流专家招聘面试题库及参考答案
- 2025年社交软件开发工程师招聘面试题库及参考答案
- 2025年农村电子商务专员招聘面试题库及参考答案
- 蛋白质课程讲解
- 高中生综合素质评价范文50篇
- 2025国企中层竞聘试题及答案
- 2025年智能眼镜显示效果检测指标分析方案
- 高级计量经济学课件
- 中医养生学(兰州大学)学习通网课章节测试答案
- 中医病证诊断疗效标准
- 1. The Power Cut说课稿-2025-2026学年小学英语6a典范英语(Good English)
- 2025时政热点知识竞赛题及答案
- 老年人能力评估实操课件
- 孟姜女传说鉴赏课件
评论
0/150
提交评论