欢迎来到天天文库
浏览记录
ID:6389399
大小:149.00 KB
页数:26页
时间:2018-01-12
《编译原理实习设计——词法分析程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理实习设计词法分析程序-26-一.实习目的构造一个小语言的词法分析程序。 二.实习要求设计一个包含简单算术表达式、赋值语句、IF语句的小语言的文法。根据此文法,构造一个词法分析程序,输入以“#”为结束符的源程序,输出为各类单词表和单词串文件。 源程序和输出的单词串均以文件的形式存放。 单词的自身值均为其对应的表的指针,如标识符表的指针、常数表的指针等。 提交实习报告和程序运行结果。三.相关图表1.状态转换图-26-空白0字母非字母与数字12*图一:标志符和关键字的识数字空白数字非数字2*01图二:整数的识别数
2、字数字*E或D其他数字E或D+或-数字*其他数字数字116数字754320图三:实数的识别-26-}27{*26*25]*24[*23(*22)*21;*20,**
3、1918非
4、17
5、**16&15非&14&*=13*12非=11=*10#*9=*8非=7%*6^*5=*4非=3!*2“双引*1‘单引空白0图四:界符和算符的识别(1)-26-2.单词符号对照表单词符号助记符内码值标志符整数浮点数关键字‘“!!=^%%====&&&
6、
7、
8、,;()[]{}++++=-――-=**=//=$ID$Int$FLOAT$KeyWor
9、d$Syin$Yinhao$Not$NotQU$Weiyu$GESHICONTROL$mo-EQ$EQU$EQ$and$Wyu$Whuo$Or$douhao$fenhao$Lpar$Rpar$Lmid$Rmid$Lbig$Rbig$Plus$Plus-Plus$Plus-EQ$dec$dec-dec$dec-EQ$Mul$Mul-EQ$Div$Div-EQ字符串值数值数值字符串值‘“!!=^%%====&&&
10、
11、
12、,;()[]{}++++=-――-=**=//=-26-四.源程序和结果1.分析器程序#include13、io.h>#include#include#defineMax120FILE*fprogram;FILE*foutput;intWordEnd;charBuffer[Max*2];charch;intIsLetter(charch){if((ch>='a'&&ch<='z')14、15、(ch>='A'&&ch<='Z')){return(1);}else{return(0);}}intIsDigit(charch){if(ch>='0'&&ch<='9'){return(1);}else{16、return(0);}-26-}char*Par(charpar,char*str){switch(par){case'(':str="$Lpar";break;case')':str="$Rpar";break;case'[':str="$Lmid";break;case']':str="$Rmid";break;case'{':str="$Lbig";break;case'}':str="$Rbig";break;default:break;}returnstr;}voidWriteBuffer(){chartmpch17、='';inti=0;longpos;WordEnd=0;-26-for(intt=0;t18、19、ch=='t'20、21、ch==''){ch='';}if(!(tmpch==''&&ch=='')){if(ch=='/'){ch=fgetc(fprogram);if(ch!=EOF){if(ch=='*'){charflo;while(1){ch=fgetc(fpr22、ogram);if(ch!=EOF){if(ch=='*'){flo=ch;ch=fgetc(fprogram);if(ch==EOF){break;}-26-if(ch=='/'){ch=fgetc(fprogram);break;}}}else{break;}}}else{pos=ftell(fprogram);fseek(fprogram,pos-2,0);if((ch=fgetc(fprogram))==EOF){break;}}}else{break;}}Buffer[i]=ch;i++;}tmpch=ch;}e23、lse{break;-26-}}if(IsDigit(ch)24、25、IsLetter(ch)26、27、ch=='.'28、29、ch=='E'30、31、ch=='e'32、33、ch=='-'){while(1){ch=fgetc(fprogram);if(ch!=EOF){if(IsDigit(ch)34、35、IsLetter(ch)36、37、
13、io.h>#include#include#defineMax120FILE*fprogram;FILE*foutput;intWordEnd;charBuffer[Max*2];charch;intIsLetter(charch){if((ch>='a'&&ch<='z')
14、
15、(ch>='A'&&ch<='Z')){return(1);}else{return(0);}}intIsDigit(charch){if(ch>='0'&&ch<='9'){return(1);}else{
16、return(0);}-26-}char*Par(charpar,char*str){switch(par){case'(':str="$Lpar";break;case')':str="$Rpar";break;case'[':str="$Lmid";break;case']':str="$Rmid";break;case'{':str="$Lbig";break;case'}':str="$Rbig";break;default:break;}returnstr;}voidWriteBuffer(){chartmpch
17、='';inti=0;longpos;WordEnd=0;-26-for(intt=0;t18、19、ch=='t'20、21、ch==''){ch='';}if(!(tmpch==''&&ch=='')){if(ch=='/'){ch=fgetc(fprogram);if(ch!=EOF){if(ch=='*'){charflo;while(1){ch=fgetc(fpr22、ogram);if(ch!=EOF){if(ch=='*'){flo=ch;ch=fgetc(fprogram);if(ch==EOF){break;}-26-if(ch=='/'){ch=fgetc(fprogram);break;}}}else{break;}}}else{pos=ftell(fprogram);fseek(fprogram,pos-2,0);if((ch=fgetc(fprogram))==EOF){break;}}}else{break;}}Buffer[i]=ch;i++;}tmpch=ch;}e23、lse{break;-26-}}if(IsDigit(ch)24、25、IsLetter(ch)26、27、ch=='.'28、29、ch=='E'30、31、ch=='e'32、33、ch=='-'){while(1){ch=fgetc(fprogram);if(ch!=EOF){if(IsDigit(ch)34、35、IsLetter(ch)36、37、
18、
19、ch=='t'
20、
21、ch==''){ch='';}if(!(tmpch==''&&ch=='')){if(ch=='/'){ch=fgetc(fprogram);if(ch!=EOF){if(ch=='*'){charflo;while(1){ch=fgetc(fpr
22、ogram);if(ch!=EOF){if(ch=='*'){flo=ch;ch=fgetc(fprogram);if(ch==EOF){break;}-26-if(ch=='/'){ch=fgetc(fprogram);break;}}}else{break;}}}else{pos=ftell(fprogram);fseek(fprogram,pos-2,0);if((ch=fgetc(fprogram))==EOF){break;}}}else{break;}}Buffer[i]=ch;i++;}tmpch=ch;}e
23、lse{break;-26-}}if(IsDigit(ch)
24、
25、IsLetter(ch)
26、
27、ch=='.'
28、
29、ch=='E'
30、
31、ch=='e'
32、
33、ch=='-'){while(1){ch=fgetc(fprogram);if(ch!=EOF){if(IsDigit(ch)
34、
35、IsLetter(ch)
36、
37、
此文档下载收益归作者所有