东北大学编译原理实验1.doc

东北大学编译原理实验1.doc

ID:56718335

大小:184.00 KB

页数:30页

时间:2020-07-06

东北大学编译原理实验1.doc_第1页
东北大学编译原理实验1.doc_第2页
东北大学编译原理实验1.doc_第3页
东北大学编译原理实验1.doc_第4页
东北大学编译原理实验1.doc_第5页
资源描述:

《东北大学编译原理实验1.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理程序设计实验报告——实验题目班级:计算机1507班姓名:罗艺博学号:20154377一、实验目标:词法分析扫描器的设计实现。在程序源文件中输入类C语言程序源文件,设计词法分析扫描器,并以TOKEN类别码序列的形式输出扫描结果。二、实验内容:1.概要设计:将程序大致分为:主函数、识别器(有限自动机state_change)、词法分析器(state_to_code)三大部分。其中,主函数所完成的功能为:打开、读取、关闭文件(即C语言源程序),重置token串等。识别器的功能为:识别字符,完成

2、token串的生成,判断词法错误等。词法分析器的功能为:生成token类别码,判断token是否出错等。主函数、识别器、词法分析器关系图2.流程图词法分析扫描器流程图3.关键函数a.识别器(有限自动机state_change)intstate_change(state,ch)//识别器,有限自动机{if((ch=='')

3、

4、(ch=='t')

5、

6、(ch==''))//略去空格、TAB、换行return0;elseif((IsAlpha(ch)==1)

7、

8、(ch=='_'))//判断是否为字

9、母或'_',从而判断是关键字、标识符、CT字符还是ST字符串{if(state==1)return2;elseif(state==2)return2;elseif(state==7)return8;elseif(state==8)return8;elseif(state==10)return11;elseif(state==11)return11;elseif(state==6)//考虑与PT相连的情况{state_to_code(state_before,token);i=0;memset(t

10、oken,0,10);return2;}elsereturn-1;}elseif(IsNum(ch)==1)//判断是否为数字,从而进一步判断是为IT,CT,KT{if(state==1)return3;elseif(state==2)return2;elseif(state==3)return3;elseif(state==4)return4;elseif(state==5)return5;elseif(state==6)//考虑与PT相连的情况{state_to_code(state_bef

11、ore,token);i=0;memset(token,0,10);return3;}elsereturn-1;}elseif(ch=='.')//判断是否为CT中的小数点{if(state==3)return4;elsereturn-1;}elseif(ch==''')//判断是否为CT字符{if(state==1)return7;elseif(state==6)//考虑与PT相连的情况{state_to_code(state_before,token);i=0;memset(token,0

12、,10);return7;}elseif(state==8)return9;elsereturn-1;}elseif(ch=='"')//判断是否为ST{if(state==1)return10;elseif(state==6)//考虑与PT相连的情况{state_to_code(state_before,token);i=0;memset(token,0,10);return10;}elseif(state==11)return12;elsereturn-1;}else//判断是否为PT{i

13、f(state==1)return6;elseif(state==2)//考虑与IT,KT相连的情况{state_to_code(state_before,token);i=0;memset(token,0,10);return6;}elseif(state==3)//考虑与CT相连的情况{state_to_code(state_before,token);i=0;memset(token,0,10);return6;}elseif(state==9)//考虑与CT字符相连的情况{state_t

14、o_code(state_before,token);i=0;memset(token,0,10);return6;}elseif(state==12)//考虑与ST相连的情况{state_to_code(state_before,token);i=0;memset(token,0,10);return6;}elseif(state==6){if(((i==1)&&(ch=='='))&&((token[0]=='>')

15、

16、(token[0]=='<')

17、

18、(token[0]=='='))){r

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

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

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