《编译原理课程设计报告_词法分析.pdf》由会员分享,可在线阅读,更多相关《编译原理课程设计报告_词法分析.pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 一.课程设计题目:词法分析器的实现二.课程设计成员三.课程设计内容和要求设计一个程序,调试、编译,实现词法分析的功能,识别各单词或字符所属类别,并显示在屏幕上。词法分析器:逐个读入源程序字符并按照构词规则切分成一系列单词。单词是语言中具有独立意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。词法分析是编译过程中的一个阶段,在语法分析前进行。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。要求:通过词法分析器能够实现以下五种类型如单词等的识别。(1)关键字 begin,end,if,then,else,while,write,rea
2、d等,do,call,const,char,until,procedure,repeat等(2)运算符:+,-,*,/,=等(3)界符:,;,.,(,),:等(4)标识符(5)常量四操作要求首先建 立一 个或 多个 文档,此 处新 建了 两个 文档,例:07196133.txt文本 文档和zhaoxiaodong.txt文本文档,以供选择,各文本文档中都输入有不同的内容,2 运行程序,出现提示,输入文本文档的名称,即可对文本文档中的内容进行分析,并把分析结果输出显示在屏幕上。五.算法设计#include#include using namespace std;#define MAX 22 ch
3、ar 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)return 1;else re
4、turn 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;3 arr=arr+ch;ch=fgetc(fpin);fseek(fpin,-1L,SEEK_CUR);if(Iskey(arr)coutarrt$属于关键字 endl;else coutarrt$属于普通标识符endl;else if(IsDigit(ch)while(IsDigi
5、t(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;break;case:ch=fgetc(fpin);if(ch=)cout:=t$属于运算符 endl;else cou
6、t=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;4 else if(ch=)coutt$属于输出控制符)coutt$属于运算符 endl;elsecoutt$属于运算符 endl;fseek(fpin,-1L,SEEK_CUR);break;default:coutcht$无法识别字符,请重新输入!endl;void ma
7、in()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);六.上机实现情况及运行结果(包括中间和最终结果)源文件中包括的文件如下图:编写完程序后,调试,编译,无误,如下图:5 运行程序,根据提示,输入源文件名07196133.txt,显示词法分析结果如下图:运行程序,输入另一个源文件名zhaoxiaodong.txt,显示此法分析结果如下图:6 七
8、.小结通过本次课程设计的练习,熟悉了用C+语言编写词法分析器的过程,掌握了词法分析器的原理以及功能。词法分析是编译过程中的一个阶段,在语法分析前进行。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。词法分析程序的主要任务:读源程序,产生单词符号。词法分析程序的其他任务:滤掉空格,跳过注释、换行符追踪换行标志,复制出错源程序,宏展开,等等等等。词法分析工作从语法分析工作独立出来的原因:简化设计,改进编译效率,增加编译系统的可移植性。而且从划分关键字,运算符,界符,标识符和常量,才发现数字,字母及符号组合有很多很多,无法全部枚举,所以在新建的文本文档中只象征性的列出几种符号,但这并不影响此法分析结果的完成。总之,通过本次实验,一点点分析词法分析器的功能,并努力实现它,掌握了课程设计内容的同时也锻炼了自己分析解决问题的能力以及编程能力,收获颇丰!