ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:38.38KB ,
资源ID:4850454      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4850454.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理课程设计词法分析器附含源代码.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理课程设计词法分析器附含源代码.docx

1、编译原理课程设计词法分析器附含源代码编译原理-词法分析器的设计 一 设计说明及设计要求一般来说,编译程序的整个过程可以划分为五个阶段:词法分析、语法分析、中间代码生成、优化和目标代码生成。本课程设计即为词法分析阶段。词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(也称单词符号或符号)。如保留字(关键字或基本字)、标志符、常数、算符和界符等等。二 设计中相关关键字说明1 基本字:也称关键字,如C语言中的 if , else , while , do ,for,case,break, return

2、等。2 标志符:用来表示各种名字,如常量名、变量名和过程名等。3 常数:各种类型的常数,如12,6.88,和“ABC”等。4 运算符:如 + ,- , * , / ,%, ,= 等。5 界符,如逗点,冒号,分号,括号,# , , 等。三 、程序分析词法分析是编译的第一个阶段,它的主要任务是从左到右逐个字符地对源程序进行扫描,产生一个个单词序列,用以语法分析。词法分析工作可以是独立的一遍,把字符流的源程序变为单词序列,输出在一个中间文件上,这个文件做为语法分析程序的输入而继续编译过程。然而,更一般的情况,常将词法分析程序设计成一个子程序,每当语法分析程序需要一个单词时,则调用该子程序。词法分析程

3、序每得到一次调用,便从源程序文件中读入一些字符,直到识别出一个单词,或说直到下一个单词的第一个字符为止。四 、模块设计下面是程序的流程图五、 程序介绍在程序当前目录里建立一个文本文档,取名为infile.txt,所有需要分析的程序都写在此文本文档里,程序的结尾必须以“”标志符结束。程序结果输出在同一个目录下,文件名为outfile.txt,此文件为自动生成。本程序所输出的单词符号采用以下二元式表示:(单词种别,单词自身的值)如程序输出结果 (57,#)(33,include)(52,)(33,iostream) 等。程序的功能:(1) 能识别C语言中所有关键字(共32个)(单词种别分别为1 3

4、2 ,详情见程序代码相关部分,下同)(2) 能识别C语言中自定义的标示符 (单词种别为 33)(3) 能识别C语言中的常数 (单词种别为0)(4) 能识别C语言中几乎所有运算符(单词种别分别为41 54)(5) 能识别C语言中绝大多数界符 (单词种别分别为 55 66)六 、运行结果输入文件infile.txt运行结果(输出文件 outfile.txt)七、 设计体会八、附录部分(程序代码)单词符号类别编码单词符号类别编码单词符号类别编码单词符号类别编码if3float21+31#62then4short22-32.63else5unsigned23*33,64while6continue24

5、/34:65do7for25=39begin8signed2636=38end9void27=37=41long10default28:=51!=42switch11goto29(52%40case12sizeof30)53标识符1enum13volatile43;54常数2register14auto4455typedef15double4556char16int 4657extern17struct4758return18break4860const20“61提示:文件的打开和读写函数:FILE *fp,*out; /定义文件指针fp=fopen(infile.txt,r)如果打开文件in

6、file.txt失败,则函数返回NULL,即fp=NULL,第二个参数“r”表示以只读方式打开,如果为”w”, 则以可写方式打开调用fgetc(fp)这个函数一次从fp所指向的文件读取一个字符char ch=fgetc(fp);想文件写字符的函数为fprintf(FILE * fp,写进的内容)比如下面的调用fprintf(outfile,abcdn)是把字符串“abcd”写到文件outfile的末尾,并且在后面加上了一个换行标志文件读写完成后要用函数fclose(fp)关闭。源代码#include stdio.h#include string.h#include ctype.hvoid an

7、alzid(FILE *output,char *p) int i=0; int count=0; if (isalpha(p0)if (strcmp(p,if)=0) fprintf(output,(3,if)n);else if(strcmp(p,then)=0) fprintf(output,(4,then)n);else if(strcmp(p,else)=0) fprintf(output,(5,else)n);else if(strcmp(p,while)=0) fprintf(output,(6,while)n);else if(strcmp(p,do)=0) fprintf(o

8、utput,(7,do)n);else if(strcmp(p,begin)=0) fprintf(output,(8,begin)n);else if(strcmp(p,end)=0) fprintf(output,(9,end)n);else if(strcmp(p,long)=0) fprintf(output,(10,long)n);else if(strcmp(p,switch)=0) fprintf(output,(11,switch)n);else if(strcmp(p,case)=0) fprintf(output,(12,case)n);else if(strcmp(p,e

9、num)=0) fprintf(output,(13,enum)n);else if(strcmp(p,register)=0) fprintf(output,(14,register)n);else if(strcmp(p,typedef)=0) fprintf(output,(15,typedef)n);else if(strcmp(p,char)=0) fprintf(output,(16,char)n);else if(strcmp(p,extern)=0) fprintf(output,(17,extern)n);else if(strcmp(p,return)=0) fprintf

10、(output,(18,return)n);else if(strcmp(p,union)=0) fprintf(output,(19,union)n);else if(strcmp(p,const)=0) fprintf(output,(20,const)n);else if(strcmp(p,float)=0) fprintf(output,(21,float)n);else if(strcmp(p,short)=0) fprintf(output,(22,short)n);else if(strcmp(p,unsigned)=0) fprintf(output,(23,unsigned)

11、n);else if(strcmp(p,continue)=0) fprintf(output,(24,continue)n);else if(strcmp(p,for)=0) fprintf(output,(25,for)n);else if(strcmp(p,signed)=0) fprintf(output,(26,signed)n);else if(strcmp(p,void)=0) fprintf(output,(27,void)n);else if(strcmp(p,default)=0) fprintf(output,(28,default)n);else if(strcmp(p

12、,goto)=0) fprintf(output,(29,goto)n);else if(strcmp(p,sizeof)=0) fprintf(output,(30,sizeof)n);else if(strcmp(p,volatile)=0) fprintf(output,(43,volatile)n);else if(strcmp(p,auto)=0) fprintf(output,(44,auto)n);else if(strcmp(p,double)=0) fprintf(output,(45,double)n);else if(strcmp(p,int)=0) fprintf(ou

13、tput,(46,int)n);else if(strcmp(p,struct)=0) fprintf(output,(47,struct)n);else if(strcmp(p,break)=0) fprintf(output,(48,break)n);else if(strcmp(p,static)=0) fprintf(output,(49,static)n);else fprintf(output,(1,%s)n,p); else for(;i(int)strlen(p);i+) if(isdigit(pi) count+; if (count=(int)strlen(p) fprin

14、tf(output,(2,%s)n,p); else if (p0=_&(isalpha(p1) fprintf(output,(1,%s)n,p); else fprintf(output,%s 未定义n,p); void analzsy(FILE *outfile,char *p) if (strcmp(p,=)=0) fprintf(outfile,(37,=)n); else if(strcmp(p,+)=0) fprintf(outfile,(31,+)n); else if(strcmp(p,-)=0) fprintf(outfile,(32,-)n); else if(strcm

15、p(p,*)=0) fprintf(outfile,(33,*)n); else if(strcmp(p,/)=0) fprintf(outfile,(34,/)n); else if(strcmp(p,()=0) fprintf(outfile,(52,()n); else if(strcmp(p,)=0) fprintf(outfile,(53,)n); else if(strcmp(p,)=0) fprintf(outfile,(55,)n); else if(strcmp(p,)=0) fprintf(outfile,(56,)n); else if(strcmp(p,)=0) fpr

16、intf(outfile,(57,)n); else if(strcmp(p,)=0) fprintf(outfile,(58,)n); else if(strcmp(p,)=0) fprintf(outfile,(59,)=0) fprintf(outfile,(60,)n); else if(strcmp(p,)=0) fprintf(outfile,(61,)n); else if(strcmp(p,#)=0) fprintf(outfile,(62,#)n); else if(strcmp(p,.)=0) fprintf(outfile,(64,.)n); else if(strcmp

17、(p,*)=0) fprintf(outfile,(33,*)n); else if(strcmp(p,/)=0) fprintf(outfile,(34,/)n); else if(strcmp(p,%)=0) fprintf(outfile,(40,%)n); else if(strcmp(p,)=0) fprintf(outfile,(64,)n); else if(strcmp(p,:)=0) fprintf(outfile,(65,:)n); else if(strcmp(p,;)=0) fprintf(outfile,(54,;)n); else if(strcmp(p,)=0)

18、fprintf(outfile,(36,)n); else if(strcmp(p,)=0) fprintf(outfile,(35,=)=0) fprintf(outfile,(39,=)n); else if(strcmp(p,=)=0) fprintf(outfile,(38,=a&stri=A&stri=0&stri=9)|(stri=_) idstrx=stri;idstrx+1=0;x+;i+;EA=1; else x=0; if(strlen(idstr)!=0)&(EA) analzid(out,idstr); idstrx=0; if(stri9&striZ&striz) i

19、f(stri!=!&stri!=&stri!=) systry=stri;systry+1=0;analzsy(out,systr);i+; else if(stri=!&stri+1=)|(stri=&stri+1=)| (stri=&stri+1=)|(stri=&stri+1=)| (stri=&stri+1=&stri+1=) systry=stri;systry+1=stri+1;systry+2=0; analzsy(out,systr);i+;i+; else systry=stri;systry+1=0;analzsy(out,systr);i+;printf(-全部结果已经存入outfile.txt文档-n);fprintf(out,-完成-);fclose(fp);fclose(out);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1