词法分析程序.docx

词法分析程序.docx

ID:57809354

大小:146.93 KB

页数:23页

时间:2020-03-29

词法分析程序.docx_第1页
词法分析程序.docx_第2页
词法分析程序.docx_第3页
词法分析程序.docx_第4页
词法分析程序.docx_第5页
资源描述:

《词法分析程序.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、专业课程设计II题目:专业学生姓名班级学号指导教师指导单位日期词法分析程序的构造一、课题内容和要求基本功能:通过状态转换图构造C或者PASCAL语言子集的词法分析程序。例如选取了C语言,选取其中一个子集,例如包含了部分关键字main、float、if、for等等,特殊符号(、<、=、+等等,特殊定义的标识符变量以及部分常量等,采用《编译原理》词法分析中有穷自动机的思想构建出该语言子集的状态转换图,并编码实现。要求将选取的语言子集编写一个简单程序,放在一个文本文件中;要将一个个单词区分清楚并归类(

2、例如for属于关键字>,词法分析程序作一遍扫描,采用双缓冲区结构。并且如vc将关键字着色以加以识别。b5E2RGbCAP二、概要设计23/23(1)状态装换图(2)功能模块核心代码:1)、数据类型定义:externstructtable//保留字<关键字)和各自的编码{intid。charcode[10]。}。structtablekey[100]={{100,"main"},{101,"int"},{102,"char"},{103,"if"},p1EanqFDPw{104,"else"},{

3、105,"for"},{106,"while"},{107,"ERROR"},}。DXDiTa9E3dinta=200。//自定义变量编码intb=300。//数字编码intd=400。//运算符编码23/23inte=500。//分隔符编码intf=600。//关系运算符编码2)、函数调用voidscanner(FILE*fp>//读取文件内容,并加以识别判断intreserve(char*p>//识别判断是否为关键字函数voidoutput(intt,char*s>//输出函数3)、状态判断

4、voidscanner(FILE*fp>{if(isalpha(ch>>//如果是字母{token[0]=ch。i=1。ch=fgetc(fp>。while(isalpha(ch>

5、

6、isalnum(ch>>//循环接受字母{token[i]=ch。//放入数组中i++。ch=fgetc(fp>。}fseek(fp,-1,1>。token[i]=''。c=reserve(token>。//判断是否为关键字if(c!=-1>{23/23output(c,token>。}elseoutput(a

7、++,token>。}elseif(isdigit(ch>>//如果是数字{token[0]=ch。ch=fgetc(fp>。i=1。while(isdigit(ch>>//循环接受{token[i]=ch。i++。ch=fgetc(fp>。}token[i]=''。fseek(fp,-1,1>。output(b++,token>。}elseswitch(ch>//判断是否为符号{23/23case'(':output(e++,"(">。break。//是否为(,是则输出RTCrpUDGiT

8、case'>':output(e++,">">。break。//是否为>,是则输出5PCzVD7HxAcase'[':output(e++,"[">。break。//是否为[,是则输出jLBHrnAILgcase']':output(e++,"]">。break。//是否为],是则输出xHAQX74J0Xcase'{':output(e++,"{">。break。//是否为{,是则输出LDAYtRyKfEcase'}':output(e++,"}">。break。//是否为},是则输出Zzz6Z

9、B2Ltkcase',':output(e++,",">。break。//是否为,,是则输出dvzfvkwMI1case':':output(e++,":">。break。//是否为:,是则输出rqyn14ZNXIcase'。':output(e++,"。">。break。//是否为。,是则输出EmxvxOtOcocase'"':output(e++,""">。break。//是否为,是则输出SixE2yXPq5case'+':ch=fgetc(fp>。//是否为+,是则往前搜索一个字符if

10、(!feof(fp>>//判断是否到文件末尾{if(ch=='+'>//如果下一个字符是+,则输出++output(f++,"++">。else//不是则文件指针回退一个,输出+{fseek(fp,0,1>。output(f++,"+">。}}elseoutput(f++,"+">。break。case'-':ch=fgetc(fp>。//是否为-,是则往前搜索一个字符23/23if(!feof(fp>>{if(ch=='-'>output(f++,"--">。else{fseek(fp,0,1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。