【精品】语法分析器

【精品】语法分析器

ID:43606270

大小:137.41 KB

页数:10页

时间:2019-10-11

【精品】语法分析器_第1页
【精品】语法分析器_第2页
【精品】语法分析器_第3页
【精品】语法分析器_第4页
【精品】语法分析器_第5页
资源描述:

《【精品】语法分析器》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验一:编写C语言的词法分析器输入文件名:*.C输出文件名:*.tok【实验内容】实现C语言的词法分析程序。从输入的C语言源程序中,识别出各个具冇独立意义的单词,以二元组(单词的类别,单词的值)的形式输出。保留字、运算符和分隔符以一字一类的方式编码,所冇的标识符作为一类,所冇的常量作为-•类。【实验目的】明确词法分析的任务,了解词法分析器的设计与实现。【实验耍求】(1)程序(2)实验报告:C语言的词法正规表达式,状态转换图。【实验说明】上机两次4小时,第7周检査。【输入样例】main(){inta,b;a=10;b=a+20;}【输出样例】(id,main)((,_)(),_)({,

2、」(int,_)(id,a)(,,_)(id,b)(;,_)(id,a)(=,_)(const,10)(;,_)(id,b)(=,_)(id,a)(+,_)(const,20)[/watermark]#include^include#include^include^defineLENsizcof(structNode)ttdefineNULL0structNode{chardata;structNode*next;/*定义动态链表数据结构*/};voidoutput(structNode*);/*扫描输出函数

3、*/voidscaner();/*词法分析*/voidgetbcO;voidgetch();voidconcat();intletter(charch);intdegit(charch);intreserve0;voidretract0;voidback(char*a,char*b);structNode*head,*p;charch;/*全局变量*/char*key□二{"float","int","char","if","else","for","while"};/*关键字表*/chartoken[20];/*字符数组,存放构成单词的符号串*/intmain(void){head

4、=(structNode*)malloc(LEN):/*分配头节点存储空间*/if(!head){printf(,,error,/):exit(1);}head->next=NULL;head->data=,';p二head;over・");printf(,zWheninputa'$‘atthebeiginingofanline,thisprogramewillbeprintf(/zAndtheprogramewi11outputthecodesyouinputedjustnow.");printf(z,Pleaseinputyourcodes:");while(l)

5、inti=0;chartemp[256];/*毎行长度不超过256个字符*/gets(temp);/*输入源程序,以行为单位*/if(tern讥0]=='$')break;/*当输入的第一个字符为$时表示输入源代码结束*/p->next=(structNode*)malloc(LEK);if(!(head一〉next))printf("error");exit(1);}p=p->next;while(temp[i]!=,‘&&i<256)/*将输入的代码以彳亍为单位存入缓冲区*/{p->data=temp[i]:p->ncxt=(structNode*)malloc(LEN);i

6、f(!(p->ncxt)){printfTerror");exit(1);}p=p->next;i++;}/*尾结点*/p->data=,,;p->next=NULL;output(head);/*扫描缓冲区,输出结杲*/p二head->next;while(p->next!=NULL)scaner();/*词法分析*/system(/zpause/z):return0;/*扫描缓冲区函数*/voidoutput(structNode*head)if(!head){printf("error");exit(1);}p=head->next;while(p->next!二NULL)

7、{printf("%c",p->data);-〉next;}prinlf("");voidgetbcO/*若ch中是空口字符,则不停调用getchO直到读入的不是空白字符为止*/{while(ch==,')getchO;}voidgetchO/*从缓冲区读入一字符*/{ch=p->data;p=p->next;}voidconcat0/*将ch中的字符连接到token的后面*/unsignedinti;i=strlen(token):tokor)[i]

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

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

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