




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. 课程设计题目: 词法分析器的实现二.课程设计成员 三.课程设计内容和要求 设计一个程序,调试、编译,实现词法分析的功能,识别各单词或字符所属类别,并显示在屏幕上。词法分析器:逐个读入源程序字符并按照构词规则切分成一系列单词。单词是语言中具有独立意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。词法分析是编译过程中的一个阶段,在语法分析前进行 。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。要求:通过词法分析器能够实现以下五种类型如单词等的识别。(1)关键字begin,end,if,then,else,while,write,read等,do, call,const,char,until,procedure,repeat等(2)运算符:+,-,*,/,=等(3)界符:,;,.,(,),:等(4)标识符 (5)常量四操作要求 首先建立一个或多个文档,此处新建了两个文档,例:.txt文本文档和zhaoxiaodong.txt文本文档,以供选择,各文本文档中都输入有不同的内容,运行程序,出现提示,输入文本文档的名称,即可对文本文档中的内容进行分析,并把分析结果输出显示在屏幕上。五.算法设计#include #includeusing namespace std;#define MAX 22 char 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 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 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;break; 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; fseek(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);六.上机实现情况及运行结果(包括中间和最终结果) 源文件中包括的文件如下图:编写完程序后,调试,编译,无误,如下图:运行程序,根据提示,输入源文件名.txt,显示词法分析结果如下图:运行程序,输入另一个源文件名zhaoxiaodong.txt,显示此法分析结果如下图:七.小结 通过本次课程设计的练习,熟悉了用C+语言编写词法分析器的过程,掌握了词法分析器的原理以及功能。词法分析是编译过程中的一个阶段,在语法分析前进行。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。词法分析程序的主要任务:读源程序,产生单词符号。 词法分析程序的其他任务:滤掉空格,跳过注释、换行符追踪换行标志,复制出错源程序,宏展开,等等等等。词法分析工作从语法分析工作独立出来的原因:简化设计,改进编译效率,增加编译系统的可移植性 。而且从划分关键字,运算符,界符,标识符和常量,才发现数字,字母
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 制水岗位培训题目及答案
- 指数函数高三题目及答案
- 虚拟现实行业市场趋势分析
- 2025年电工题库考试技巧及答案
- 2025年项目考试试题简答题及答案
- 2025年山西省阳泉市事业单位工勤技能考试题库及答案
- 2025年河津数学考试题及答案
- CN120091639B 接触孔形成方法及图像传感器 (合肥晶合集成电路股份有限公司)
- 2025年少先队小达人题库及答案
- 《夏天里的成长》课件 统编版语文六年级上册
- GB/T 43071-2023植保无人飞机
- 人美版七年级美术当卢浮宫遇见紫禁城公开课一等奖课件省赛课获奖课件
- 标准日本语上册答案
- 超高压线下有限净空内地连墙施工工法
- 附表耶鲁抽动程度综合量表
- HJX104桁架式泵吸泥机技术说明
- 食品安全 课件 高中主题班会
- YS/T 320-2007锌精矿
- YS/T 226.12-2009硒化学分析方法第12部分:硒量的测定硫代硫酸钠容量法
- GB/T 24218.3-2010纺织品非织造布试验方法第3部分:断裂强力和断裂伸长率的测定(条样法)
- 系统工程原理 - 国防科技大学信息系统与管理学院
评论
0/150
提交评论