北邮.编译原理.词法分析器实验

北邮.编译原理.词法分析器实验

ID:29428606

大小:132.50 KB

页数:14页

时间:2018-12-19

北邮.编译原理.词法分析器实验_第1页
北邮.编译原理.词法分析器实验_第2页
北邮.编译原理.词法分析器实验_第3页
北邮.编译原理.词法分析器实验_第4页
北邮.编译原理.词法分析器实验_第5页
资源描述:

《北邮.编译原理.词法分析器实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、WORD格式整理版词法分析程序设计一.问题描述1.可以识别出用C语言编写的源程序中的每个单词符号,并以记号的形式输出每个单词符号。2.可以并识别读取源程序中的注释。3.可以统计源程序中的语句行数、单词个数和字符数,其中标点和空格不计为单词,并输出统计结果。4.检察源程序中存在的错误,并可以报告错误所在行列的位置。5.发现原程序中存在的错误,进行适当修复,使词法分析可以继续进行,通过一次词法分析处理,可以检查并报告源程序中存在的所有错误。二.算法思想编写一个词法分析程序,它从左到右逐个字符的对源程序进行扫描,产生一个个的单词形成记号流文件输出。其

2、中,具体子问题有:(1)源程序文件读入缓冲区中(注意要删除空格和无用符号)(2)确定读入的为关键字还是运算符还是变量名,对于普通标识符和常量,分别建立标识符表和常量表当遇到一个标识符或常量时,查找标识符表或常量表,若存在,则返回位置,否则进入符号表或常量表中并返回表的入口地址。(3)对于各类运算符、标点符号、以及注释符号等,准确识别出来并打印输出结果(4)对于源文件中出现的数字常量,不但能按要求加入常量表中,还进行了字符型到float型数值的转换,便于后续程序操作处理。(4)尽量精简整合各种情况,使算法复杂度降低,精简易读。三、实验程序设计说明

3、1.主要函数说明voidreadChar();//读字符过程,每调用一次,从输入缓冲区读一个字符,并把它放入变量C中,且向前扫描指针pointer指向下一个字符voidignoreSpace();//每次调用时,检查C中的字符是否为空字符,若是,则反复调用该过程,直到C进入一个非空字符为止voidlink();//把C中的字符与token中的字符串连接起来boolalphabet();//布尔函数,判断C中的字符是否为字母,若是则返回true,否则返回falsebooldigit();//布尔函数,判断C中的字符是否为数字,若是则返回true,

4、否则返回falseintsearchForKeywords();//查关键字表,若此函数的返回值为0,则表示token中的字符串是标识符,否则为关键字intsearchForToken();//查符号表,若此函数的返回值为0,则表示token中的字符串是新出现的,否则为已出现过的标识符intsearchForNum();//查常数表,若此函数的返回值为0,则表示token中的数字是新出现的,否则为已出现的常数voidinsertTokenList();//将标识符插入符号表voidinsertNumList();//将数字插入常数表范文范例参考

5、WORD格式整理版voidfillBuffer(inta);//填充buff的半区函数2.程序源代码#include#include#include#includeintpointer=0;//inti=0,j=0,c=0,appear,d=0,num_location;//introw_num=0,letter_num=0,word_num=0;intz=1;charC='';//chartoken[30];//charbuff[4095];//chartoken_li

6、st[200][30];//charnumber[200][10];//charnext_charac,charac,file_name[20];charkeywords[32][10]={"auto","break","case","char","const","continue","default","do","double","else","enum","extern","float","for","goto","if","int","long","register","return","short","signed","sizeo","

7、fstatic","struct","switch","typedef","union","unsigned","void","volatile","while"};doublenum;FILE*file_pointer;voidfillBuffer(inta)//{//i=0;while((!feof(file_pointer))&&i<2048){//buff[a+i]=charac;if(charac!=''){//if(charac==''){row_num++;//}else{letter_num++;}}范文范例参考WORD格式

8、整理版charac=fgetc(file_pointer);i++;}if(feof(file_pointer)){buff[a+i]='';}}

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

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

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