编译论文.docx

上传人:b****6 文档编号:7065918 上传时间:2023-01-16 格式:DOCX 页数:13 大小:143.28KB
下载 相关 举报
编译论文.docx_第1页
第1页 / 共13页
编译论文.docx_第2页
第2页 / 共13页
编译论文.docx_第3页
第3页 / 共13页
编译论文.docx_第4页
第4页 / 共13页
编译论文.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

编译论文.docx

《编译论文.docx》由会员分享,可在线阅读,更多相关《编译论文.docx(13页珍藏版)》请在冰豆网上搜索。

编译论文.docx

编译论文

课程设计任务书

学生姓名:

崔立强专业班级:

软件工程1004

指导教师:

何九周工作单位:

计算机科学与技术学院

题目:

有穷自动机FA转换为正规文法G的程序设计

初始条件:

程序设计语言:

主要使用C语言的开发工具,或者采用LEX、YACC等工具,也可利用其他熟悉的开发工具。

算法:

可以根据《编译原理》课程所讲授的算法进行设计。

要求完成的主要任务:

(包括课程设计工作量及其技术要求,说明书撰写等具体要求)

设计报告书写要求与说明

课程设计报告:

要求层次清楚、整洁规范、不得相互抄袭。

设计报告正文字数不少于0.3万字。

课程设计报告书的内容应包括:

1.封面:

学号、题目、学院、专业、班级、姓名、指导老师、完成日期;

2.报告书的目录;

3.概述:

设计题目,设计目的,设计任务内容、时间;

4.设计环境与工具;

5.设计原则:

给出语法分析方法及中间代码形式的描述、文法和属性文法的设计或者词法分析方法及符号表和TOKEN代码的设计;

6.简要的分析与概要设计;

7.详细的算法描述,框图;

8.源程序清单(不打印,附盘);

9.给出软件的测试方法和测试结果(打印);

10.设计的特点、不足、收获与体会;

11.参考文献(按公开发表的规范书写)。

课程设计报告书装订顺序:

封面→课程设计任务书(由指导老师填写)→正文→评分表→封底

时间安排:

消化资料、系统调查、形式描述1天

系统分析、总体设计、实施计划3天

撰写课程设计报告书1天

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

一、设计题目与要求

1题目:

有穷自动机FA转换为正规文法G

2设计要求:

任意给定一个有穷自动机,求出其对应的正规文法。

3任务要求:

明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。

严格要求自己,要独立思考,按时、独立完成课程设计任务。

深入理解所学的《编译原理》相关知识,按照软件工程的设计方法进行简要的分析与概要设计,进行总体设计,详细设计、系统实施、调试。

运用程序设计语言实现算法,编写相关程序。

学会正确运用语法规则,并能应用优先关系和结合性解决二义性和冲突问题,有效而正确的利用各种分析方法和思想,合理使用出错处理程序,上机调试通过。

最后撰写课程设计报告。

通过编程实践逐步提高分析问题,解决问题的能力。

二、设计目的

课程设计是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。

通过提出更贴近现实的问题由学生独立解决锻炼学生的独立思考和动手能力。

有穷自动机FA转换为正规文法G的课程设计目的在于,加深学生对有穷自动机的理解。

在学生实现题目的同时进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构表示问题,然后编制算法和程序完成设计要求,从而进一步培养学生独立思考问题、分析问题、解决实际问题的动手能力。

三、分析与设计

1设计原则:

正规文法与有穷自动机有着特殊的关系,采用下面的规则可从正规文法G直接构造一个有穷自动机NFAM;使得L(M)=L(G):

(1)M的字母表与G的终结符相同;

(2)为G中的每一个非终结符生成M的一个状态,G的开始符S是开始状态;

(3)增加一个新状态Z,作为NFA的终态;

(4)对G中的形如A->tB的规则(其中T为终结符或,A为非终结符的产生式),构造M的一个转换函数f(A,t)=B;

(5)对G中形如A->t的产生式,构造M的一个转换函数f(A,t)=Z。

2简要分析与概要设计

用二维数组表示自动机的图。

从开始状态开始,若两个点直接连通则从该状态可以直接推出另一个状态,对应于一个转换函数f(A,t)=B;那么就可以先遍历状态机的图形,如果两个点直接连通,就可以产生一个对应文法的产生式;对应文法产生式生成完毕,就是得到了对应的正规文法。

3详细算法描述

3.1程序总体流程图

3.2输入开始状态

3.3输入中间状态

3.4输入终态

3.5输入终结符

3.6构造自动机

3.7生成对应的正规文法

3.8输出得到的正规文法

3.9源程序

#include

usingnamespacestd;

intmain()

{

intn,m;

//n为自动机状态的总数目

//m为自动机终结符的数目

intn_midd_stat,n_final_stat;

//n_midd_stat为中间状态的数目

//n_final_stat为终态的数目

cout<<"Pleaseenterthetotalnumberofautomaton'sstates:

";

cin>>n;

char*stat=newchar[n];

cout<<"Pleaseenterastartstate:

";

cin>>stat[0];

cout<<"Pleaseenterthenumberoftheintermediatestate:

";

cin>>n_midd_stat;

cout<<"Pleaseenterintermediatestaterespectively:

"<

for(inti1=0;i1

{

cin>>stat[i1+1];

}

n_final_stat=n-n_midd_stat-1;

cout<<"Finally,enterthefinalstate:

"<

for(inti2=0;i2

{

cin>>stat[n_midd_stat+1+i2];

}

cout<<"Enterthenumberoftheterminator:

";

cin>>m;

char*terminal=newchar[m];

cout<<"Pleaseentertheterminator:

"<

for(inti3=0;i3

{

cin>>terminal[i3];

}

cout<

//构造自动机

inti,j,k;

char**f=newchar*[n];

for(k=0;k

{

f[k]=newchar[n];

}

cout<<"Constructautomata:

"<

for(i=0;i

{

for(j=0;j

{

cout<<"state"<

<

if((i==0)&&(j==0))

{

cout<<"?

(ifcanderivethestateentertheterminator,otherwiseenter\"0\")";

}

else

{

cout<<"?

";

}

cin>>f[i][j];

}

}

cout<

//转换成对应的文法

cout<<"Regulargrammar:

"<

cout<<"G=({";//<

for(inti4=0;i4

{

if(i4!

=0)

{

cout<<",";

}

cout<

}

cout<<"},";

cout<<"{";

for(inti5=0;i5

{

if(i5!

=0)

{

cout<<",";

}

cout<

}

cout<<"},";

cout<<"P,";

cout<

cout<<"WherePis:

"<

for(i=0;i

{

for(j=0;j

{

if(f[i][j]!

='0')

{

cout<"<

}

}

}

//输出可接受状态增加的产生式,例如A->ε

for(inti6=0;i6

{

cout<ε"<

}

cin.get();

cin.get();

return0;

}

4环境和开发工具

Windows8系统

VS2012;

 

四、运行结果和截图

(1)开始状态:

A;

(2)中间状态:

2个,为B,C;

(3)终态:

2个,分别为D、E;

(4)终结符:

2个,分别为x、y;

(5)装换关系为

Stat

A

B

C

D

E

A

0

x

0

x

y

B

0

0

y

0

0

C

x

0

0

y

x

D

x

0

0

y

y

E

0

x

0

x

0

(6)得到的结果如图:

五、收获与体会

由于时间有限本课程设计完成比较粗糙,但是带给我的收获颇丰。

在课堂上对于课程内容的理解比较抽象,不能够在脑海里形成一个系统的知识体系。

通过这次课设在实践中加深了对自动机和文法的理解,巩固了课堂上学到的知识。

虽然在完成课设的同时查阅了相当多的资料,但是思考的过程是自己的,锻炼了我独立思考解决问题的能力、增强了我的动手能力最重要的是客服了内心对《编译原理》这门课的恐惧,当自己真的实现了程序后也对自己有了信心。

同时通过这次课设也让我认识到了自己的不足,本次课设知识整个编译程序体系中很小的一部分但是我完成的依然比较吃力,这证明我还需要加深学习需要锻炼。

感谢老师给我这样一次锻炼自己的机会,同时感谢老师的教诲与指导。

 

参考文献

[1](美)阿雷.《编译原理》(第2版).北京:

机械工业出版社,2009.

[2]孙悦红.《编译原理及实现》.北京:

清华大学出版社.2011年11月.

[3]张幸儿,戴新宇.《编译原理——编译程序构造与实践教程》.北京:

人民邮电出版社.2010.

[4]王杨明,姜乃松,蔡维玲.《编译原理简明教程》.北京:

电子工业出版社.2012.

[5]何九周.《计算机应用基础》.武汉:

武汉理工大学出版社.2010年1月.

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1