




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理课程设计(一) 词法分析器1、题目设计并实现c语言词法分析器。2、实验目的设计并实现 C 语言的词法分析程序,要求如下。(1) 可以识别出用C语言编写的源程序中的每个单词符号,并以记号的形式输出每个单词符号。(2) 可以识别并读取源程序中的注释。(3) 可以统计源程序中的语句行数、单词个数和字符个数,其中标点和空格不计算为单词,并输出统计结果。(4) 检查源程序中存在的非法字符错误,并可以报告错误所在的行列位置。(5) 发现源程序中存在错误后,进行适当的恢复,使词法分析可以继续进行,通过一次词法分析处理,可以检查并报告源程序中存在的所有词法拼写错误。3、输入和输出程序输入:从文件中读入程序段;程序输出:由单词种别和单词符号的属性值组成的二元式;4、状态转换图 01324567空白字母非字母与数字字母或数字数字非数字运算符界符其他*5、程序框架描述程序中编写了以下函数,各个函数实现的作用如下:int alpha(int st):/识别保留字和标识符。int number(int st) /识别整数int anotation(int st) /处理除号/和注释int other(int st) /函数识别其他特殊字符int choice(int st) /根据读入的单词的第一个字符确定调用不同的单词识别函数6、实现程序的源程序代码#include#include#include#includeusing namespace std;string keywords20=include,void,main,int,char,float,double,if,else,then,break,continue,for,do,while,printf,scanf,begin,end,return;char rz99999= ;string id10000;int pp=0;string nu10000;int qq=0;int choice1(char a) /判断是否是字母 if(a=a&a=A&a=0&a=9) return 1; else return 0;int alpha(int st) /识别保留字和标识符char wordbuf20= ;int n=0;for( ; ; )wordbufn=rzst; st+;n+; if(choice2(rzst)=1)|(choice1(rzst)=1)|(rzst=_)wordbufn=rzst;else break;int flag=0;for(int k=0;k20;k+)if(strcmp(keywordsk.c_str(),wordbuf)=0) flag=1; if(flag=0)int flagg=-1;for(int t=0;tpp;t+) if(strcmp(idt.c_str(),wordbuf)=0) flagg=t;if(flagg!=-1) printf( (id,%d) ,flagg);else idpp=wordbuf; printf( (id,%d) ,pp); pp+;else printf( ();for(int i=0;in;i+) printf(%c,wordbufi);printf(,-) );return st;int number(int st) /识别整数char numbuf20= ;int n=0;int k=0;int flag=0;for( ; ; )numbufn=rzst; st+;n+; if(choice2(rzst)=1)numbufn=rzst;else if(k=0)&(rzst=.) numbufn=rzst;k+;else if(choice1(rzst)=1)numbufn=rzst;flag=1;continue;else break;if(flag=0)int flagg=-1;for(int t=0;tqq;t+) if(strcmp(nut.c_str(),numbuf)=0) flagg=t;if(flagg!=-1) printf( (nu,%d) ,flagg);else nuqq=numbuf; printf( (nu,%d) ,qq); qq+;else printf( ();for(int i=0;in;i+) printf(%c,numbufi); printf(,error digital!) );return st;int anotation(int st) /处理除号/和注释char tabuf9999= ;int n=0; st+;if(rzst=/)printf( (/,-) );st+;while(rzst!=10)tabufn=rzst;st+;n+;printf( n 注释);for(int i=0;in;i+)printf(%c,tabufi);else if(rzst=*)printf( (/*,-) );st+;int stt=st+1;while(1)if(rzst=*&rzst+1=/) break;tabufn=rzst;st+;n+;if(rzst+1=0)printf(/* error!n);return st+1;printf( n 注释);for(int i=0;i: st+; if(rzst=) st+; printf( (rlop,=) ); else printf( (rlop,) ); break;case : st+; if(rzst=) st+; printf( (rlop,=) ); else printf( (rlop,) ); break;case %: st+; if(rzst=) st+; printf( (%=,-) ); else printf( (%,-) ); break;case !: st+; if(rzst=) st+; printf( (!=,-) ); else printf( (!,wrong thing!) ); break;case &: st+; if(rzst=&) st+; printf( (&,-) ); else printf( (&,worng word!) ); break;case |: st+; if(rzst=|) st+; printf( (|,-) ); else printf( (|,worng word!) ); break;case : st+; printf( (,-) ); break;case : st+; printf( (,-) ); break;case (: st+; printf( (,-) ); break;case ): st+; printf( (),-) ); break;case : st+; printf( (,-) ); break;case : st+; printf( (,-) ); break;case : st+; printf( (:,-) ); break;case #: st+; printf( (#,-) ); break;case ;: st+; printf( (;,-) ); break;case .: st+; printf( (.,-) ); break;case ,: st+; printf( (,-) ); break;case : st+; break;case : st+; break;case 10: st+; printf(n); break;case 34: st+; printf( (,-) ); break;case 39: st+; printf( (,-) ); break;default: printf( (%c,worng thing) ,rzst); st+;return st;int choice(int st) /根据读入的单词的第一个字符确定调用不同的单词识别函数if(choice1(rzst)=1)st=alpha(st);else if(choice2(rzst)=1)st=number(st);else if(rzst=/)st=anotation(st);else st=other(st);return st;int main() int i=0;FILE *fp;char name10;printf(请输入文件名:n);scanf(%s,&name);if(fp=fopen(name,r)=NULL)printf(Open error!);exit(0);char ch=fgetc(fp);while(ch!=EOF)rzi=ch;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 9.18事变防空演练方案3篇2025
- 达标工程工作实施方案(3篇)
- 艺术品买卖合同注意事项
- 影视产业全球市场走势与预测
- 风湿安泰片不良反应风险评估模型构建-洞察及研究
- 老年骨质疏松椎体骨折术后护理查房
- 20xx开学第一课先辈的旗帜心得体会600字5篇
- 基于工业物联网的出料斗动态载荷实时监测与故障预测系统
- 基于区块链的刹车传感环全生命周期追溯体系构建路径
- 城市级反射单灯阵列的分布式协同控制算法能耗优化模型
- 婚宴酒店开业活动方案
- 2024年成都新都投资集团有限公司招聘笔试真题
- 企业统借统还管理制度
- 蜂窝无源物联网标签技术白皮书
- 盆底重建术并发症
- 新解读《HJ 694 - 2014水质 汞、砷、硒、铋和锑的测定 原子荧光法》新解读
- 2025至2030中国挠性覆铜板FCCL行业市场发展分析及应用领域与发展前景报告
- 【苏州】2024年江苏苏州昆山市人民检察院下属事业单位招聘编外工作人员7人笔试附带答案详解
- 2025年全国统一高考语文试卷(全国一卷)含答案
- 2025年《数字孪生与虚拟调试技术应用》课程标准
- 医院价格公示管理制度
评论
0/150
提交评论