编译原理课程设计报告-词法分析器

上传人:工**** 文档编号:493186521 上传时间:2023-09-22 格式:DOC 页数:6 大小:230.50KB
返回 下载 相关 举报
编译原理课程设计报告-词法分析器_第1页
第1页 / 共6页
编译原理课程设计报告-词法分析器_第2页
第2页 / 共6页
编译原理课程设计报告-词法分析器_第3页
第3页 / 共6页
编译原理课程设计报告-词法分析器_第4页
第4页 / 共6页
编译原理课程设计报告-词法分析器_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《编译原理课程设计报告-词法分析器》由会员分享,可在线阅读,更多相关《编译原理课程设计报告-词法分析器(6页珍藏版)》请在金锄头文库上搜索。

1、精选优质文档-倾情为你奉上一. 课程设计题目: 词法分析器的实现二.课程设计成员 三.课程设计内容和要求 设计一个程序,调试、编译,实现词法分析的功能,识别各单词或字符所属类别,并显示在屏幕上。词法分析器:逐个读入源程序字符并按照构词规则切分成一系列单词。单词是语言中具有独立意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。词法分析是编译过程中的一个阶段,在语法分析前进行 。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。要求:通过词法分析器能够实现以下五种类型如单词等的识别。(1)关键字begin,end,if,then,else,

2、while,write,read等,do, call,const,char,until,procedure,repeat等(2)运算符:+,-,*,/,=等(3)界符:,;,.,(,),:等(4)标识符 (5)常量四操作要求 首先建立一个或多个文档,此处新建了两个文档,例:.txt文本文档和zhaoxiaodong.txt文本文档,以供选择,各文本文档中都输入有不同的内容,运行程序,出现提示,输入文本文档的名称,即可对文本文档中的内容进行分析,并把分析结果输出显示在屏幕上。五.算法设计#include #includeusing namespace std;#define MAX 22 cha

3、r ch = ;string key15=begin,end,if,then,else,while,write,read, do, call,const,char,until,procedure,repeat;int Iskey(string c) /关键字判断int i;for(i=0;iMAX;i+) if(pare(c)=0) return 1; return 0;int IsLetter(char c) /判断是否为字母 if(c=a)|(c=A) return 1; else return 0;int IsDigit(char c) /判断是否为数字 if(c=0&c=9) retu

4、rn 1;else return 0;void analyse(FILE *fpin) string arr=; while(ch=fgetc(fpin)!=EOF) arr=; if(ch= |ch=t|ch=n) else if(IsLetter(ch) while(IsLetter(ch)|IsDigit(ch) if(ch=A) ch=ch+32; arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); if (Iskey(arr)coutarrt$属于关键字endl; else coutarrt$属于普通标识符endl; else

5、if(IsDigit(ch) while(IsDigit(ch)|ch=.&IsDigit(fgetc(fpin) arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); coutarrt$属于无符号实数endl; else switch(ch) case+: case- : case* : case= : case/ :coutcht$属于运算符endl;break; case( : case) : case : case : case; : case. : case, : case : case :coutcht$属于界符endl;bre

6、ak; case: :ch=fgetc(fpin); if(ch=) cout:=t$属于运算符endl; else cout=t$属于运算符 :ch=fgetc(fpin); if(ch=) cout=t$属于运算符)coutt$属于输入控制符endl; else coutt$属于运算符endl; fseek(fpin,-1L,SEEK_CUR); break; case :ch=fgetc(fpin); if(ch=)cout=t$属于运算符endl; else if(ch=)coutt$属于输出控制符) coutt$属于运算符endl; elsecoutt$属于运算符endl; fsee

7、k(fpin,-1L,SEEK_CUR); break; default : coutcht$无法识别字符,请重新输入!endl; void main() char in_fn30; FILE * fpin; coutin_fn; if(fpin=fopen(in_fn,r)!=NULL) break; else cout提示:路径输入错误!请重新输入源文件名:; coutn*endl; coutn*分析*endl; analyse(fpin); fclose(fpin);六.上机实现情况及运行结果(包括中间和最终结果) 源文件中包括的文件如下图:编写完程序后,调试,编译,无误,如下图:运行程

8、序,根据提示,输入源文件名.txt,显示词法分析结果如下图:运行程序,输入另一个源文件名zhaoxiaodong.txt,显示此法分析结果如下图:七.小结 通过本次课程设计的练习,熟悉了用C+语言编写词法分析器的过程,掌握了词法分析器的原理以及功能。词法分析是编译过程中的一个阶段,在语法分析前进行。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。词法分析程序的主要任务:读源程序,产生单词符号。 词法分析程序的其他任务:滤掉空格,跳过注释、换行符追踪换行标志,复制出错源程序,宏展开,等等等等。词法分析工作从语法分析工作独立出来的原因:简化设计,改进编译效率,增加编译系统的可移植性 。而且从划分关键字,运算符,界符,标识符和常量,才发现数字,字母及符号组合有很多很多,无法全部枚举,所以在新建的文本文档中只象征性的列出几种符号,但这并不影响此法分析结果的完成。总之,通过本次实验,一点点分析词法分析器的功能,并努力实现它,掌握了课程设计内容的同时也锻炼了自己分析解决问题的能力以及编程能力,收获颇丰!专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号