公文素材库 首页

编译原理课设总结

时间:2019-05-29 21:39:32 网站:公文素材库

编译原理课设总结

董楠楠1006010101

经过一个星期的编译原理课程设计,在老师的指导以及小组同学的互相帮助

下顺利完成该课程设计。通过该课程设计,收获很多。

此次课设,我们小组用的是java语言,在课设过程中,用到了以前开发过程中所没有的探索过的很多新方法,最直接的影响就是让我对java语言的认识与理解更近一层。并且掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,对课本上的知识有了更深的理解。

因为本实验用了java语言编写,个人觉得相比C语言模块更加清晰明了。在该词法分析程序中,我们用了java中的split方法对输入串进行分割,简单易懂。其次,在字符匹配过程中,引进了正则表达式,让输入串与之匹配,极大地缩减程序的繁琐性。同时,java的面对对象的性质在程序中得到充分的体现,在代码的编写过程中,将各种判定封装为函数,主函数通过调用这些封装函数完成功能,摒弃了C语言结构化的繁琐,使整个处理函数清晰可读。在测试多个用例时,发现程序的很多小错误,但最后都能够一一解决,尤其在这个过程中,我也充分体会到了团队合作的力量。此次课设更加深了对java语言的认识,并熟悉了java语言中正则表达式的用法。

通过该课程设计,全面系统的理解了编译原理程序构造的一般原理和基本实现方法。能够把学过的计算机编译原理的知识强化,并通过自己设计的程序表现出来,加深了对理论知识的理解,同时也激发了学习的积极性。课程设计中的第二个程序对简单表达式文法构造算符优先分析器比较复杂,在调试时出现了很多问题,经过大量的修改和一遍又一遍地调试,最后把错误全都改正没有做到根据文法得到相应的算符优先表,而是在程序中直接给出,这是程序的一个小缺陷。

扩展阅读:编译原理课设报告

北华航天工业学院

《编译原理》课程设计

课程设计题目:编译程序构造作者所在系部:计算机科学与工程系作者所在专业:计算机科学与技术作者所在班级:作者学号:作者姓名:指导教师姓名:完成时间:

201*年6月18日

课程设计任务书

课题名称指导教师孙红艳《编译原理》课程设计完成时间李肖丽201*.6.20B07513职称副教授学生姓名总体设计要求班级总体设计要求:课程设计内容共给定1个题目,每个学生按照课程设计要求,在规定的两周时间内独立完成。题目:编译程序构造涉及内容:词法分析、语法分析、语义分析生成中间代码工作内容及时间进度安排第一周:星期一:设计动员,布置课程设计任务,查阅资料,制定方案,进行程序方案设计。第一周:星期二星期五:编写和调试程序第二周:星期一星期三:编写和调试程序第二周:星期四:整理,撰写设计报告。第二周:星期五:验收,提交设计报告,评定成绩。毕业设计成果1、课程设计报告书一份2、源程序清单一份3、成果使用说明书一份

摘要

编译原理是计算机科学与技术专业一门重要的专业课,它具有很强的理论性与实践性,目的是系统地向学生介绍编译系统的结构、工作原理以及编译程序各组成部分的设计原理和实现技术,在计算机本科教学中占有十分重要的地位。计算机语言之所以能由单一的机器语言发展到现今的数千种高级语言,就是因为有了编译技术。编译技术是计算机科学中发展得最迅速、最成熟的一个分支,它集中体现了计算机发展的成果与精华。

本课设是词法分析、语法分析、语义分析的综合,主要是锻炼学生的逻辑思维能力,进一步理解编译原理的方法和步骤。

关键词:词法分析语法分析语义分析

目录

第1章课程设计目的....................................................1第2章课程设计内容....................................................1第3章设计方案介绍....................................................2

3.1模块划分及模块调用..............................................2第4章程序源代码......................................................2第5章程序测试数据和结果.............................................14第6章课程设计总结...................................................17参考文献...............................................................18

第1章课程设计目的

《编译原理》课程设计是编译原理课程必不可少的一个环节,通过课程设计,加深对编译原理的教学内容的了解,以及实现编译原理各部分知识的融合。进而提高学生分析问题、解决问题,从而运用所学知识解决实际问题的能力。

第2章课程设计内容

1.题目:编译程序构造

2.内容:涉及词法分析、自下而上语法分析程序的实现:SLR(1)分析器的实现以及生成中间代码。

3.具体要求

根据LR分析算法构造SLR(1)分析程序,并完成语法分析动作(当需要一个单词时,调用词法分析程序获取),同时完成语义分析生成四元式输出。要求程序具有通用性,改变文法时只需改变程序的数据初值,无需改变程序主体;

要求完成一条说明语句、一条算数表达式和赋值语句的翻译,生成中间代码。构造其用于SLR(1)分析的识别活前缀的DFA以及action表和goto表。然后编程实现。(关于词法分析部分只需识别出与此文法相关的单词即可(+,*,(,),id,=))。

4.程序设计提示:

(1)分析栈设计时可以用一个栈完成,也可以设计三个栈:一个符号栈,一个状态栈,一个语义栈,则归约时,则需要在符号栈中退掉n个符号,在状态栈中退掉n个符号(n为产生式符号个数),语义栈中退掉n个符号对应的语义;

(2)终结符表和非终结符表的组织和预测分析程序中相同(将符号对应到一个数字,表示在分析表中对应的下标)。

(3)action表中的错误处理:简化的错误处理:当查找action表出现空白时,则当前单词无法移进和规约,可简单的认为当前单词为多余的单词,则抛弃当前单词,读下一单词继续分析。

5.程序扩展要求

有能力的同学可将编译程序扩展布尔表达式的分析和四元式生成,布尔表达式的翻译参见教材(胡元义《编译原理教程》)104105页。

1

第3章设计方案介绍

3.1模块划分及模块调用

本系统总体是三个模块,一个是词法分析模块;一个是语法分析模块;一个是语义分析模块。

其中词法分析作为语法分析的子程序调用。模块调用如图3-1所示:

词法分析器analyse()语法分析器scan()

图3-1模块调用图

第4章程序源代码

程序源代码如下:#include#include#include#include#include#include#includeintLetter(charch){if(isalpha(ch))return1;return0;}

intDigit(charch){if(ch>47&&ch

intfuhaobiao2[100];charsiyuanshi[100][100];#defineMAXSIZE1024typedefstruct{

intstate[MAXSIZE];charsign[MAXSIZE];charmean[MAXSIZE][100];inttop;}SeqStack;

SeqStack*Init_SeqStack(){SeqStack*s=newSeqStack;if(!s){cout=MAXSIZE){coutstate[s->top]=a;s->sign[s->top]=b;strcpy(s->mean[s->top],c);

}}

//出栈

voidPop_SeqStack(SeqStack*s){

if(Empty_SeqStack(s))cout

7,-1,-1,-1,8,-1,-1,-1,4,5,6,-1,-1,9,-1,-1,-1,100,-1,-1,-1,-1,-1,-1,102,10,-1,102,102,-1,-1,-1,-1,-1,-1,104,104,-1,104,104,-1,-1,-1,-1,-1,-1,106,106,-1,106,106,-1,-1,-1,-1,7,-1,-1,-1,8,-1,-1,-1,13,5,6,7,-1,-1,-1,8,-1,-1,-1,-1,12,6,7,-1,-1,-1,8,-1,-1,-1,-1,-1,11,-1,-1,103,103,-1,103,103,-1,-1,-1,-1,-1,-1,101,10,-1,101,101,-1,-1,-1,-1,-1,-1,9,-1,-1,14,-1,-1,-1,-1,-1,-1,-1,105,105,-1,105,105,-1,-1,-1,-1};SeqStack*A=Init_SeqStack();

Push_SeqStack(A,0,"#","_");//将初态和"#"压入栈中Acoutfilename;

ifstreaminstuf(filename,ios::in);

cout

cout

while(1){i1=0;if(a==""||a=="")//滤去空格{instuf.get(a);while(a==""||a==""){instuf.get(a);}continue;}

elseif(Letter(a)||a=="_"){intflag=0;while(Letter(a)||a=="_"||Digit(a)){token[i1]=a;//将当前读入的字符送入token数组i1++;instuf.get(a);f1=1;}//查表是否已存在该标志符for(l=0;l

strcpy(string,token);for(i1=0;i1

{cout

Push_SeqStack(A,analysis_table[A->state[n1]][n2],VN[s],r);

//入栈规约状态

break;}case1:{

cout

if(NT[n2]==VN[s])break;}cout

}

intn1=A->top,n2;for(n2=0;n2

break;}cout

cout

F.PALCE=P;}

状态ACTIONGOTOid=+*();#ETF0S11S22S7S63453S9S84r210r2r25r4r4r4r46S7S611457r6r6r6r68acc9S7S612510S7S61311S9S1412r1S10r1r113r3r3r3r314r5r5r5r5测试源文件如下图5-1所示:

图5-1测试源文件

程序执行结果如下图5-2、5-3所示:

15

图5-2

图5-3

16

第6章课程设计总结

通过这次课程设计,我对编译分析的整个过程有了更进一步的认识,加深了对编译原理所学内容的理解和掌握,并且实现了编译原理各部分知识的融合,进而提高了自己思考问题、分析问题,从而运用所学知识解决实际问题的能力。另外,我对编译程序的各个阶段的实现过程也有了更加深刻的理解。

课程设计既能锻炼我们的动手能力,又能加深我们对所学知识的理解。理论与实践相结合的学习方式让我们在享受兴趣的同时又使我们受益匪浅。本次程序设计采用C++语言实现,在编写分析程序的过程中,我们首先应该从整体上把握程序的设计思想,确定其实现结构,对每个函数的具体功能建立明确的概念,然后再进行代码的编写。通过自己的努力,我最终成功完成了这次课程设计。

最后,我衷心感谢在课程设计过程中给予我细心指导与帮助的老师和同学。通过本次课程设计,我明白,在遇到问题时,首先要自己寻求解决方法,培养自己的独立思考能力;如果凭借自我能力无法解决,可以通过查阅书籍或者利用网络搜索相关信息以解决问题,培养自己的自学能力;抑或请教同学和老师,培养自己的沟通合作能力。正是在解决这些问题的过程中,我学习到了课本之外的实用而宝贵的编程经验,还提升了自己各方面的能力,取得了一定的进步!

17

参考文献

[1]严蔚敏,吴伟国.数据结构.北京:清华大学出版社,201*

[2]陈火旺,刘春林等.程序设计语言编译原理(第3版).北京:国防工业出版社,

201*

[3]吕映芝,张素琴,蒋维杜编著.编译原理.北京:清华大学出版社,1998[4]胡伦骏,徐兰芳,刘建农编著.编译原理.北京:电子工业出版社,201*[5]胡元义.编译原理教程(第二版).西安:西安电子科技大学出版社,201*

18

评语指导教师评语及课设成绩课程设计成绩:_________________指导教师:_________________日期:________年____月____日19

友情提示:本文中关于《编译原理课设总结》给出的范例仅供您参考拓展思维使用,编译原理课设总结:该篇文章建议您自主创作。

  来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。


编译原理课设总结
由互联网用户整理提供,转载分享请保留原作者信息,谢谢!
http://m.bsmz.net/gongwen/743450.html
相关阅读
最近更新
推荐专题