编译原理报告for循环语句的翻译程序

编译原理报告for循环语句的翻译程序
编译原理报告for循环语句的翻译程序

学号:0120810680326

课程设计

题目f or循环语句的翻译程序

学院计算机学院

专业软件工程

班级0803

姓名徐泽前

指导教师何九周

2011 年 6 月日

目录

1设计目的 (4)

2设计环境与工具 (4)

3设计任务要求与说明 (4)

4设计时间 (4)

5设计地点 (4)

6系统描述 (4)

7文法及属性文法的描述 (5)

7.1文法描述 (5)

7.1.1 FOR语句相关的产生式: (5)

7.1.2 布尔表达式: (5)

7.1.3 赋值表达式: (5)

7.2属性文法的描述 (5)

8 语法分析方法描述及语法分析表设计 (7)

8.1语法分析方法描述 (7)

8.2系统中使用的action和goto表(见附录1) (9)

9 给出中间代码形式的描述及中间代码序列的结构设计 (9)

10简要的分析与概要设计 (10)

11 详细的算法描述 (11)

11.1词法分析的数据结构设计与详细的流程图 (11)

11.2词法分析流程图 (11)

11.3语法制导翻译的数据结构与详细的设计图 (12)

11.3.1数据结构的设计 (12)

11.3.2算法描述 (13)

11.3.3程序流程图 (13)

12给出软件的测试方法和测试结果 (14)

12.1 FOR循环语句的测试 (14)

12.2词法分析出错处理 (15)

12.3语法分析出错处理 (16)

13收获与体会 (16)

14 参考文献 (17)

课程设计任务书

学生姓名:徐泽前专业班级:软件0803班

指导教师:何九周工作单位:计算机学院

题目: for循环语句的翻译程序

初始条件:

程序设计语言:主要使用C语言的开发工具,或者采用LEX、YACC等工具,也可利用其他熟悉的开发工具。算法:可以根据《编译原理》课程所讲授的算法进行设计。

要求完成的主要任务:(包括课程设计工作量及其技术要求,说明书撰写等具体要求)

1.明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会

设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。严格要求自己,要独立思考,按时、独立完成课程设计任务。

2.主要功能包括:利用算符优先分析方法和思想对某些语句进行语法分析与语义分析,生成相

应的中间代码。正确运用语法规则,并能应用所学的方法解决存在的问题。语法分析方法及中间代码形式的描述、文法和属性文法的设计。

2.进行总体设计,详细设计:包括算法的设计和数据结构设计。系统实施、调试,合理使用出错

处理程序。

3.设计报告:要求层次清楚、整洁规范、不得相互抄袭。正文字数不少于0.3万字。包含内容:

①课程设计的题目。

②目录。

③正文:包括引言、需求分析、总体设计及开发工具的选择,设计原则(给出语法分析方法及中间代码形式的描述、文法和属性文法的设计),数据结构与模块说明(功能与流程图)、详细的算法设计、软件调试、软件的测试方法和结果、有关技术的讨论、收获与体会等。

④结束语。

⑤参考文献。

⑥附录:软件清单(或者附盘)。

时间安排:

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

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

撰写课程设计报告书1天

指导教师签名: 2010年 6月 11日

系主任(或责任教师)签名: 2010年 6月 11日

1设计目的

课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,设计题中的问题比平时的练习题要复杂,也更接近实际。编译原理这门课程安排的课程设计的目的是旨在要求学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构表示问题,然后编制算法和程序完成设计要求,从而进一步培养学生独立思考问题、分析问题、解决实际问题的动手能力。

2设计环境与工具

(1)D OS环境下使用Turbo C;

(2)W indows环境下使用Visual C++ ;

(3)其它熟悉语言。

3设计任务要求与说明

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

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

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

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

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

4设计时间

第17周一周

5设计地点

鉴主10楼软件实验室

6系统描述

本系统完成FOR循环语句的翻译程序设计,FOR循环语句的格式为:for(A;B;

C)Sx,其中A,B,C均为表达式,分别表示初始化,循环控制条件(这里为布尔表达式)以及使控制条件发生变化,Sx为循环体,可为一个或多个赋值语句。

本系统首先要进行词法分析,即从左到右逐个字符地对源程序进行扫描,产生一个个的单词序列,输出到一个中间文件上,作为语法分析的输入而继续编译过程。

该程序的语法分析能对输入的语法进行分析,判断输入语句是否满足for循环语句的文法。通过LR分析方法对语句进行分析,看是否能通过给定的输入串归约到文法的开始符号。一个LR分析器主要由总控程序,分析栈(状态栈和符号栈),输入队列和分析表组成。在语法分析的同时进行语义分析,最后输出四元式的代码。

7文法及属性文法的描述

7.1文法描述

本系统中所使用FOR循环语句的文法包括FOR语句本身,赋值表达式和布尔表达式。具体文法产生式如下:

7.1.1 FOR语句相关的产生式:

1) S->for(W)Sx 2) W->A;W1

3) W1->B;W2 4) W2->A

5) Sx->Ax 6) Sx->{Am}

7)Am->AmAx 8) Am->Ax

7.1.2 布尔表达式:

9)B->B||L 10) B->L

11) L->L&&M 12) L->M

13) M->!M 14) M->K

15) K->(B) 16) K->false

17) K->true 18) K->id

19) K->idScid 20) Sc-> !=

21) Sc-> == 22) Sc-> <=

23) Sc-> >= 24) Sc-> <

25) Sc-> >

7.1.3 赋值表达式:

26) Ax->A; 27) A->id=E

28) E->E+T 29) E->E-T

30) E->T 31) T->T*F

32) T->T/F 33) T->F

34) F->id 35) F->(E)

36) F->num

7.2属性文法的描述

在本程序中用了三个变量来传递各种属性,TrueOrchain表示判断条件为真时的链号或者为句子的chain,FalseOrend表达判断条件为假时的链号,codeBegin表达代码

的开始地址。neststat指向下一四元式的地址,emit即为对四元式代码的打印,还需要下面三个函数:

1.chainMerge( p1 , p2),把p1和p2为链首的两条链合并为一条。返回合并后

的链首值。即将p2的链尾第4区段改为p1,合并后的链首为p2,除非p2

是空链。

2.backpatch(p , t),把p所链接的每个四元式的第4区段都填为t。其中使用

语义值codeBegin与非终结符E相连,表示表达式E的第1个四元式语句

的序列。

3.objectCode.insert(objcode),把中间代码存到objectCode中并把nextatat加1。具体的需要传递属性的产生式的属性文法如下表所示:

产生式属性文法

S->for(W)Sx emit(1);//生成最后一个jump

backpatch(nextstat,LastGotoAddress);//回填最后一个jump; backpatch(W.FalseOrEnd ,nextstat);//B为假则跳到最后四元式

W1->B;W2 backpatch(B.TrueOrChain,W2.TrueOrChain); backpatch(W2.FalseOrEnd , B.codeBegin );

W2->A emit(4);//输出跳转

W2.TrueOrChain = nextstat; W2.FalseOrEnd = nextstat-1;

Sx->{Am} 去掉{}

B->B1||L backpatch(B1.FalseOrEnd, L.codeBegin );//回填

B.codeBegin =B1.codeBegin ;

B.TrueOrChain=chainMerge(B1.TrueOrChain,

L.TrueOrChain);

B.FalseOrEnd = L.FalseOrEnd ; LastGotoAddress=nextstat;//记录最后jump回填地址

B->L LastGotoAddress=nextstat;//记录最后jump回填地址L->L1&&M backpatch(L1.TrueOrChain , M.codeBegin );//回填

L.codeBegin =L 1.codeBegin ;

L.TrueOrChain =M.TrueOrChain ;

L.FalseOrEnd=chainMerge(L 1.FalseOrEnd,M.FalseOrEnd );

M->!M 1 M.TrueOrChain =M 1.FalseOrEnd;

M. FalseOrEnd =M 1。TrueOrChain

M.codeBegin =M 1.codeBegin ;

K->idScid K.TrueOrChain =nextstat;

K.codeBegin =nextstat;

K.FalseOrEnd = nextstat+1;

emit(J+Sc,id,id, );//输出跳转语句

emit(jump,-,-, );

A->id=E

emit(E,- ,- ,id);//输出赋值语句 E->EoperT

(oper 为+-*/) emit(oper , E , T , temp);//输出表达式

8 语法分析方法描述及语法分析表设计

8.1语法分析方法描述

本程序采用SLR (1)分析方法,简单的LR(1),即只在动作不唯一的地方向前查看一个符号,在动作唯一时不向前查看输入符号。

从逻辑上来讲,一个LR 分析器如下图所示: 输入串

# … ai … a1 Sp →

X1 S1

┋ ┋ ┋

Xm Sm 总 控 程 序 输出 ACTION 表 GOTO 表 其中S 栈为状态栈 栈 产生式

分析过程如下:

1)首先将初始状态S0及句子左界符#分别压入状态栈和符号栈中。

2)设在分析中的某一步,分析栈及余留的输入串为如下格式:

S0S1… Sm ai ai+1…an

#X1… Xm ↑

则用栈顶状态Sm和当前扫描符ai组成符号对(Sm,ai)去查分析动作表,根据ACTION[Sm,ai]的指示完成相应的分析动作。表中每一元素所规定的动作仅能是下列四种动作之一:

A.ACTION[Sm, ai]= Sm+1 (移进)

表明句柄尚未在栈顶形成,此时正期待移进输入符号以便形成句柄。故将当前的输入符号和表元素Sm+1分别压入栈中,有

S0S1 S2 … Sm Sm+1 ai+1 ai+2 …an #

# X1 X2 … Xm ai ↑

B.ACTION[Sm, ai]= Rj (归约)

表明此时应按文法的第j个产生式A→ Xm-k+1Xm-k+2 …Xm进行归约。即栈顶符号串Xm-k+1Xm-k+2 …Xm已成为当前句型的句柄。所谓按第j个产生式归约,即将分析栈中从顶向下的k个符号退栈,再将文法符号A压入符号栈中。此时格局为:

S0S1… Sm-k ai ai+1…an #

# X1… Xm-k A ↑

然后以(Sm-k,A)去查状态转移表,设GOTO[Sm-k,A]= Sl ,则将此新状态压入状态栈中,则有如下格局:

S0S1… Sm-k Sl ai ai+1…an #

# X1… Xm-k A ↑

C.ACTION[Sm, ai]=acc (接受)

表明当前的输入串已被成功地分析完毕,应停止分析器的工作。

D.ACTION[Sm, ai]=ERROR(空白)

表明当前的输入串中含有错误,也应终止当前的分析工作。转出错处理。

3)重复上述第2步的工作,直到分析栈顶出现“接受状态”或“出错状态“为止。对接受状态,分析栈的格局为:

S0 Sα #

# Z ↑

其中Z为文法开始符号,α为使ACTION[Sα ,#]=acc的唯一状态(接受状态)。8.2系统中使用的action和goto表(见附录1)

9 给出中间代码形式的描述及中间代码序列的结构设计

本系统中所采用的中间代码形式是四元式,是一种比较普遍采用的形式。四元式的四个组成成分是:算符op,第一和第二运算对象ARG1和ARG2及运算结果RESULT。

运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。

例如a:=b*c+b*d的四元式表示如下:

1)(*,b,c,t1)

2)(*,b,d,t2)

3)(+,t1,t2,t3)

4)(:=,t3,-,a)

四元式对中间结果的引用必须通过给定的名字,也就是说,四元式的联系是通过临时变量实现的。

将gotoL写成(jump,-,-,L)

将if B rop C goto L写成(jrop,B,C,L)

本程序中所用到的四元式语句如下:

1)形如(op,arg1,arg2,result)的赋值语句

2)形如(jrop,B,C,L)的条件转移语句

3)形如(jump,-,-,L)的无条件转移语句

4)形如(=,arg1,-,result)的复写语句

10简要的分析与概要设计

自底向上分析方法是一种移进-归约过程,当分析的栈顶符号串形成句柄就采用归约动作,因而自底向上分析法的关键问题是在分析中如何确定句柄。LR分析法正是给出一种能根据当前分析栈中的符号串(通常以状态表示)和向右顺序查看输入串的k (k>=0)符号就可惟一地确定句柄。LR分析法的归约过程是规范推导的逆过程,所以LR分析过程是一种规范归约过程。

程序开始,需先对输入字符串进行词法分析,将其识别为一个个独立的单词序列,得到的字符单词要和关键字比较,看是否是关键字,根据比较结果进行返回相应的单词类型。单词类型主要包括标识符,关键字,常量,运算符和分界符。每种符号对应其在数组中的编号。在语法分析程序中,根据词法得到的结果,进行判断是否是当前需要的单词类型,如果不是就说明输入字符串不能由该文法推导出来;如果是当前需要的类型,就相应得做该单词类型分支程序。根据action表和goto表来进行状态转换,根据LR方法进行归约,看是否能得到接受状态。在进行语法分析的同时进行语义分析,审查程序有无语义错误,每个算符是否具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。在进行了上述的语法分析和语义分析阶段的工作之后,将源代码变成一种内部表示形式,此处用四元式表示。

总流程如下图所示:

图1.总程序流程图

11 详细的算法描述

11.1词法分析的数据结构设计与详细的流程图

初始化部分介绍

在程序正确执行前要完成如下的初始化工作:

1)完成语法分析所要查找的关键字和各种标识符编号的图的初始化。

2)读入源文件,对源文件进行初步的处理。

3)对源文件的正确读入进行判断,读入错误则进行报错。

4)初始化各种全局变量。

数据结构的设计

string Word[WordNum]

存储所有的单词(标识符,关键字,运算符,界限符,数字(整型,实型)),WordNum为单词个数。

map WordMap

存储所有单词和相应的类型码的map,用于识别单词类型时候方便查找,如能在表中找到,则能识别,如找不到,则报错处理。

vector AllToken

存储词法分析结果,Token为结点类。

class Token

每个单词类别的种类和类型结点信息,其主要的数据成员为单词的类型码和单词本身。

11.2词法分析流程图

对构成源程序的字符串从左到右的扫描,逐个字符地读入源程序字符并按照构词规则切分成一个一个具有独立意义的单词。并确定其属性(如保留字、标识符、运算符、界限符和常量等)。再把它们转换成长度统一的标准形式—属性字(TOKEN)。

图2.词法分析流程图

11.3语法制导翻译的数据结构与详细的设计图

11.3.1数据结构的设计

本程序语法分析所用到的数据结构如下表所示:

数据结构作用

stack sState 状态栈,用来存放分析过程中的状态信息

stack sNotation 符号栈,用来存放分析过程中的产生的单词信息deque sInputToken 输入串栈,存放的是单词结点

deque TokenTable Token队列,单词结点和编号

stack sLang 语义栈,语义分析时用,存放的是实际输入符号串stack sNodeInfor 非终结符的链信息栈,存储和回填与拉链相关信息newTemp newTempVar 中间变量,每调用一次产生一个新的中间变量

int nextstat 四元式地址的序号,假设从100开始

Action表,(<状态n,符号>,状态m)

map, string >

ActionTable

map

存储目标代码的图,<编号<四元式,回填地址>> objectCode

11.3.2算法描述

backpatch(int objPatch,int num)

回填函数,将objPatch所链接的每个四元式的第4区段都填为num。具体实现代码如下:

map >::iterator iter=objectCode.find(objPatch);

while( iter != objectCode.end())//如果存在地址号为objPatch的地址码号

{ iter->second.first += toString(num);//回填

iter = backpatch(iter->second.second , num);//填下一个链结点

}

return iter;

int chainMerge(int end, int head)

将end链的头接到head链的尾部,合并为一条链,返回合并后的链首值。

map >::iterator iter=objectCode.find(head);

map >::iterator iterWanted;//保存链尾

while( iter != objectCode.end())//找到head的链尾

{ iterWanted = iter;iter=objectCode.find(iter->second.second);}

iterWanted->second.second= end;

return head;

void emit(int deduceNum)

归约过程中所要用到的进行语义分析以及产生目标代码的函数,若在归约的过程中使用了含有+-*/的产生式则输出四元式到输出文件。在该过程中要视情况而调用回填及合并函数。

void initTable()

初始化action表,goto表,输入串队列,产生式表。将已构造的各个表的内容读入存储它们的图中。

11.3.3程序流程图

根据LR方法,在分析的过程中,只需判断在栈顶元素为Si时遇见输入符号a时

需要执行的动作:移进,归约,接受或者报错。最后将结果以四元式的形式输出到文件。其流程图如下:

12给出软件的测试方法和测试结果

12.1 FOR循环语句的测试

Input文件内容为:for(i=a;(i<=b)&&(i!=c);i=i+d)

{g = g+i*c2-b3; m = m*3;}#

其中编译运行结果和词法分析(LEXoutput.txt)及输出文件(output.txt)结果为:

12.2词法分析出错处理

若输入文件中含有词法分析中wordnum中所没有定义的单词时,将其在终端显示出来。如下图所示:

12.3语法分析出错处理

当输入文件中的输入序列不满足文法格式时,将得不到结果,如下图:

13收获与体会

本次课程设计是在两次上机实验之后开展的,在经历了词法分析和赋值语句的翻译两次实验之后,对一个源代码从输入到输出的编译过程已经有了比较系统的了解。

而且编译原理课程的考试在课程设计之前,故在真正着手做课程设计做要求的项目之前,已经对LR分析方法的理论知识有了较为牢固的掌握。

众所周知,就像建房子需要打好地基一样,对于该系统来讲,构造正确而完善的文法对以后对输入文件进行语法制导翻译而言是至关重要的。FOR循环的格式在之前的C++语言学习过程中已有接触,在这里只需将其格式用产生式的形式描述,在FOR 循环中,最重要的两种表达式就是赋值表达式和布尔表达式。其实表达式的赋值不过是步步细化,直至最后定义为终结符。而LR方法的基础则是构造出action和goto表,在产生式构造完毕之后,完成这两个表就只是是否细心的问题了。

地基打好了,接下来就是构造房子的大体框架了。词法分析是本程序第一个环节,

它将输入文件识别为一个个具有独立意义的单词序列,它的输出将作为语法分析的输入。之前第一次上机实验的成果在这里发挥了作用,可直接作为子函数调用。然后就是在归约的过程中根据ACTION表看执行哪个动作,直至最后得到接受状态。若为归约则还需进行相应语义分析,这里用到了较为生疏的回填及合并函数,以便将结果以四元式的形式输出。由于之前对这两个函数接触不多,尽管书本上有较为详细的介绍,但是对于自己来讲,仍然有些困难,所幸在这部分的完成上,得到了同学和老师耐心的讲解,最终完成的较为满意。

本次设计较为完善的完成了设计要求,能对输入源代码进行正确的参加法分析,能指出分析过程中出现的错误,完成了语法制导的FOR循环语句的翻译,在这个过程中,也能进行简单的检错处理,最后能正确的输出四元式序列,结果与预期相吻合。

但是在处理判断条件上,对于直接true的语义分析没有考虑全面,没有实现其功能,这是程序中的不足。总的来说,本次课程设计还是完成的较为成功。因为使用的文法和标准C++相关无几,即能够完成任何一种布尔表达式的翻译和任何一个for循环语句的翻译,文法的限制比较少,而且程序进行了比较好的出错处理。本系统所用的各种数据结构都是C++中STL(标准模版库)中提供的。这样使用比较简单且效率高。

此次课程设计让我知道自己的编程能力仍然有待提高,在以后的学习和实验中我将再接再厉,争取更上一层楼!

14 参考文献

[1]张素琴、吕映芝、等.编译原理(第二版).清华大学出版社.2005年2月

[2]陈火旺等.程序设计语言编译原理(第3版).国防工业出版社.2003年2月

[3]胡元义等.编译原理实践教程.西安电子科技大学出版社.2002年1月

[4]王雷等.编译原理课程设计.机械工业出版社.2005年3月

[5]Lippman等,C++ primer (英文版,第三版).人民邮电出版社

本科生课程设计成绩评定表

班级:软件0803姓名:徐泽前学号:0120810680326

序号评分项目满分实得分

1 学习态度认真、遵守纪律10

2 设计分析合理性10

3 设计方案正确性、可行性、创造性20

4 设计结果正确性40

5 设计报告的规范性10

6 设计验收10

总得分/等级

评语:

注:最终成绩以五级分制记。优(90-100分)、良(80-89分)、中(70-79分)、及格(60-69分)、60分以下为不及格

指导教师签名:

20 年月日

WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)

课程设计任务书 学生姓名:赵旭林专业班级:计算机0801班 指导教师:陈天煌工作单位:计算机科学与技术学院 题目: WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)写出符合给定的语法分析方法的文法及属性文法。 (2)完成题目要求的中间代码三地址表示的描述。 (3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 1 系统描述(问题域描述); 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写)。 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试及测试。 周5:撰写课程设计报告。 设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午10点。 指导教师签名: 2010年 11月 13日 系主任(或责任教师)签名: 2010年 11月 13日

FOR循环语句的翻译程序设计

目录 1 系统描述 (2) 1.1目的 (2) 1.2设计内容: (2) 1.3翻译过程 (2) 1.4初始条件: (3) 1.5 开发平台 (3) 2文法及属性文法的描述 (3) 3 语法分析表设计 (4) 3.1 LR分析概述 (4) 3.2 LR(0)分析表 (5) 3.3 LR语法分析过程的设计思想及算法 (7) 3.4 翻译方法 (8) 4 中间代码形式的描述及中间代码序列的结构设计 (8) 5简要的分析与概要设计 (9) 6详细的算法描述 (9) 6.1 main函数 (10) 6.2词法分析 (10) 6.3 语法分析 (12) 7 测试方法和测试结果 (13) 7.1测试过程 (13) 7.2 测试结论 (14) 8 研制报告 (14) 8.1研制过程 (14) 8.2本设计的评价 (15) 8.3个人心得体会 (15) 9 参考文献 (16) 本科生课程设计成绩评定表 (17)

FOR循环语句的翻译程序设计 ——LR方法、输出四元式 1 系统描述 1.1目的 通过设计、编制、调试一个FOR循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,实现词法分析程序对单词序列的词法检查和分析,并且实现对单词序列的语法分析、语义分析以及中间代码生成。 1.2设计内容: 本设计按照要求设计出for语句的简单文法,并使用LR分析法对用户输入的程序进行分析和翻译。 对下列正确的程序输入: for(i=0;i<10;i++) { m=m+i; } 结果程序要对该输入进行词法分析,然后利用LR分析法对词法分析后得到的单词序列进行语法分析,经过语法制导翻译显示出等价的四元式表示的中间代码。 对于错误的程序输入,如: for(i=0;i<10) { m=m+i; } 结果程序要指出程序出错。 1.3翻译过程

IF-ELSE条件语句的翻译程序设计(LL(1)法、输出三地址表示) 2

IF-ELSE条件语句的翻译程序设计 1 问题描述 要求用LL(1)自顶向下分析方法及三地址中间代码,对IF-THEN-ELSE条件语句完成编译各阶段过程,包括词法、语法、语义等分析。 2 问题分析及编译系统的概要设计 编译过程一般分为六个阶段的过程,可以由六个模块完成,它们称为词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序,此外,一个完整编译程序还必须包括“表格管理程序”和“出错处理程序”。 这次实验涉及到词法分析、语法分析、语义分析及表格管理和出错管理。其中,词法分析至少要能识别关键字“if”、“then”和“else”,标识符(即自定义变量),数字,和运算符等等;语法分析要分析程序结构的合法性,即是否为文法的句子;语义分析要能够语法制导翻译出中间代码(三地址)并将其输出;表格管理是指符号表;出错处理是指在语法分析时,所有非文法句子的错误类型处理. 3 文法及属性文法的定义 3.1 文法: 文法是用于描述语言的语法结构的形式规则(即语法规则)。这些规则必须是准确的、易于理解的以及有相当强的描述能力。由这种规则所产生的程序语言应有利于句子分析和翻译,而且,最好能通过这些规则自动产生有效的语法分析程序. IF-ELSE条件语句的文法如下所示: 0.A->EB 1.B->+EB|-EB|ε 2.E->FT 3.T->*FT|/FT|ε 4.F->i|(E) 或者能够更简洁一点: 0.S->if A THEN B ELSE C 1.A->m rop n

3.C->x=n arop m 4.rop->=|<|> 5.arop->+|-|*|/ 3.2 属性文法: 属性文法是在上下文无关文法的基础上,为每个文法符号(终结符或者非终结符)配备若干相关的“值”(与文法符号相关的属性)。 在一个属性文法中,对应于每个产生式A→a都有一套与之相关联的语义规则,每规 则的形式为:b:=f(c 1,c 2 ,…,c k )其中f是一个函数,而且或者①b是A的一个综合属性 并且c 1,c 2 ,…,c k 是产生式右边文法符号的属性或者②非终结符既可有综合属性也可有 继属性,文法开始符号的所有继承属性作为属性计算前的初始值。 属性文法为: if(VT[opr]=='=') //{"="判断}; { arr[d][1]=arr_i[opd]; arr[d][0]='='; arr[d][2]=id; arr[d][3]=' '; arr[d][4]=' '; id++; } else if(VT[opr]=='>') //{">"判断}; { arr[d][1]=arr_i[opd]; arr[d][0]='>'; arr[d][2]=id; arr[d][3]=' '; arr[d][4]=' '; id++; }

DO-WHILE循环语句的翻译程序设计

课程设计任务书 学生姓名:专业班级: 指导教师:工作单位:计算机科学与技术学院 题目: DO-WHILE循环语句的翻译程序设计(LL(1)法、输出三地址表示)初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)写出符合给定的语法分析方法的文法及属性文法。 (2)完成题目要求的中间代码三地址表示的描述。 (3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 1 系统描述(问题域描述); 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写)。 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试及测试。 周5:撰写课程设计报告。 设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午10点。 指导教师签名: 2011年月日 系主任(或责任教师)签名: 2011年月日

DO-WHILE循环语句的翻译程序设计 (LL(1)法、输出三地址表示) 1. 系统描述 1.1 设计目的 通过设计、编制、调试一个DO-WHILE循环语句的语法及语义分析程序,加深对法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。 1.2 设计内容及步骤 对循环语句: DO〈赋值语句〉WHILE 〈表达式〉 (1)按给定的题目写出符合自身语法分析方法要求的文法和属性文法描述。 (2)按给定的题目给出语法分析方法的思想及分析表设计。 (3)按给定的题目给出中间代码序列的结构设计。 (4)完成相应的词法分析、语法分析和语义分析程序设计。 (5)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 2. 文法及属性文法的描述 2.1 文法描述 K -> do L while S L -> SP P -> ;SP | ε S -> iQE E -> TG G -> +TG | -TG | εT -> FR R -> *FR | /FR | εF -> (E) | i Q -> = | < | > 2.2 属性文法的描述

for循环语句的翻译

课程设计任务书 学生姓名:辛波专业班级:计算机0707班 指导教师:彭德巍工作单位:计算机科学与技术学院 题目: FOR循环语句的翻译程序设计(递归下降法、输出四元式) 初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)写出符合给定的语法分析方法的文法及属性文法。 (2)完成题目要求的中间代码四元式的描述。 (3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 1 系统描述(问题域描述); 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写)。 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试及测试。 周5:撰写课程设计报告。 设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午10点。 指导教师签名: 2010年 01月 08日 系主任(或责任教师)签名: 2010年 01月 08日

WHILE循环语句的翻译程序设计(简单优先法、输出四元式)

WHILE循环语句的翻译程序设计(简单优先法、输出四元式) 1 需求说明或问题描述 1.1 问题描述 对C++中while循环语句的理解及分析,通过编译中的词法分析、语法分析、语义分析及中间代码生成等编译过程,用简单优先分析法分析并翻译while语句。 1.2 需求说明 1 写出符合给定的语法分析方法的文法及属性文法 2 完成题目要求的中间代码四元式的描述 3 写出给定的语法分析方法的思想,完成语法分析及语义分析程序设计 4 设计若干用例,上机通过测试 2 文法及语法设计 2.1文法及属性文法: 文法G=(V N ,V T ,P ,S) 其中V N={S , B, E, C, A, B, P, T} V T={w, (, ), { ,}, i, ;} P={ S -> w(B){E} E -> C C -> CA C -> A A -> iPA A -> i; P -> +|-|*|/ B -> iTi B-> i T -> >|<|>=|<=|== } 2.2 语法分析方法描述及语法分析表设计 2.2.1 语法分析方法描述: 简单优先分析法是按照文法符号(终极符和非终极符)的优先关系确定句柄的。 基本思想可设计如下,首先根据已知优先文法构造相应优先关系矩阵,并将

文法的产生式保存,设置符号栈S,步骤如下: (1)将输入符号串a1a2…a n#依次逐个存入符号栈S中,直到遇到栈顶符号a i的优先性>下一个待输入符号a j为止。 (2)栈顶当前符号a i为句柄尾,由此向左在栈中找句柄的头符号a k,即找到a k-1

WHILE循环语句的翻译程序设计.

WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示) 1 系统描述 按照课程设计的要求,写一个能识别while循环语句的文法,通过一定的变换使它符合递归下降法的要求,然后按照这个文法编写一个程序,该程序能识别输入的语句是否符合while语句的文法,或者能不能通过文法的开始符号推导出该语句。 该程序应该包括词法分析器,能对输入的语句进行词法分析,然后再对结果进行语法分析。词法分析器应能识别关键字,标示 符,常量,操作符等。 该程序的语法分析器能对输入的语法进行分析,判断输入语句能否满足while循环语句的文法。通过递归下降的方法对语句进行分析,看能否通过开始符号推导出来。 该程序的语义分析器就是对分析结果进行输出,要求输出结果是 三地址形式的。 2 文法及属性文法的描述 2.1文法描述 语句 > ::= while (< 条件表达式 > (< 赋值语句 > | 语句 > <条件表达式> ::= (<标识符>|<无符号整数>)<条件运算符> (<标识符>|<无符号整数> <标识符> ::= <字母> (<字母>|<数字> <条件运算符> ::= > | < | = <无符号整数> ::= <数字>(<数字>

<赋值语句> ::= <标识符>=(<标识符> | <数字> <算术运算符> (<标识符> | <数字> <算术运算符> ::= + | - | * | / <赋值语句> ::= <标识符>=<标识符> | <数字> 2.2递归文法 while语句文法: S -> while (B S | i=E B -> E relop E relop -> < | = | > E -> E+E | E-E | E*E | E/E | (E | i | n 在编写程序的时候用到的是递归下降法,而递归下降法对文法的要求是不能包含左递归,对上述的文法进行消除左递归之后,得 到如下的递归文法: S -> while (B S | i=E B -> E relop E relop -> < | = | > E -> (E F | iF | nF F -> +EF | -EF | *EF | /EF | ε 2.3属性文法的描述 产生式属性文法 S -> while (B S1S.begin:=newlabel;

WHILE循环语句的翻译程序设计课设报告

1.题目:将WHILE语句转换成四元式的程序实现 设计内容及要求:设计一个语法制导翻译器,将WHILE语句翻译成四元式。要求:先确定一个定义WHILE语句的文法,为其设计一个语法分析程序,为每条产生式配备一个语义子程序,按照一遍扫描的语法制导翻译方法,实现翻译程序。对用户输入的任意一个正确的WHILE语句,程序将其转换成四元式输出(可按一定格式输出到指定文件中)。 1、系统描述 通过设计、编制、调试一个WHILE循环语句的语法及语义分析程序,加深对语法 及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。用语法 制导完成语义分析,并将形成的中间代码以四元式的形式输出。 2 、文法及属性文法的描述 。 2.1 文法的描述 该文法的产生式如下所示: (1)S->while(B){E} (2)E->AE (3)E->A (4)A->iPA (5)A->i (6)B->iTi & (7)B->i 其中while、( 、) 、{ 、} 、P、T 、;和i均为终结符,而S、A、B、E这些大写字母均为非终结符。T表示比较运算符,P表示算术运算符,i表示合法标识符。 2.2 属性文法的描述 对该文法的属性文法描述如下: (1) S->while(B){E} prinf(if B goto E else goto next) (2) E->AE print = · (3) E->A print =

(4) A->i P A print(A= P (5) A->i; = i; (6) B->i T i print(B = T (7) B->i = i 3 、语法分析方法描述及语法分析表设计 | 3.1 语法分析表设计 3.1.1 文法的DFA

编译原理报告for循环语句的翻译程序

学号:0120810680326 课程设计 题目f or循环语句的翻译程序 学院计算机学院 专业软件工程 班级0803 姓名徐泽前 指导教师何九周 2011 年 6 月日

目录 1设计目的 (4) 2设计环境与工具 (4) 3设计任务要求与说明 (4) 4设计时间 (4) 5设计地点 (4) 6系统描述 (4) 7文法及属性文法的描述 (5) 7.1文法描述 (5) 7.1.1 FOR语句相关的产生式: (5) 7.1.2 布尔表达式: (5) 7.1.3 赋值表达式: (5) 7.2属性文法的描述 (5) 8 语法分析方法描述及语法分析表设计 (7) 8.1语法分析方法描述 (7) 8.2系统中使用的action和goto表(见附录1) (9) 9 给出中间代码形式的描述及中间代码序列的结构设计 (9) 10简要的分析与概要设计 (10) 11 详细的算法描述 (11) 11.1词法分析的数据结构设计与详细的流程图 (11) 11.2词法分析流程图 (11) 11.3语法制导翻译的数据结构与详细的设计图 (12) 11.3.1数据结构的设计 (12) 11.3.2算法描述 (13) 11.3.3程序流程图 (13) 12给出软件的测试方法和测试结果 (14) 12.1 FOR循环语句的测试 (14) 12.2词法分析出错处理 (15) 12.3语法分析出错处理 (16) 13收获与体会 (16) 14 参考文献 (17)

课程设计任务书 学生姓名:徐泽前专业班级:软件0803班 指导教师:何九周工作单位:计算机学院 题目: for循环语句的翻译程序 初始条件: 程序设计语言:主要使用C语言的开发工具,或者采用LEX、YACC等工具,也可利用其他熟悉的开发工具。算法:可以根据《编译原理》课程所讲授的算法进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,说明书撰写等具体要求) 1.明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会 设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。严格要求自己,要独立思考,按时、独立完成课程设计任务。 2.主要功能包括:利用算符优先分析方法和思想对某些语句进行语法分析与语义分析,生成相 应的中间代码。正确运用语法规则,并能应用所学的方法解决存在的问题。语法分析方法及中间代码形式的描述、文法和属性文法的设计。 2.进行总体设计,详细设计:包括算法的设计和数据结构设计。系统实施、调试,合理使用出错 处理程序。 3.设计报告:要求层次清楚、整洁规范、不得相互抄袭。正文字数不少于0.3万字。包含内容: ①课程设计的题目。 ②目录。 ③正文:包括引言、需求分析、总体设计及开发工具的选择,设计原则(给出语法分析方法及中间代码形式的描述、文法和属性文法的设计),数据结构与模块说明(功能与流程图)、详细的算法设计、软件调试、软件的测试方法和结果、有关技术的讨论、收获与体会等。 ④结束语。 ⑤参考文献。 ⑥附录:软件清单(或者附盘)。 时间安排: 消化资料、系统调查、形式描述1天 系统分析、总体设计、实施计划3天 撰写课程设计报告书1天 指导教师签名: 2010年 6月 11日 系主任(或责任教师)签名: 2010年 6月 11日

do-while语句翻译程序

DO-WHILE循环语句的翻译程序设计 (LR方法、输出三地址表示) 1.系统描述 1.1设计目的 通过设计、编制、调试一个DO-WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。 1.2设计内容及步骤 对循环语句:DO〈赋值语句〉WHILE 〈表达式〉 按给定的题目写出符合自身语法分析方法要求的文法和属性文法描述。 (1)按给定的题目给出语法分析方法的思想及分析表设计。 (2)按给定的题目给出中间代码序列的结构设计。 (3)完成相应的词法分析、语法分析和语义分析程序设计。 (4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 2文法的描述 本程序所用的文法如下: G[S]: (1)S->do{E;}while(B) {if B.true goto B.true else goto B.false;} (2)B->I1 rop I2 {B.type=bool;B.val=I1.val rop I2.val;} (3)E->I1=I2 op I3 {I1.val=I2.val op I3.val;} (4)I->id {I.val=id.val;} 注意:rop is < or >,op is +,-,*,/, id is any number or identifier 由上可知,非终结符B表示布尔表达式,E表示赋值表达式 3.语法分析方法描述及语法分析表设计 3.1语法分析方法描述 本实验采用LR分析方法对DO-WHILE语句进行语法分析。LR分析法是一种能根据当前分析栈中的符号串(通常以状态表示)和向右顺序查看输入串的K个(K>=0)符号就能惟一的确定分析器的动作是移进还是归约和用哪个产生式归约,因而也就能惟一的确定句柄。LR分析法的归约过程是规范推导的逆过程,所以LR分析过程是一种规范过程。 一个LR分析器由3个部分组成: 总控程序,也可以称为驱动程序。对所有的LR分析器,总控程序是相同的。 分析表或分析函数。不同的方法分析表将不同,同一个方法采用的LR分析器不同时,分析表也不同,分析表表又可以分为动作(ACTION)表和状态转换(GOTO)表两个部分,它们都可以用二维数组表示。 分析栈,包括文法符号栈和相应的状态栈。它们均是先进后出栈。

FOR循环语句翻译程序设计简单优先法三地址码JAVA

学 号: 27 课内实践报告课程名称编译原理 题目FOR循环语句的翻译程序设计(简单优先法、输出三地址码) 学院计算机科学及技术专业计算机科学及技术班级1201 姓名李潇颖 指导教师林泓

2014年12月9日 课内实践任务书 学生姓名:李潇颖专业班级:计算机1201班 指导教师:林泓工作单位:计算机科学及技术学院 题目: FOR循环语句的翻译程序设计(简单优先法、输出三地址码) 初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课内实践工作量及其技术要求,以及说明书撰写等具体要求) (1)写出符合给定的语法分析方法的文法及属性文法。 (2)完成题目要求的中间代码三地址码的描述。 (3)写出给定的语法分析方法的思想,完成语法分析和语义分

析程序设计。 (4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5)设计报告格式按附件要求书写。课内实践报告书正文的内容应包括: 1 系统描述(问题域描述); 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序 列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、 收获及体会等); 9 参考文献(按公开发表的规范书写)。 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试及测试。 周5:撰写课内实践报告。 设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。

FOR循环语句的翻译程序设计(简单优先法、三地址码)JAVA资料

学号:0121210340527 课内实践报告 课程名称编译原理 题目FOR循环语句的翻译程序设计(简 单优先法、输出三地址码) 学院计算机科学与技术 专业计算机科学与技术 班级1201 姓名李潇颖 指导教师林泓 2014 年12 月9 日

课内实践任务书 学生姓名:李潇颖专业班级:计算机1201班 指导教师:林泓工作单位:计算机科学与技术学院 题目: FOR循环语句的翻译程序设计(简单优先法、输出三地址码)初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课内实践工作量及其技术要求,以及说明书撰写等具体 要求) (1)写出符合给定的语法分析方法的文法及属性文法。 (2)完成题目要求的中间代码三地址码的描述。 (3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5)设计报告格式按附件要求书写。课内实践报告书正文的内容应包括: 1 系统描述(问题域描述); 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写)。 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试及测试。 周5:撰写课内实践报告。 设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午10点。 指导教师签名:年月日 系主任(或责任教师)签名:

for循环实例.

for循环实例 读取的是数组expr的行数,然后程序执行循环体(loopbody),所以expr有多少列,循环体就循环多少次。expr经常用捷径表达式的方式,即first:incr:last。 在for和end之间的语句我们称之为循环体。在for循环运转的过程中,它将被重复的执行。For循环结构函数如下: 1.在for循环开始之时,matlab产生了控制表达式。 2.第一次进入循环,程序把表达式的第一列赋值于循环变量index,然后执行循环体内的语句。 3.在循环体的语句被执行后,程序把表达式的下一列赋值于循环变量index,程序将再一次执行循环体语句。 4.只要在控制表达式中还有剩余的列,步骤3将会一遍一遍地重复执行。 10次。循环系数ii在第一次执行的时侯是1,第二次执行的时侯为2,依次类推,当最后一次执行时,循环指数为10。在第十次执行循环体之后,再也没有新的列赋值给控制表达式,程序将会执行end语句后面的第一句。注意在循环体最后一次执行后,循环系数将会一直为10。 环指数ii在第一次执行时为1,第二次执行时为3,依此类推,最后一次执行时为9。在第五次执行循环体之后,再也没有新的列赋值给控制表达式,程序将会执行end语句后面的第一句。注意循环体在最后一次执行后,循环系数将会一直为9。 循环指数ii在第一次执行时为1,第二次执行时为3,第三次执行时为7。循环指数在循环结束之后一直为7。

循环指数ii 在第一次执行时为行向量??? ???41,第二次执行时为??? ???54,第三次执行时为 ??????76。这个例子说明循环指数可以为向量。 例1 阶乘(factorial )函数 这种循环将会执行5次,ii 值按先后顺序依次为1,2,3,4,5。n_factorial 最终的计算结果为1ⅹ2ⅹ3ⅹ4ⅹ5=120。 例2 统计分析 执行如下算法: 输入一系列的测量数,计算它们的平均数和标准差。这些数可以是正数,负数或0。 答案: 这个程序必须能够读取大量数据,并能够计算出这些测量值的平均数和标准差。这些测量值可以是正数,负数或0。 因为我们再也不能用一个数来表示数据中止的标识了,我们要求用户给出输入值的个数,然后用for 循环读取所有数值。 下面的就是这个修定版本的程序。它允许各种输入值,请你自己验证下面5个输入值的

《For循环语句》

《F o r循环语句》教学设计 池州市第八中学杜亦麟 课题 2.4.1 For循环语句 教学内容 粤教版信息技术(选修1)《算法与程序设计》第二章《程序设计基础》第四节《程序的循环结构》第一小节《For循环语句》 教学目标 知识与能力: 1.理解循环结构的基本思想及For语句的执行过程。 2.培养和提高学生逻辑思维能力,使其可以独立完成简单循环结构算法的设计。 3.能够利用For循环语句实现循环结构,解决实际问题。 过程与方法: 1.通过简单的数学问题的分析、讲解,让学生掌握For循环语句语法知识,及其执行原理。 2.以任务驱动,学生分组合作探究的方式,进一步让学生理解For循环语句的基本思想,同时培养学生自主探究和合作学习的能力。 3.通过自评和互评活动,培养学生语言表达能力和归纳总结能力。 情感态度与价值观: 1.提高学生学习兴趣,培养学习的主动性和探究性。 2.培养学生团结协作精神,体验成功的快乐。 教学重点 1.掌握For循环语句的格式和功能; 2.理解For循环语句的执行过程。 教学难点 控制循环的条件、确定循环体的内容 教材分析 第二章是程序设计基础,也是全书的基础。它沿着分析问题、设计算法、编写程序等运用计算机解决问题之路,开始学习如何使用VB程序设计编写程序解决问题。本节课的主要内容For语句的基本格式、执行过程及语句的实际应用。又是本章的重点和难点内容。而循环结构是程序设计的三种基本结构之一,其作用是使一段程序反复执行。For循环语句在程序设计中频繁出现,也是三种结构中较难的一种,因此,学好本节课非常重要,本节课的学习会使学生对算法有一个更深刻的理解,为以后的程序设计打下一个良好的基础,也可以培养学生的创新能力、分析问题和解决问题的能力以及探究精神。

《编译原理》课程设计-DO-WHILE循环语句的翻译程序设计(LL(1)法、输出三地址表示)资料

012131087051 学号: 6 课程设计 题目编译原理 学院计算机科学与技术 专业计算机科学与技术 班级 姓名 指导教师 2015 年12 月7 日

课程设计任务书 学生姓名:专业班级: 指导教师:工作单位: 题目: while循环语句的翻译程序设计(LL(1)法、输出三地址表示)初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)写出符合给定的语法分析方法的文法及属性文法。 (2)完成题目要求的中间代码三地址表示的描述。 (3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 1 系统描述(问题域描述); 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写)。 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试及测试。 周5:撰写课程设计报告。 设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午10点。 指导教师签名: 2011年 12月 23日 系主任(或责任教师)签名: 2011年 12月 23日

编译IF-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)代码+报告

学号:0120910340205 编译课程设计 题目IF-ELSE条件语句的翻译程序设计(简单优先法、输出三 地址表示) 学院计算机科学与技术学院专业计算机科学与技术专业班级计算机科学与技术0902班姓名 指导教师郭羽成 2012 年 1 月 5 日

课程设计任务书 学生姓名:专业班级:计算机0902班 指导教师:郭羽成工作单位:计算机科学与技术学院 题目: IF-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)写出符合给定的语法分析方法的文法及属性文法。 (2)完成题目要求的中间代码三地址表示的描述。 (3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 1 系统描述(问题域描述); 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写)。 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试及测试。 周5:撰写课程设计报告。 设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午10点。 指导教师签名: 2011年 11月 18日 系主任(或责任教师)签名: 2011年 11月 18日

WHILE循环语句的翻译程序设计(递归下降法,输出四元式)

武汉理工大学《数据结构》课内实践报告 学号:0121210340314 课内实践报告 课程名称编译原理 WHILE 循环语句的翻译程序设计 设计题目 (递归下降法,输出四元式)学院计算机科学与技术 专业班级计算机1203班 姓名闵丹枫 指导教师林泓 2014年12月8 日

武汉理工大学《数据结构》课内实践报告

课程设计任务书 学生姓名:闵丹枫专业班级:计算机1203班 指导教师:林泓工作单位:计算机科学与技术学院 题目:WHILE循环语句的翻译程序设计(递归下降法、输出四元式) 初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)写出符合给定的语法分析方法的文法及属性文法。 (2)完成题目要求的中间代码四元式的描述。 (3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:1系统描述(问题域描述); 2文法及属性文法的描述; 3语法分析方法描述及语法分析表设计; 4按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5编译系统的概要设计; 6详细的算法描述(流程图或伪代码); 7软件的测试方法和测试结果; 8研制报告(研制过程,本设计的评价、特点、不足、收获与体会等) 9参考文献(按公开发表的规范书写)。 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试及测试。 周5:撰写课程设计报告。 设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午10点。 指导教师签名: 2014 年9月1日

FOR循环语句教学设计

F O R循环语句教学设计 集团档案编码:[YTTR-YTPT28-YTNTL98-UYTYNN08]

F O R循环语句 一、教材分析:本节是《算法与程序设计》(选修)第二章第四节“程序的循环结构”中的内容。这一节的前面是顺序结构和选择结构,紧接FOR语句后面是DO语句和循环嵌套。本节课是FOR语句的初次学习,着重介绍FOR语句的基础知识:格式和执行过程,不涉及双重循环等较难的运用。循环结构是程序设计的三种基本结构之一,是程序设计的基础。 二、学情分析:在学习本课之前,学生已掌握VB程序的顺序结构和选择结构的程序执行流程,对条件语句有了较深的理解,并具有一定的算法基础和比较、归纳能力。 三、教学目标 1、知识与技能:: 1)掌握FOR循环语句的基本格式; 2)理解FOR循环语句的执行过程; 3)能用for循环结构编写简单的程序。 2、过程与方法: 1)培养学生分析问题,解决问题的能力。 2)能进一步理解用计算机解决问题的过程和方法。 3、情感态度与价值观:激发学生学习热情,培养学生学习的积极性。 四、教学重点、难点及确立依据: 教学重点:1、掌握FOR循环语句的基本格式; 2、理解FOR循环语句的执行过程; 教学难点:解决实际问题,编写简单程序。 五、教学方法:讲授法、任务驱动法 六、教学环境:机房 六、教学过程: 1、导入新课: 由故事引出本节课内容: 阿基米德与国王下棋,国王输了,国王问阿基米德要什么奖赏?阿基米德对国王说:我只要在棋盘上第一格放一粒米,第二格放二粒,第三格放四粒,第四格放八粒………按这个比例放满整个棋盘64个格子就行。国王以为要不了多少粮食,可一个粮仓的米还摆不完一半的棋格子,全部摆满后,你知道排满棋盘全部格子有多少米吗?请根据你所学的数学知识列出式子。 学生回答:2^0+2^1+2^2+……2^64 那用vb程序怎样进行计算呢?引出循环结构。 2、新课讲授: 在实际问题中会遇到具体规律性的重复运算问题,反映在程序中就是将完成特定任务的一组语句重复执行多次。重复执行的一组语句称为循环体,每重复一次循环体,都必须做出继续或者停止循环的判断,其依据就是判断一个特定的条件,成立与否,决定继续还是退出循环。 举例说明: Fori=1To10 s=s+i

DO-WHILE循环语句的翻译程序设计(简单优先法、输出四元式)

(二)DO-WHILE循环语句的翻译程序设计(简单优先法、输出四元式) 一、1.简单优先法的基本思想 根据优先关系的定义,将简单优先文法中各文法符号之间的这种关系用一个矩阵表示,称作简单优先矩阵。PDA读入一个单词后,比较栈顶符号和该单词的优先级,若栈顶符号优先级低于该单词,继续读入;若栈顶符号优先级高于或等于读入符号,则找句柄进行归约,找不到句柄就继续读入。直到最后栈内只剩下开始符号,输入串读到“#”为止。此时识别正确。可分点描述如下: (1)、对句型中相邻的文法符号规定优先关系,以寻找句型中的句柄; (2)、规定句柄内各相邻符号之间具有相同的优先级; (3)、规定句柄两端符号优先级要比位于句柄之外而又和句柄相邻的符号的优先级高,以先归约句柄; (4)、对于文法中所有符号,只要它们可能在某个句型中相邻,就要为它们规定相应的优先关系,若某两个符号永远不可能相邻,则它们之间就无关系. 2.简单优先矩阵 用于表示文法符号之间的简单优先关系的矩阵。 3.简单优先法的优缺点 优点:技术简单,当做简单优先矩阵是要求较短。 缺点:适用范围小,分析表尺寸太大。 二、源代码实现: #include #define MAX 35 #include #include #include using namespace std; #define TABLE_LEN 8 #define STR_LEN 256 int zhlen; char sTable[TABLE_LEN+1] = {"+-*/()i#"};//顺序索引 int ShipTable[TABLE_LEN][TABLE_LEN] = //优先表 { { 1, 1,-1,-1,-1, 1,-1, 1}, { 1, 1,-1,-1,-1, 1,-1, 1}, { 1, 1, 1, 1,-1, 1,-1, 1}, { 1, 1, 1, 1,-1, 1,-1, 1}, {-1,-1,-1,-1,-1, 0,-1,-2}, { 1, 1, 1, 1,-2, 1,-2, 1},

将高级语言源程序翻译成目标程序的翻译程序称为 D、

将高级语言源程序翻译成目标程序的翻 译程序称为D、 相关的主题文章: 2、汇编程序的作用是指将汇编语言源程序翻译成(A、可履行程序) 3、《中华人民共和国计算机信息系统平安维护条例》公布于(B、1994年) 4、LAN的中文名称是(B、局域网) 5、操作系统是为了提高计算机的工作效率和便利用户使用计算机而装备的一种(D、系统软件) 6、第二代电子计算机主要采用(A、晶体管)元件制作成 7、Windows98中,中英文输入法快捷键(C、ctrl空格) 8、Windows98中""表现(C、文件夹中还有子文件夹) 9、停止一个活动窗口的利用程序窗口(A、Alt F4) 10、Windows98中,对桌面背景的设置可以(鼠标右击桌面空缺处,选"属性") 11、资源管理器中,可以取舍多个持续的文件的操作是(B、shift)键 12、狭义的初级电算化是指(电子计算技巧在计算机中的运用) 13、期初余额的录入(A、在开始使用总账系统时必须录入期初余额) 14、增添会计科目顺序必须由(从下级到上级增长) 15、商品化的会计软件比自行开发的会计软件(A、通用性强、开发程度高) 16、3222的会计科目标编码计划,请问1010101科目是(三级明细科目)

17、会计报表系统中,最新计算机考试试题,运算公式应在(A、报表格式定义)之后实现 18、3 22构造的会计科目代码最多核算到(C、三级)级明细科目 19、已记过账的财务系统中,还是否增加科目(D、不能) 20、会计核算软件中采用的(总分类账)会计科目名称、编码方法必须吻合 国家统一会计制度的规定 21、字母大小写的转换键是(Capslock) 22、把硬盘上数据传递到计算机内存中去叫(B、读盘) 23、计算机病毒是(B、一种特别程序) 24、TCP指的是一种(B、传输节制协定) 25、IP地址采取(B、32)位二进制代码 26、存储器的叙述正确的是(C、CPU只能直接访问内存,而不能拜访外存) 27、设置会计科目编码要求(各部门财政部同一规定) 28、制定会计核算软件基本功能标准的根据是(《中华国民共和国会计法》和《会计电算化管理方式》) 29、财政部制订的《会计核算软件管理的多少项划定》时光是(C、1989年) 30、已经输入的机内的记账凭证,(B、不可以)直接登记入账 31、存储介质的特点(B) A、可以直观地看到 B、不能直观地看到,必须由计算机打印输出 C、可以通过复印方法保存 D、与手工方式相同 32、收付款凭证必须有的科目(B)

相关文档
最新文档