C语言词法分析器构造实验报告(1)1.doc

C语言词法分析器构造实验报告(1)1.doc

ID:52456262

大小:60.96 KB

页数:12页

时间:2020-03-27

C语言词法分析器构造实验报告(1)1.doc_第1页
C语言词法分析器构造实验报告(1)1.doc_第2页
C语言词法分析器构造实验报告(1)1.doc_第3页
C语言词法分析器构造实验报告(1)1.doc_第4页
C语言词法分析器构造实验报告(1)1.doc_第5页
资源描述:

《C语言词法分析器构造实验报告(1)1.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C语言词法分析器构造实验报告02计算机(2)2002374203冯绍欣一、题目要求:完成一个C语言的词法分析器的构造。此词法分析器能识别附值语句、循环语句、条件语句、并能处理注释。二、设计方案:这个词法分析器分析的主要关键字有:main,int,float,char,if,else,for,while,do,switch,case,break;default。选择要分析的c文件,首先对其去掉注释和与空格处理,再根据字符的不同类型分析。1、全局数据结构:字符数组set[]:存放从文件中读到的所有字符;str[]:存放经过注释处理和预空格处理的字符;strtoken[]

2、:存放当前分析的字符;结构体KEYTABLE:存放关键字及其标号;全局字符变量ch:当前读入字符;全局整型变量sr,to:数组str,strtoken的指针。2、以层次图形式描述模块的组成及调用关系Main()Analysis()Set32()Openfile()Reflesh()Concat()GetBC()GetChar()Process()Reserve()IsDigit()GetChar()IsLetter()Retract()3、主要函数的设计要求(功能、参数、返回值):openfile:打开文件;GetChar:将下一个输入字符读到ch中,搜索指示器前移

3、一字符位置;GetBC:检查ch中的字符是否为空白。若是,则调用GetChar直至ch中进入一个非空白字符;Concat:将ch中的字符连接到strtoken之后;IsLetter和IsDigit:布尔函数过程,分别判断ch中的字符是否为字母和数字;Reserve:整型函数过程,对strtoken中的字符串查找关键字表,若是关键字则返回编码,否则返回-1;Retract:将搜索指示器回调一个字符位置,将ch置为空白字符;reflesh:刷新,把strtoken数组置为空;prearrange1:将注释部分置为空格;prearrange2:预处理空格,去掉多余空格;a

4、nalysis:词法分析;main:主函数。4、状态转换图:61字母或数字字母非字母或数字702数字数字非数字83字符a字符a94字符b‘=’5字符c字符a包括:=,&,

5、,+,--字符b包括:--,<,>,

6、,*字符c包括:,,:,(,),{,},[,],!,#,%,”,/,*,+,--,>,<,.三、源代码如下:#include#includecharset[1000],str[500],strtoken[20];charsign[50][10],constant[50][10];charch;intsr,to,id=0,s

7、t=0;typedefstructkeytable/*放置关键字*/{charname[20];intkind;}KEYTABLE;KEYTABLEkeyword[]={/*设置关键字*/{"main",0},{"int",1},{"float",2},{"char",3},{"if",4},{"else",5},{"for",6},{"while",7},{"do",8},{"switch",9},{"case",10},{"break",11},{"default",12},};openfile()/*打开文件*/{FILE*fp;chara,filename[

8、10];intn=0;printf("Inputthefilename:");gets(filename);if((fp=fopen(filename,"r"))==NULL){printf("cannotopenfile.");exit(0);}elsewhile(!feof(fp))/*文件不结束,则循环*/{a=getc(fp);/*getc函数带回一个字符,赋给a*/set[n]=a;/*文件的每一个字符都放入set[]数组中*/n++;}fclose(fp);/*关闭文件*/set[n-1]='';printf("-------------

9、------SourceCode--------------------------");puts(set);printf("--------------------------------------------------------");}reflesh()/*清空strtoken数组*/{to=0;/*全局变量to是strtoken的指示器*/strcpy(strtoken,"");}prearrange1()/*预处理程序1*/{inti,a,b,n=0;do{if(set[n]=='/'&&set[n+1]=='*'){a=n;/*记

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

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

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