学号:26
课程设计
题目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。具体的需要传递属性的产生式的属性文法如下表所示:
【关键字】教学 《F o r循环语句》教学设计 池州市第八中学杜亦麟 课题 For循环语句 教学内容 粤教版信息技术(选修1)《算法与程序设计》第二章《程序设计根底》第四节《程序的循环结构》第一小节《For循环语句》 教学目标 知识与能力: 1.理解循环结构的基本思想及For语句的执行过程。 2.培养和提高学生逻辑思维能力,使其可以独立完成简单循环结构算法的设计。 3.能够利用For循环语句实现循环结构,解决实际问题。 过程与方法: 1.通过简单的数学问题的分析、讲解,让学生掌握For循环语句语法知识,及其执行原理。 2.以任务驱动,学生分组合作探究的方式,进一步让学生理解For循环语句的基本思想,同时培养学生自主探究和合作学习的能力。 3.通过自评和互评活动,培养学生语言表达能力和归纳总结能力。 情感态度与价值观: 1.提高学生学习兴趣,培养学习的主动性和探究性。 2.培养学生团结协作精神,体验成功的快乐。 教学重点 1.掌握For循环语句的格式和功能; 2.理解For循环语句的执行过程。 教学难点 控制循环的条件、确定循环体的内容 教材分析 第二章是程序设计根底,也是全书的根底。它沿着分析问题、设计算法、编写程序等运用计算机解决问题之路,开始学习如何使用VB程序设计编写程序解决问题。本节课的主要内容For语句的基本格式、执行过程及语句的实际应用。又是本章的重点和难点内容。而循环结构是程序设计的三种基本结构之一,其作用是使一段程序反复执行。For循环语句在程序设计中频繁出现,也是三种结构中较难的一种,因此,学好本节课非常重要,本节课的学习会使学生对算法有一个更深刻的理解,为以后的程序设计打下一个良好的根底,也可以培养学生的创新能力、分析问题和解决问题的能力以及探究精神。 学生分析 1、知识储备根底 在前面的学习中,同学们已经初步掌握了VB编程环境和VB程序的运行方法及程序设计的根底知识,学习了顺序结构和分支结构的程序执行流程和编程。具备一定的算法根底和具有一定的比较、归纳能力。
目录 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翻译过程
第33、34课时for循环的嵌套 实验题一: 1、下面有关for循环的正确描述是: D A) for循环只能用于循环次数已经确定的情况 B) for循环是先执行循环体语句,后判断表达式 C) 在for循环中,不能用break语句跳出循环体 D) for循环的循环体语句中, 可以包含多条语句,但必须用花括号括起来 2、对for(表达式1;;表达式3)可理解为:B A) for(表达式1; 0;表达式3) B) for(表达式1;1;表达式3) C) for(表达式1;表达式1;表达式3) D) for(表达式1;表达式3;表达式3) 3、若i为整型变量,则以下循环执行次数是:B for (i=2;2==0;) printf("%d",i-- ); A)无限次B) 0次 C) 1 次 D) 2次 4、以下for循环的执行次数是:C for (x=0,y=0; (y=123)&&(x<4); x++) ; A)是无限循环 B)循环次数不定C)执行4次 D)执行3次
成立,x++x=2 第三次:(y=123)&&(2<4)成立,x++x=3 第四次:(y=123)&&(3<4)成立,x++x=4 第五次:(y=123)&&(4<4)不成立,退出循环。 5、以下不是无限循环的语句为:A A) for (y=0,x=1;x > ++y;x =i++) i=x ; B) for (;1; x++=i); C) while (1) {x ++;} D) for(i=10;1 ;i--) sum+=i; 6、下面程序段的运行结果是:C for (y=1;y<10;) y=((x=3* y,x+1),x-1); printf ("x=%d,y=%d",x,y); A)x=27,y=27 B)x=12,y=13 C)x=15,y=14 D)x=y=27 第一次:1<10为真,x=3,x+1=3+1=4, y=(4,x-1) y=(4,2)=2 第二次: 2<10为真, x=3*2=6,7 y=(7,x-1)=(7,5) y=5 第三次:5<10为真,x=3*5=15 16 y=(16,x-1)=(16,14) y=14 第四次: 14<10为假,
课程设计任务书 学生姓名:辛波专业班级:计算机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日
基本算法语句 【基础知识】 1.输入、输出语句 输入语句INPUT 对应框图中表示输入的平行四边形框 输出语句PRINT 对应框图中表示输出的平行四边形框 2.赋值语句 格式为变量=表达式,对应框图中表示赋值的矩形框 3.条件语句一般有两种:IF—THEN语句;IF—THEN—ELSE语句.语句格式及对应框图如下.(1)IF—THEN—ELSE格式 当计算机执行这种形式的条件语句时,首先对IF后的条件进行判断,如果条件符合,就执行THEN后的语句体1,否则执行ELSE后的语句体2. (2)IF—THEN格式 4.算法中的循环结构是由循环语句来实现的.对应于程序框图中的两种循环结构,一般程序设计语言中有当型(WHILE型)和直到型(UNTIL型)两种语句结构,即WHILE语句和UNTIL语句. (1)WHILE语句 (2)UNTIL语句 5. ......................................巧是把题目中的算法语言依照上面的对应关系翻译成框图。 .....解决算法语言试题的基本技 ..温馨提示: 【例题分析】
考点一 输入、输出和赋值语句的应用 例1 分别写出下列语句描述的算法的输出结果: (1) a =5 b =3 c =(a +b )/2 d =c*c PRINT “d =”;d (2) a =1 b =2 c =a +b b =a +c -b PRINT “a =,b =,c =”;a ,b ,c 【解答】 (1)∵a =5,b =3,c =a +b 2 =4, ∴d =c 2=16,即输出d =16. (2)∵a =1,b =2,c =a +b ,∴c =3,又∵b =a +c -b , 即b =1+3-2=2,∴a =1,b =2,c =3, 即输出a =1,b =2,c =3. 练习1 请写出下面运算输出的结果__________. a =10 b =20 c =30 a = b b =c c =a PRINT “a =,b =,c =”;a ,b ,c 【解答】经过语句a =b ,b =c 后,b 的值赋给a ,c 的值赋给b ,即a =20,b =30,再经过语句c =a 后,a 的当前值20赋给c ,∴c =20.故输出结果a =20,b =30,c =20. 考点二 条件语句的应用 例2 阅读下面的程序,当分别输入x =2,x =1,x =0时,输出的y 值分别为________、________、________. INPUT “x =”;x IF x>1 THEN y =1/(x -1) ELSE IF x =1 THEN y =x^2 ELSE y =x^2+1/(x -1) END IF END IF PRINT y END 【解答】计算机执行这种形式的条件语句时,是首先对IF 后的条件进行判断,如果条件符合,就执行THEN 后的语句;如果条件不符合,则直接结束该条件语句,转而执行其他语句,嵌套时注意内外分层,避免逻辑混乱.
for循环语句 for循环语句也称为计次循环语句,一般用于循环次数已知的情况。例如,要计算1到100之间所有整数的和,就可以使用for循环语句。具体代码如下: int sum=0; for(int i=1;i<=100;i++){ sum+=i; } System.out.println("1到100之间所有整数的和是: "+sum); 在对for循环语句有一个初步的认识后,下面给出for循环语句的语法格式。for循环语句的语法格式如下: for(初始化语句;循环条件;迭代语句){ 语句序列 } 初始化语句:为循环变量赋初始值的语句,该语句在整个循环语句中只执行一次。 循环条件:决定是否进行循环的表达式,其结果为boolean类型,也就是其结果只能是true或false。 迭代语句:用于改变循环变量的值的语句。 语句序列:也就是循环体,在循环条件的结果为true时,重复执行。 说明: for循环语句执行的过程是:先执行为循环变量赋初始值的语句~然后判断循环条件~如果循环条件的结果为true~则执行一次循环体~否则直接退出循环~最
后执行迭代语句~改变循环变量的值~至此完成一次循环,接下来将进行下一次循环~直到循环条件的结果为false~才结束循环。 for循环语句的执行过程如图1所示。 初始化语句 N循环条件 Yfor(初始化语句;循环条件;迭代语句) 语句序列(循环体) 语句序列(循环体) 执行迭代语句 改变循环变量的值 N-S结构化流程图 传统流程图 图1 for循环语句的执行流程图 注意: 在使用for语句时~一定要保证循环可以正常结束~也就是必须保证循环条件的结果存在为false的情况~否则循环体将无休止的执行下去~从而形成死循环。例如~下面的循环语句就会造成死循环~原因是i永远大于等于1。 for(int i=1;i>=1;i++){ System.out.println(i); } 为了使读者更好的理解for语句,下面将以一个具体的实例介绍for语句的应用。本实例主要实现计算100以内所有奇数的和。具体步骤如下。 (1)选择“开始”/“所有程序”/“附件”/“记事本”命令,打开一个无标题的记事本文档。
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 语法分析方法描述: 简单优先分析法是按照文法符号(终极符和非终极符)的优先关系确定句柄的。 基本思想可设计如下,首先根据已知优先文法构造相应优先关系矩阵,并将