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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

词法分析器文档.docx

1、词法分析器文档词法分析器说明书华南理工大学广州汽车学院2007级计算机1班邹明汕、严嘉健词法分析器是通过编写程序,对字符集进行识别。字符集包括保留字,标识符,整数,字符常数和符号(双界符,单界符)。每次遇到相应的单词时输出单词的种别码,如果单词不在单词表的范围内则输出报错信息。另外如果双界符不是成对出现程序也可测出错误并报错。词法分析器功能:识别指定路径下的文本文档中的内容,并输出单词的种别码,对超出范围的单词报错,对不成对的双界符,【】报错,对错误标识符报错,如:1a。关键代码分析:程序代码主要分为三个模块1、 模块一主函数模块功能:对规定路径下的文本文档中的内容进行断句,然后录入数组操作。

2、首先用i=f.get()从文件中取出一个字符并赋值给i,i为该字符的ASC值,为整数。并将i存入一个足够大的数组中an=i;用while()函数循环此操作,遇到空格或换行或文件结束符或符号时,添加自定义的结束标示符127,然后调用字符集识别函数scan(int a ),在确定调用scan(int a )之前还要数组中存放的单词是否是否是符号,如果是符号,需要判别该符号是否是双界符,否则程序会将双界符分开两次传送造成识别错误。该模块还对双界符,【】是否成对出现进行判断,当遇到左符号是计数器t加1,遇到有符号时计数器t减1。如果最后t不为0时报错。2、 模块二识别函数模块scan(int a )功

3、能:根据单词编码表判别单词的种别码该函数模块分为六小部分,分别用标志符flag区分,把单词表中的保留字字符存放在指针数组char*p35中,符号存放在指针数组char*q22中,作为比较的标准。flag0为保留字判断,代码会通过for循环对单词的逐个字符和指针数组char*p35中的保留字进行比较,判断单词是否为保留字。如果不是则自动进入flag1中判断单词是否为整数,整数的ASC值范围是48到57。如果不是则自动进入flag2中判断单词是否为标识符,标识符的ASC值范围是65到90和97到122。如果不是则进入flag3中判断单词是否为字符常数,字符常数判断的重要标准:单词前后是否含有单引号

4、。单引号的ASC值是39,如果不是进入flag4中判断单词是否为符号,代码会通过for循环对单词的逐个字符和指针数组char*q22中的符号进行比较,判断单词是否为符号。如果不是程序则自动进入flag10,并调用输出函数show()报错。3、 模块三输出函数show(int k,int a,int flag)功能:按照样板的输出标准,输出单词的种别码,如果有错误则报错。根据flag标志位进行输出,当flag为0和4时输出标准为当flag为1、2、3时输出标准为,把文件中的标识符,整数,字符常数不重复的放入一个足够大的数组中,每次放入前比较数组中是否含有相同的单词,如果没有则添加进数组,并输出该

5、单词在数组中的位置n,反之,输出数组中和该单词相同单词的位置n,n是单词在数组中的序号,按照比较顺序排放。当flag为10是输出报错信息附录:#include#include#includeint s=0;int q100;void show(int k,int a,int flag) s+; int i,j,f1,f2=0,h,t=1; if(flag=0|flag=4) cout(k,-) ; if(flag=1|flag=2|flag=3) cout(k,; for(i=0,h=0;i100;i+,h+) if(f2=1) h=0;f2=0; if(q0=NULL) for(i=0;i1

6、00;i+) qi=ai; if(ai=127) i=0; break; coutt; break; if(ah=127) coutt; break; if(qi!=ah) for(j=i;j100;j+) if(qj=127) if(qj+1=NULL) for(j=j+1,h=0;j100;j+,h+) qj=ah; if(ah=127) coutt+1; f1=1; break; i=j; t+; f2=1; break; if(f1=1) f1=0;break; cout) ; if(flag=10) cout(error) ; if(s%5=0) coutendl; void sca

7、n(int a)int n,flag,k,r; char *q22=(,),*,*/,+,-,.,.,/,/*, :,:=,;,=,=,=,; char*p35= and,array,begin,bool,call,case,char,constant, dim,do,else,end,false,for,if,input,integer,not, of,or,output,procedure,program,read,real,repeat, set,stop,then,to,true,until,var,while,write ; if(a0=48&a0=65&an=97&an=122)

8、flag=10; k=0; show(k,a,flag); return; flag=0; if(flag=0) for(k=0;k35;k+) n=0; while(*(pk+n)!=NULL) if(an!=int(*(pk+n) break; if(*(pk+n+1)=NULL&an+1=127) show(k+1,a,flag); return; n+; flag=1; if(flag=1) n=0; while(an!=127) if(an57) break; n+; if(an=127) k=37; show(k,a,flag); return; flag=2; if(flag=2

9、) n=0; while(an!=127) if(an=65&an=97&an=48&an=57) n+; else break; if(an=127) k=36; show(k,a,flag); return; r=0; flag=3; if(flag=3) n=0; while(an!=127) if(an=39) r+; n+; if(an!=123&an!=125) n+; else flag=10;show(k,a,flag); if(an=39) r-; k=38; show(k,a,flag); return; if(r!=0) flag=10; show(k,a,flag);

10、return ; flag=4; if(flag=4) for(k=0;k=40&i=58&i=40&i=58&i=62|i=91|i=93) if(i=42) t4+; n=0; else if(i=47) t4-; n=0; i=32; else an=i; n+; an=127; scan(a); n=0; i=f.get(); else an=127; scan(a); n=0; if(i!=32&i!=10&t4=0) an=i; n+; if(t1!=0) cout错误:缺少(或)endl; if(t2!=0) cout错误:缺少或endl; if(t3%2!=0) cout错误:

11、缺少endl; if(t4!=0) cout错误:缺少/*或*/endl; f.close(); 单词表:单 词种别码单 词种别码单 词种别码and1output21*41array2procedure22*/42begin3program23+43bool4read24,44call5real25-45case6repeat26.46char7set27.47constant8stop28/48dim9then29/*49do10to30:50else11true31:=51end12until32;52false13var3353for14whilr34=54if15write3555input16标识符36=56integer17整数3757not18字符常数38=58of19(3959or20)4060

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

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