编译原理课程设计报告词法分析器_第1页
编译原理课程设计报告词法分析器_第2页
编译原理课程设计报告词法分析器_第3页
编译原理课程设计报告词法分析器_第4页
编译原理课程设计报告词法分析器_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、,do, call,co nst,char,u ntil,procedure,repeat等(2)运算符:界符:(4)标识符常量四操作要求首先建立一个或多个文档,此处新建了两个文档,例:07196133.txt 文本文档和zhaoxiaodo ng.txt文本文档,以供选择,各文本文档中都输入有不同的内容,O719A133.txt -记事本- X文件(日编格式(查看侧帮助(也 intif abdE zhfloxiaodong.txt - X文件(日編辑格式程查看加帮助(也if ( )% abcl98 a19bcd iAH +2A It并把分析运行程序,出现提示,输入文本文档的名称,即可对文本文

3、档中的内容进行分析,结果输出显示在屏幕上。五. 算法设计#in elude #in cludeusing n amespace std;#defi ne MAX 22char ch =;string key15=begin,end,if,then,else,while,write,read,do, call,co nst,char,u ntil,procedure,repeat;int Iskey(stri ng c)/关键字判断int i;for(i=0;iMAX;i+) if(pare(c)=0) retur n 1;return 0;int lsLetter(char c

4、) /判断是否为字母if(c=a)|(c=A) return 1;else return 0;int IsDigit(char c)/判断是否为数字if(c=0&c=9) return 1;else return 0;void an alyse(FILE *fpi n)stri ng arr=;while(ch=fgetc(fpin)!=EOF) arr=;if(ch= |ch=t|ch=n)else if(IsLetter(ch) while(lsLetter(ch)|lsDigit(ch) if(ch=A) ch=ch+32;arr=arr+ch;ch=fgetc(fp in);fseek

5、(fpi n,-1L,SEEK_CUR);if (lskey(arr)coutarrt$属于关键字endl;else coutarrt$属于普通标识符endl;else if(IsDigit(ch)while(lsDigit(ch)|ch=.&lsDigit(fgetc(fpi n) arr=arr+ch;ch=fgetc(fpi n);fseek(fpi n,-1L,SEEK_CUR); coutarrt$属于无符号实数endl;else switch(ch)case+:case-case*case=:case/ :coutcht$ case(: case): case: case: cas

6、e;: case.: case,: case: case :coutcht$ case: :ch=fgetc(fp in);if(ch=) cout:=t$ else cout=t$属于运算符endl;break;属于界符endl;break;属于运算符endl;属于运算符 :ch=fgetc(fp in); if(ch=) cout=)coutt$ else coutt$ fseek(fpi n,-1L,SEEK_CUR); break;case :ch=fgetc(fp in); if(ch=)cout=t$属于运算符endl; 属于输入控制符 属于运算符endl;属于运算符endl;el

7、se if(ch=)coutt$属于输出控制符) coutt$属于运算符endl;elsecoutt$属于运算符endl;fseek(fpi n,-1L,SEEK_CUR);break;default : coutcht$无法识别字符,请重新输入!e ndl; void mai n()char in_fn30;FILE * fpi n;cout in_fn;if(fpin=fopen(in_fn,r)!=NULL) break;else cout提示:路径输入错误!请重新输入源文件名coutn*e ndl;coutn*分析*e ndl;an alyse(fp in); fclose(fp in

8、);六. 上机实现情况及运行结果(包括中间和最终结果)源文件中包括的文件如下图:编写完程序后,调试,编译,无误,如下图:运行程序,根据提示,输入源文件名07196133.txt,显示词法分析结果如下图:运行程序,输入另一个源文件名zhaoxiaodong.txt,显示此法分析结果如下图: E:MICROSOFTVISUAL C+ 6,0 简休中文企业版CiFaFenXi07196133DebugiFaFenXi.口 Xan无无无无 k -_ $ $ $- $- $- $ $ $ $ $ $ $- y字1A1A1A 重重重 请请请识识识青输入源文件名:haoxiaodong.txt数符-養符nt

9、 s?CD 二键通别O 一一 运识识迟MM曰运无普识t 于于于于于于于于于于于法ey 二 二 二 二 二 F二二二二二二二二二二二二二二二二二二二二二二二二二二二二二析Ld七. 小结通过本次课程设计的练习,熟悉了用C+语言编写词法分析器的过程,掌握了词法分析器的原理以及功能。词法分析是编译过程中的一个阶段,在语法分析前进行。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析 使用。词法分析程序的主要任务:读源程序,产生单词符号。词法分析程序的其他任务:滤掉空格,跳过注释、换行符追踪换行标志,复制出错源 程序,宏展开,等等等等。词法分析工作从语法分析工作独立出来的原因:简化设计,改进编译效率,增加编译系统的可移植性 。而且从划分关键字,运算符,界符

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论