设计并实现c语言词法分析器.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计并实现c语言词法分析器

编译原理课程设计(一) ——词法分析器1、题目设计并实现c语言词法分析器。2、实验目的设计并实现 C 语言的词法分析程序,要求如下。(1) 可以识别出用C语言编写的源程序中的每个单词符号,并以记号的形式输出每个单词符号。(2) 可以识别并读取源程序中的注释。(3) 可以统计源程序中的语句行数、单词个数和字符个数,其中标点和空格不计算为单词,并输出统计结果。(4) 检查源程序中存在的非法字符错误,并可以报告错误所在的行列位置。(5) 发现源程序中存在错误后,进行适当的恢复,使词法分析可以继续进行,通过一次词法分析处理,可以检查并报告源程序中存在的所有词法拼写错误。3、输入和输出程序输入:从文件中读入程序段;程序输出:由单词种别和单词符号的属性值组成的二元式;4、状态转换图白字母非字母与数字字母或数字数字非数字运算符界符其他*****5、程序框架描述程序中编写了以下函数,各个函数实现的作用如下:int alpha(int st)://识别保留字和标识符。int number(int st) //识别整数int anotation(int st) //处理除号/和注释int other(int st) //函数识别其他特殊字符int choice(int st) //根据读入的单词的第一个字符确定调用不同的单词识别函数6、实现程序的源程序代码#includestdio.h#includestdlib.h#includestring#includeiostreamusing namespace std;string keywords[20]={include,void,main,int,char,float,double,if,else,then,break,continue,for,do,while,printf,scanf,begin,end,return};char rz[99999]= ;string id[10000];int pp=0;string nu[10000];int qq=0;int choice1(char a) //判断是否是字母{ if((a=aa=z)||(a=Aa=Z)) return 1; else return 0;}int choice2(char a) //判断是否是数字{ if(a=0a=9) return 1; else return 0;}int alpha(int st) //识别保留字和标识符{char wordbuf[20]= ;int n=0;for( ; ; ){wordbuf[n]=rz[st]; st++;n++; if((choice2(rz[st])==1)||(choice1(rz[st])==1)||(rz[st]==_))wordbuf[n]=rz[st];else break;}int flag=0;for(int k=0;k20;k++){if(strcmp(keywords[k].c_str(),wordbuf)==0) flag=1;} if(flag==0){int flagg=-1;for(int t=0;tpp;t++){ if(strcmp(id[t].c_str(),wordbuf)==0){ flagg=t;}}if(flagg!=-1) printf( (id,%d) ,flagg);else{ id[pp]=wordbuf; printf( (id,%d) ,pp); pp++;}}else {printf( ();for(int i=0;in;i++){ printf(%c,wordbuf[i]);}printf(,-) );}return st;}int number(int st) //识别整数{char numbuf[20]= ;int n=0;int k=0;int flag=0;for( ; ; ){numbuf[n]=rz[st]; st++;n++; if(choice2(rz[st])==1){numbuf[n]=rz[st];}else if((k==0)(rz[st]==.)) {numbuf[n]=rz[st];k++;}else if(choice1(rz[st])==1){numbuf[n]=rz[st];flag=1;continue;}else break;}if(flag==0){int flagg=-1;for(int t=0;tqq;t++) if(strcmp(nu[t].c_str(),numbuf)==0) flagg=t;if(flagg!=-1) printf( (nu,%d) ,flagg);else{ nu[qq]=numbuf; printf( (nu,

文档评论(0)

kaiss + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档