北邮编译原理词法分析器实验.doc
《北邮编译原理词法分析器实验.doc》由会员分享,可在线阅读,更多相关《北邮编译原理词法分析器实验.doc(14页珍藏版)》请在三一办公上搜索。
1、词法分析程序设计一问题描述1.可以识别出用C语言编写的源程序中的每个单词符号,并以记号的形式输出每个单词符号。2.可以并识别读取源程序中的注释。3.可以统计源程序中的语句行数、单词个数和字符数,其中标点和空格不计为单词,并输出统计结果。4.检察源程序中存在的错误,并可以报告错误所在行列的位置。5.发现原程序中存在的错误,进行适当修复,使词法分析可以继续进行,通过一次词法分析处理,可以检查并报告源程序中存在的所有错误。二算法思想编写一个词法分析程序,它从左到右逐个字符的对源程序进行扫描,产生一个个的单词形成记号流文件输出。其中,具体子问题有:(1)源程序文件读入缓冲区中(注意要删除空格和无用符号
2、)(2)确定读入的为关键字还是运算符还是变量名,对于普通标识符和常量,分别建立标识符表和常量表当遇到一个标识符或常量时,查找标识符表或常量表,若存在,则返回位置,否则进入符号表或常量表中并返回表的入口地址。(3)对于各类运算符、标点符号、以及注释符号等,准确识别出来并打印输出结果(4)对于源文件中出现的数字常量,不但能按要求加入常量表中,还进行了字符型到float型数值的转换,便于后续程序操作处理。(4)尽量精简整合各种情况,使算法复杂度降低,精简易读。三、实验程序设计说明1.主要函数说明void readChar();/读字符过程,每调用一次,从输入缓冲区读一个字符,并把它放入变量C中,且向
3、前扫描指针pointer指向下一个字符void ignoreSpace();/每次调用时,检查C中的字符是否为空字符,若是,则反复调用该过程,直到C进入一个非空字符为止void link();/把C中的字符与token中的字符串连接起来bool alphabet();/布尔函数,判断C中的字符是否为字母,若是则返回true,否则返回falsebool digit();/布尔函数,判断C中的字符是否为数字,若是则返回true,否则返回falseint searchForKeywords();/查关键字表,若此函数的返回值为0,则表示token中的字符串是标识符,否则为关键字int searchF
4、orToken();/查符号表,若此函数的返回值为0,则表示token中的字符串是新出现的,否则为已出现过的标识符int searchForNum(); /查常数表,若此函数的返回值为0,则表示token中的数字是新出现的,否则为已出现的常数void insertTokenList();/将标识符插入符号表void insertNumList();/将数字插入常数表void fillBuffer(int a);/ 填充buff的半区函数2程序源代码#include#include#include#includeint pointer=0;/int i=0,j=0,c=0,appear,d=0,
5、num_location;/int row_num=0,letter_num=0,word_num=0;int z=1;char C= ;/char token30;/char buff4095;/char token_list20030;/char number20010;/char next_charac,charac,file_name20;char keywords3210=auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,goto,if,int,long,register,
6、return,short,signed,sizeo,fstatic,struct,switch,typedef,union,unsigned,void,volatile,while;double num;FILE *file_pointer;void fillBuffer(int a)/ / i=0; while(!feof(file_pointer) & i=97 & C=65 & C=48 & C=57) return true; else return false; ;int searchForKeywords()/ for(int x=0;x32;x+) if(strcmp(token
7、,keywordsx)=0) return 0;/ return 1;int searchForToken()/ int i=0; while(i=c-1) if(strcmp(token,token_listi)=0) appear=i; return 0; / i+; word_num+; return 1;int searchForNum()/ int i=0; while(i=d-1) if(strcmp(token,numberi)=0) num_location=i; return 0; / i+; word_num+; return 1;void insertTokenList(
8、)/ strcpy(token_listc+,token);void insertNumList()/ strcpy(numberd+,token);main() printf(输入源文件的路径:n); scanf(%s,file_name); file_pointer=fopen(file_name,r); if(file_pointer=NULL) printf(无法查找到文件,发生错误!n);/ charac=fgetc(file_pointer); fillBuffer(0);/ while(C!=0) readChar();/ ignoreSpace();/ switch(C) /
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 邮编 原理 词法 分析器 实验
链接地址:https://www.31ppt.com/p-2385845.html