资源描述:
《编译原理实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、武汉科技大学计算机科学与技术学院编译方法实验报告学号:2010113137071姓名:尹绮莉班级:计算机1003指导老师:邱谊敏实验一词法分析器设计2012-4-17【实验目的】1.熟悉词法分析的基本原理,词法分析的过程以及词法分析中要注意的问题。2.复习高级语言,进一步加强用高级语言来解决实际问题的能力。3.通过完成词法分析程序,了解词法分析的过程。【实验内容】用C语言编写一个PL/0词法分析器,为语法语义分析提供单词,使之能把输入的字符串形式的源程序分割成一个个单词符号传递给语法语义分析,并把分析结果(基本字,运算符,标识符,常数以及界符)输出。启动调用Init初始化从文件中读取一个非
2、空白字符ch文件是否为空N判断chCh为标识符?Ch为关键字?NYYCh为数字?Y将值传入相应组中Default结束//对关键字等实现初始化voidinit(){inti;for(i=0;i<=255;i++){ssym[i]=nul;}ssym['+']=plus;ssym['-']=minus;ssym['*']=times;ssym['/']=slash;ssym['(']=lparen;ssym[')']=rparen;ssym['=']=eql;ssym[',']=comma;ssym['.']=period;ssym['#']=neq;ssym[';']=semicolon;s
3、trcpy(&(word[0][0]),"begin");strcpy(&(word[1][0]),"call");strcpy(&(word[2][0]),"const");strcpy(&(word[3][0]),"do");strcpy(&(word[4][0]),"end");strcpy(&(word[5][0]),"if");strcpy(&(word[6][0]),"odd");strcpy(&(word[7][0]),"procedure");strcpy(&(word[8][0]),"read");strcpy(&(word[9][0]),"program");strcp
4、y(&(word[10][0]),"var");strcpy(&(word[11][0]),"while");strcpy(&(word[12][0]),"write");strcpy(&(word[13][0]),"then");wsym[0]=beginsym;wsym[1]=callsym;wsym[2]=constsym;wsym[3]=dosym;wsym[4]=endsym;wsym[5]=ifsym;wsym[6]=oddsym;wsym[7]=procsym;wsym[8]=readsym;wsym[9]=programsym;wsym[10]=varsym;wsym[11
5、]=whilesym;wsym[12]=writesym;wsym[13]=thensym;}//读取源文件并判断单词类别intKey(char*word){for(inti=0;i6、)return1;return0;}//确定是否为分隔符符voidTakenwrite2(charword)//4为运算符,5为分隔符{if(sign(word)){printf("(4,"%c")",word);}if(tap(word)){printf("(5,"%c")",word);}}voidTakenwrite1(char*word,intLen)//3为字符或者数字,2为标识符,1为关键字{inta;if(Key(word))printf("(1,"%s")",word);else{if(word[0]=='''&&word[Len-1]=='''
7、)//字符常量printf("(3,"%s")",word);elseif((a=atoi(word)))//字符串转化为数字printf("(3,"%d")",a);else{if(word[0]!=' ')printf("(2,"%s")",word);}}}intTaken(){FILE*fp;chartemp[10],ch='1',temp1;charfilename[20];inti,