资源描述:
《词法分析器(c语言版)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、***********************************************名称:词法分析器*版本:1.0*作者:*♦*2015/4/2************************************************#include#inelude#include#include#include#defineLENGTH110//typereservedwordsizeFILE*fp=NULL;//outstr
2、eamPointerFILE*fw=NULL;//instreampointercharcharacter;chartoken[32];//Thecharacterarraytostorethesequeneeofcharacters,hasbeenread.//Codetablechar*CODE[]={,,identifier',/,,constant'7,keyword,,;,+u;,-,,;,*,77,7,>,7,<,7,>=,V,<=,7'!=,7,=,7,==,//keywordtablechar*k[]M,,for,7,w
3、hile',z,,do,,;,go'7,to'7,switch,7,if,7,else,,/,,int,7,float'7'char,7,static,7,break,,/”exitTcontinu”,”error”};〃标识符结构体typedefstruct{char*l[256];//标识符数组intlen;〃标识符数量}identifier;〃常量结构体typedefstruct{intcont[300];//存放常量的数组intlen;〃常量的数目}constnumber;〃读入一个字符,从输入流中读入一个字符到变量charact
4、er中。voidgetNextChar(FILE*ifp)if((character=getc(ifp))==EOF)exit(l);}〃读入非空白字符,检查变量character中的字符是否为空白字符或回车或换行符。若是,〃则调用getNextChar()读入下一个字符,直到character中的字符满足条件.voidgetnbc(FILE*ifp){while(character==''11character==''
5、
6、character==9){getNextChar(ifp);}}〃连接字符串,把character屮的字符连接
7、到token数组的结尾。voidconcat(){char*ct=&character;strcatftoken,ct);}〃判断是否为字母。intletter(){returnisalpha(character);}〃判断是否为数字intdigit(){returnisdigit(character);}〃回退字符,将刚读入的character中的字符回退到输入流中。并把character中的值置为空。voidretract(FILE*ifp){(讦p->_cnt)++;(ifp->_ptr)-;character='}〃处理保留字,对
8、存放在token中的字符串查保留字,若查到,则返回该保留字的类别编码,否则返回0.intreserve(char**k){inti;tor(i=0;ilen;i++)if(strcmp(tokenjd->l[i
9、])==0)returni+1;if(id->len>256)assert(O);id->l[id->len]二token;id->len++;returnid->len;}//将数字字符串转化为整数。intstrtonumber(){inti;intsum=0;for(i=0;j10、constantfconstnumber*con)con->cont[con->len]=strtonumber();con・>len++;returncon->len;〃将整数值转化为字符串