欢迎来到天天文库
浏览记录
ID:1354944
大小:317.79 KB
页数:21页
时间:2017-11-10
《c语言编译器实现毕业设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、编译原理课程设计题目C语言编译器实现计算机科学学院计算机科学与技术专业10级计本班学号:姓名:指导教师:完成时间:2013年6月目录一、原理11、简介12、单词符号及种别表示13、语法结构定义如下:2二、运行环境3三、算法设计思想31、词法分析主要算法32、语法分析主要算法33、语义分析主要算法4四、程序流程图5五、运行测试结果8六、心得体会9七、源代码9C语言编译器实现一、原理1、简介编译程序的工作过程一般可以分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。每一个阶段在功能上是相对独立的,它一方面从上一个阶段获取分析的结果来进行分析,另一方面由将结果传递给
2、下一个阶段。由编译程序的五个阶段就对应了编译系统的结构。表格管理出错处理单词符号语法单元中间代码中间代码目标代码语法分析器语义分析与中间代码生成器优化器目标代码生成器词法分析器2、单词符号及种别表示0单词符号种别编码main1int2float3double4char5if6else7do8while9l(l
3、d)*10dd*20=21+22-23*24/25(26)27{28}29,30;31>32>=33<34<=35==36!=37‘ ’1000ERROR-13、语法结构定义如下:<程序>::=main()<语句块><语句块>::=‘{‘<语句串>’}’<语句串>::=<语句>{
4、;<语句>};18<语句>::=<赋值语句>
5、<条件语句>
6、<循环语句><赋值语句>::=ID=<表达式><条件语句>::=if<条件><语句块><循环语句>::=do<语句块>while<条件><条件>::=<表达式><关系运算符><表达式><表达式>::=<项>{+<项>
7、-<项>}<项>::=<因子>{*<因子>
8、/<因子>}<因子>::=ID
9、num
10、(<表达式>)<关系运算符>::=<
11、<=
12、>
13、>=
14、==
15、!二、运行环境Windows系统VisualC++6.0三、算法设计思想1、词法分析主要算法这部分对源文件进行分析,允许/**/注释。从源文件依次读取字符,对字符进行分析,
16、组成字符串、数字、关系符等固定含义的token符,并把它们添加到token链中,如果遇到非法字符报错并退出程序。2、语法分析主要算法这部分对Token链进行分析,利用自底向上的分析方法,构建SLR(1)分析表的过程是手工完成的。语法分析的同时构建语法树,移进时创建叶子,规约时创建节点。3、语义分析主要算法这部分对语法树从左到右进行遍历,节点记录了规约式的编号,遍历到节点时就进行相应处理。语义分析主要检查变量、函数是否被定义或重定义,同时产生四元式。函数一览表voidscanner();18voidlrparser();voidstaBlock(int*nChain);voidstaStr
17、ing(int*nChain);voidsta(int*nChain);voidfuzhi();voidtiaojian(int*nChain);voidxunhuan();char*E();char*T();char*F();char*newTemp();voidbackpatch(intp,intt);intmerge(intp1,intp2);voidemit(char*res,char*num1,char*op,char*num2);四元组结构体定义:struct{charresult[10];chararg1[10];charopera[10];chararg2[10];}fo
18、urCom[20];四、程序流程图18初始化调用scanner读下一个单词符号调用irparser循环输出四元式fourcom[]结束图1主函数流程图是否main否是调用scanner是否是(否调用scanner是是否是)否是调用scanner出错处理调用语句块分析函数stablock18图2递归下降分析分析程序流程图是否是{否是调用scanner调用语句串分析函数stastring调用scanner出错处理是否是}否图3语句块分析流程图调用语句分析函数sta回溯,调用backpatch是否是;否调用scanner是出错处理调用语句分析函数sta图4语句串分析流程图18是否是字符串调用赋
19、值语句分析函数fuzhi是否是否是if否是调用条件语句分析函数tiaojian是否是do否是调用循环语句分析函数xunhuan图5语句分析流程图五、运行测试结果18正确程序结果错误程序结果:报错!(1)错误程序结果:报错!(2)六、心得体会这次的课程设计,最大的收获就是清楚了编译的整个过程,在学习编译原理这门课程之时,在做设计的过程中和词法分析、语法分析、语义分析联系起来,18非常清晰的理解了简单编译器实现过程。读完了一个完整的源程
此文档下载收益归作者所有