编译原理实习设计——词法分析程序精品文档

编译原理实习设计——词法分析程序精品文档

ID:12284109

大小:149.00 KB

页数:26页

时间:2018-07-16

编译原理实习设计——词法分析程序精品文档_第1页
编译原理实习设计——词法分析程序精品文档_第2页
编译原理实习设计——词法分析程序精品文档_第3页
编译原理实习设计——词法分析程序精品文档_第4页
编译原理实习设计——词法分析程序精品文档_第5页
资源描述:

《编译原理实习设计——词法分析程序精品文档》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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$KeyWord$Syin

9、$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.分析器程序#include#inc

13、lude#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{return(0);}-

16、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='';inti=0;long

17、pos;WordEnd=0;-26-for(intt=0;t

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(fprogram);if(ch!=EOF)

22、{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;}else{break;-26-}}if(Is

23、Digit(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、

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

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

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