编译原理课程设计.docx
《编译原理课程设计.docx》由会员分享,可在线阅读,更多相关《编译原理课程设计.docx(11页珍藏版)》请在冰豆网上搜索。
编译原理课程设计
课程设计(论文)任务书
软件学院学 院 软件测试专 业2 班
一、课程设计(论文)题目 FIRSTVT集和LASTVT集生成算法模拟
二、课程设计(论文)工作自2016年6月20日起至2016年6月24日止。
三、课程设计(论文)地点:
软件学院实训中心
四、课程设计(论文)内容要求:
1.本课程设计的目的
进一步培养学生编译器设计的思想,加深对编译原理和应用程序的理解,针对编
译过程的重点和难点内容进行编程,独立完成有一定工作量的程序设计任务,同时,
强调好的程序设计风格,并综合使用程序设计语言、数据结构和编译原理的知识,熟
悉使用开发工具VC/JAVA/C#/.NET。
2.课程设计的任务及要求
1)课程设计任务:
动态模拟算法的基本功能是:
(1)输入一个文法G;
(2)输出由文法G构造FIRSTVT集的算法;
(3)输出FIRSTVT集;
(4)输出由文法G构造LASTVT集的算法;
(5)输出LASTVT集;
2)创新要求:
设计显示格式,使结果更加直观
3)课程设计论文编写要求
(1)课程设计任务及要求
(2)设计思路--工作原理、功能规划
(3)详细设计---数据分析、算法思路、功能实现(含程序流程图、主要代码及注
释)、界面等。
(4)运行调试与分析讨论---给出运行屏幕截图,分析运行结果,有何改进想法等。
(5)设计体会与小结---设计遇到的问题及解决办法,通过设计学到了哪些新知识,
巩固了哪些知识,有哪些提高。
(6)报告按规定排版打印,要求装订平整,否则要求返工;
(7)课设报告的装订顺序如下:
封面---任务书---中文摘要---目录----正文---附录
(代码及相关图片)
(8)严禁抄袭,如有发现,按不及格处理。
4)课程设计评分标准:
(1)学习态度:
20分;
(2)系统设计:
20分;
(3)编程调试:
20分;
(4)回答问题:
20分;
(5)论文撰写:
20分。
5)参考文献:
(1)张素琴,吕映芝.编译原理[M].,清华大学出版社
(2)蒋立源、康慕宁等,编译原理(第2版)[M],西安:
西北工业大学出版社
6)课程设计进度安排
1.准备阶段(4学时):
选择设计题目、了解设计目的要求、查阅相关资料
2.程序模块设计分析阶段(4学时):
程序总体设计、详细设计
3.代码编写调试阶段(8学时):
程序模块代码编写、调试、测试
4.撰写论文阶段(4学时):
总结课程设计任务和设计内容,撰写课程设计论文
学生签名:
2016年6月24日
课程设计(论文)评审意见
(1)学习态度(20分):
优( )、良( )、中( )、一般( )、差( );
(2)系统设计(20分):
优()、良( )、中( )、一般( )、差( );
(3)编程调试(20分):
优( )、良( )、中( )、一般( )、差( );
(4)回答问题(20分):
优( )、良( )、中( )、一般( )、差( );
(5)论文撰写(20分):
优( )、良( )、中( )、一般( )、差( );
评阅人:
职称:
副教授
2016年6月日
中文摘要
编译程序是现代计算机系统的基本组成部分之一,一个好的编译程序可以使得计算机用户独立于机器,这对当今计算机的发展尤为重要。
因此,研究编译程序的意义的非常大的。
本次课设主要是利用算符优先分析算法,计算给定文法的FIRSTVT和LASTVT集,并输出结果。
程序的主要操作流程如下:
首先输入需要分析的正规文法,程序将会逐句分析。
在计算FIRSTVT集时,若表达式中出现B=>b…或B=>Cb…的形式,则终结符b的集合即为FIRSTVT(B);若表达式中出现B=>…a或B=>…aC的形式,则终结符b的集合即为LASTVT(B)。
目 录
一、课程设计任务及要求1
二、需求分析2
三、设计思路3
四、详细设计4
五、运行调试与分析讨论9
六、设计体会与小结10
七、参考文献11
一、课程设计任务及要求
设计任务:
本次课程设计的主要任务是计算给定文法的FIRSTVT和LASTVT集,是算符优先分析算法的基础。
算符优先分析算法是一种自底向上分析方法,通过对输入符号串进行自左向右的扫描,重复移进规约的过程,直到句子分析成功。
要求:
完成动态模拟算法的基本功能:
(1)输入一个文法G;
(2)输出由文法G构造FIRSTVT集的算法;
(3)输出FIRSTVT集;
(4)输出由文法G构造LASTVT集的算法;
(5)输出LASTVT集。
二、需求分析
计算给定文法的FIRSTVT集和LASTVT集是算符优先分析算法的基础,因此本实验最重要的步骤就是通过集合的定义设计算法求出结果。
1.FIRSTVT集的构造
FIRSTVT(B)={b|B=>a…或B=>Cb…},其中…表示V*中的符号串。
因此若给定文法中有产生式B->+a…或B=>+Cb…,那么b∈FIRSTVT(B)。
2.LASTVT集的构造
LASTVT(B)={a|B=>…a或B=>…aC}
因此若给定文法中有产生式|B=>…a或B=>…aC,那么b∈LAST(B)。
程序编写完成后,输入正规文法如:
E->TE’
E’->+TE’|ε
T->FT’
T’->*FT’|ε
F->(E)|i
系统将计算出该文法的FIRSTVT集和LASTVT集。
三、设计思路
根据定义设计算法的具体流程,包括如何计算FIRSTVT集和LASTVT集以及如何存储计算出来的终结符。
完成此阶段需要对定义有具体深入的理解。
在完成流程图的设计和算法的设计之后即可开始进入代码的编写阶段。
程序的整体流程图如下:
图3-1
四、详细设计
计算FIRSTVT集的流程图如下:
图4-1
计算LASTVT集的流程图如下:
图4-2
计算FIRSTVT集:
voidFIRSTVT(charX,intS)
{
inti,j=0,k;
intT=0;
intL=0;
intt=1;
charC[N];
for(i=0;i{
if(INPUT[i][0]==X)
{
T=i;
break;
}
}
for(i=4;i{
if(INPUT[T][i]=='|'||INPUT[T][i]=='\n')
{
t=1;
L=j;
j=0;
for(k=0;k{
if((C[k]>=97&&C[k]<=112)||C[k]=='+'||C[k]=='*'||C[k]=='-'||C[k]=='/'||C[k]=='!
'||C[k]=='('||C[k]==')'||C[k]=='#')
{
setFIRSTVT(C[k],S);
t=0;
break;
}
}
if(C[0]>=65&&C[0]<=90&&t==1)
FIRSTVT(C[0],S);
}
elseif(INPUT[T][i]!
='|'&&INPUT[T][i]!
='\0')
{
C[j]=INPUT[T][i];
j++;
}
if(INPUT[T][i]=='\n')break;
}
}
计算LASTVT集:
voidLASTVT(charX,intS)
{
inti,j=0,k;
intT=0;
intL=0;
intt=1;
charC[N];
for(i=0;i{
if(INPUT[i][0]==X)
{
T=i;
break;
}
}
for(i=4;i{
if(INPUT[T][i]=='|'||INPUT[T][i]=='\n')
{
t=1;
L=j;
j=0;
for(k=0;k{
if((C[k]>=97&&C[k]<=112)||C[k]=='+'||C[k]=='*'||C[k]=='-'||C[k]=='/'||C[k]=='!
'||C[k]=='('||C[k]==')'||C[k]=='#')
{
setLASTVT(C[k],S);
t=0;
break;
}
}
if(C[0]>=65&&C[0]<=90&&t==1)
LASTVT(C[0],S);
}
elseif(INPUT[T][i]!
='|'&&INPUT[T][i]!
='\0')
{
C[j]=INPUT[T][i];
j++;
}
if(INPUT[T][i]=='\n')break;
}
}
五、运行调试与分析讨论
输入测试数据:
E->TE’
E’->+TE’|ε
T->FT’
T’->*FT’|ε
F->(E)|i
运行结果如下:
图5-1
六、设计体会与小结
通过这次课程设计,我不仅复习了自底向上的分析方法,还从中得到了如何全面的分析问题的经验。
之前一个学期的学习都是理论知识,但是由于专业的特殊性,很多时候我们不仅要学习书本上的内容,更要把这些知识通过实践转化为真正能为我们所用的专业技能。
而这次课设就是很好的一个机会,让我从实践的角度更深层次的理解了一遍如何运用自底向上分析方法以及如何计算FIRSTVT和LASTVT集。
在这次实验中,可以说每个阶段都是有所收获的。
在刚开始实验时,我需要对整个实验进行需求分析,搞明白这个实验到底是要我们做什么。
然后进行设计思路的分析,即整个软件大体应该按照什么步骤运行。
再接下来就是详细设计,根据定义以及平时的所学的求解过程画出计算FIRSTVT集和LASTVT集的流程图,使算法的运行过程更加直观。
最后进行代码的编写,有了之前几步做基础,代码编写过程也更加有条理了。
这次课设让我又一次把学习的理论知识运用到了实际操作中,而这也恰恰正是我们需要的。
只有不断进行练习,我们才会慢慢的学会如何更加全面的分析问题,以及碰到了困难如何去解决。
相信在日后的学习和工作中,我也会慢慢积累更多经验,不断进步。
七、参考文献
[1]张素琴,吕映芝.编译原理[M].,清华大学出版社
[2]蒋立源、康慕宁等,编译原理(第2版)[M],西安:
西北工业大学出版社