课程设计任务书
学生姓名:专业班级:
指导教师:工作单位:
题目: FOR循环语句的翻译程序设计(LL(1)法、输出三地址表示)初始条件:
理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体
要求)
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:
1 系统描述(问题域描述);
2 文法及属性文法的描述;
3 语法分析方法描述及语法分析表设计;
4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;
5 编译系统的概要设计;
6 详细的算法描述(流程图或伪代码);
7 软件的测试方法和测试结果;
8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);
9 参考文献(按公开发表的规范书写)。
时间安排:
设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名:年月日
系主任(或责任教师)签名:年月日
FOR循环语句的翻译程序设计
——LL(1)法、输出三地址1.系统描述
1.1问题描述
用LL(1)法设计、编制、调试一个FOR(表达式1;表达式2;表达式3)〈赋值语句〉的语法及语义分析程序,输出三地址代码。
1.2功能描述
(1)能对for循环语句做词法分析,并将其中的某些语句做预处理,如i++转换为i=i+1等。
(2)能依据给定的LL(1)文法判断输入串是否符合LL(1)文法
(3)给出输入串的LL(1)分析过程
(4)完成对语句中控制变量赋值语句,控制条件语句以及控制变量变换语句的翻译
(5)完成对赋值语句包括复杂语句的翻译
(6)能够对三个表达式缺少一个或多个的情况下进行翻译
(7)用翻译后的语句以三地址代码的中间代码形式正确的表达for循环的执行流程。
2.文法及属性文法的描述
2.1文法的语言描述
(0)A->for(C;C;C){Y} (“}Y{)C;C;C(for”)
(1)Y->i=E; (“;E=i”)
(2)C->iD (“Di”)
(3)C-> (“”)
(4)D->=E (“E=”)
(5)D-> (6)D->>E (“E>”) (7)E->LM (“ML”) (8)M->+LM (“ML+”) (9)M->-LM (“ML-“) (10)M->ε(“”) (11)L->NP (“PN”) (12)P->*NP (“PN*”) (13)P->/NP (“PN/”) (14)P->ε(“”) (15)N->i (“i”) (i表示标识符或常数) (16)N->(E) (“)E(“) (17)D-><=E (“E=<”) (18)D->>=E (“E=>”) 2.2属性文法的描述 2.2.1FOR语句 for(C1 C2 C3) n C1 n+1 goto n+3 n+2 C3 n+3 if C2==true goto Y.start n+4 goto Y.end+2 Y.start ...................//赋值语句的开始 ...... ................... Y.end ...................//赋值语句结束 Y.end+1 goto n+2 Y.end+2 //跳出循环体后第一条语句 2.2.2表达式和赋值语句 Y->i=E;(C->i=E;) { i.value=E.V alue } E->E1 op E2 (op: +,-,*,/,>,>=,<或<=) { E.place = newtemp; //生成新的变量 E.value =E1.value op E2.value } N->(E) { N.value=E.value } N->i { N.value=i.value } 3 语法分析方法描述及语法分析表设计 3.1LL(1)文法及预测分析法的描述 LL(1):第1个L表明自顶向下分析是从左向右扫描输入串,第2个L表明分析过程中将用最左推导,1表明只需向右看一个符号便可决定如何推导即选择哪个产生式(规则)进行推导。从文法的开始符号出发企图推导出与输入的单词串完全相匹配的句子,若输入串是文法给定的句子,则必能推出,反之必然出错。 LL(1)优点:实现方法简单、直观,便于手工构造或自动生成语法分析器。文法很容易写出。 LL(1)缺点:对文法有一定得限制,要求推导过程中紧跟在飞终结符右边可能出现的终结符集不相交,要求文法产生式中不能含有左公共因子和左递归。但并不是所有文法的左公共因子都能在有限的步骤内替换成无左公共因子的文法。另外在做语法制导翻译时中间代码的输出方案相对于LR法比较复杂。LR分析法的句柄即体现了算符的优先级,出现句柄即做相应的归约动作,中间代码很容易写出,实现很简单。LL(1)是做自顶向下推导,因此设计LL(1)的语法制导翻译输出中间代码很需要技巧,涉及到了判断符号的优先级。 3.2预测分析表的构造 先求出每个产生式的select集,以产生式左侧非终结符为纵轴,以终结符(包括#)为横轴作预测分析表,在非终结符与其select集中元素对应的单元格中填上相应产生式的右部或其序号,没有则填-1。 单元格中数字表示选用第几个产生式,-1表示出错,num代表常数,i代表标识符。 4. 中间代码形式的描述及中间代码序列的结构设计 4.1三地址代码描述 把表达式及各种语句表示成一组三元式。每个三元式3个组成部分是:酸腐op,第 一运算对象ARG1,和第二运算对象ARG2.例如a:=b*c+b*d的表示为: (1)(* b, c) (2)(* b, d) (3)(+ (1), (2)) (4)(:= (3), a) 与后缀式不同,三地址码含有对中间计算结果的显式引用,比如三元式(1)表示的是b*c的结果。三元式(3)中的(1)和(2)分别表示第1个三元式和第2个三元式的结果。 对于一目算符op,只需选用一个运算对象,不妨规定只用ARG1.至于多目算符,可用若干个相继的三元式表示。 三地址代码一般形式:x:=y op z表示为 <1>y op z <2>x:=<1> 4.2中间代码序列的结构设计 以for(i=0;i<10;i++){i=i+2;}为例,三地址中间代码生成序列如下: <1>i=0 <2>goto <4> <3>i=i+1 <4>i<10 <5>if <4> goto <7> <6>goto <10> <7>i+2 <8>i=<7> <9>goto <3> <10> 三地址代码结构: <1>控制变量赋值 <2>跳转到判断语句 <3>控制变量更改 <4>判断语句 <5>若成立跳转到赋值语句循环体 <6>不成立则跳转到循环结束 <7> 赋值语句 跳转至控制变量更改语句 循环结束语句 由于临时变量的个数是未知的,所以在语义分析的过程中需要保存临时变量的个数,以便保证下一条语句序号及循环出口的正确。 5.编译系统的概要设计 5.1LL(1)文法的设计 (1)文法的设计需要合理,使之符合LL(1)文法的要求,尽量避免产生式右部首部有交集, 而某些文法的左公共因子无法完全消除 (2)文法应该考虑到循环条件的三个产生式中有一个或多个为空的情况下的循环流程(部分语言如C语言甚至允许三个条件都为空,第一个条件空,则需要循环体之前的语句中对讯黄控制变量进行赋值;第二个条件为空,则循环会无限执行下去,即进入死循环;第三个条件为空,则在循环体中对控制变量进行改变)。 (3)对于循环体中的赋值语句,不仅仅有形如i=a+b的简单语句,还应考虑更复杂的复合赋值语句,这时就要进行操作符的优先级分析。 5.2语法及语义分析 有LL(1)文法写出预测分析表,由此可以用预测分析法对输入串进行分析。当分析栈栈顶为非终结符时,通过查表,将非终结符出栈,并将表中产生式右部逆序进栈,若对应单元为空或为错误标记,则出错;当栈顶为终结符时,若与当前输入符号相同,则栈顶出栈,输入串指针后移,若不同则出错。一直分析下去,知道最后栈中只剩下#并且输入串也只有一个#,则该输入串可以被指定的LL(1)文法所识别,反之则否。 对赋值语句的翻译。主要是对操作符的优先级的比较,使用算符优先分析法。死机一个操作符栈和一个操作数栈,当前操作符的优先级小于或者等于当前输入符号时,输入符号进操作符栈,若大于,则操作符栈顶出栈,操作数栈两次出栈(二目运算符)进行运算,并将结果(中间变量)进操作数栈,依此分析。 6.详细的算法描述(伪代码描述) main() //主函数 { lexicalAnalyze(); //词法分析(预处理 parseAnalyze((); //语法预测分析 semanticsOutput(); //语义输出 } 部分方法的实现: lexicalAnalyze(){ //输入串的词法分析 string input[]; string tmp=getText(); //读取文件到临时字符串 if(tmp.end!=’#’) tmp.end=’#’; //在字符串末尾添加’#’ do{ curString=getWord(tmp); //从字符串中获取有效单词 if(curString==”“) tmpPointer++;continue; //去除无效空格,并移动扫描指针curString->input[]; //将单词存入字符串数组 if((input[n-1]=="<"||input[n-1]==">")&&input[n]=="=") //组合<=和>= input[n-1].append(input[n]); if((input[n-1]=="+"||input[n-1]=="-")&&input[n]==input[n-1]) //转换++和-- i=i±1->input[]; if((input[n-2]=="+"||input[n-2]=="-")&&input[n-1]=="=") //转换+=和-= i=i±n->input[]; } parseAnalyze(){ //语法分析 statck ana(); ana.push(“#”); //”#”和”A”进分析栈 ana.push(“A”); if(input[]==”for”) { if(ana.getTop==input[]) { input_pointr++; //输入串扫描指针右移 ana.pop(); //栈顶出栈 } if(ana.getTop==”A”) { ana.pop; ana.reversePush(“for(C;C;C){Y}”); //产生式右部逆序入栈} } if(input[]==”i”) { if(ana.getTop==input[]) { ... } if(ana.getTop==”C”) { ... } if(ana.getTop==”Y”) { ... } ...... } ...... if(input[]==”#”) //匹配成功 { if(ana.getTop==input[]) cout<<”Match successful!”; } else cout<<”Match fail!”; //匹配失败 } constProcess() //常数处理,字符串共有i个字符 { for(dotCount=0;dotCount if(curString[dotCount]==’.’) return dotCount;else return -1 ; for(eCount=0;eCount if(curString[eCount]==’e’) return eCount;else return -1; if(dotCount==-1&&eCount==-1) //纯整数的情况 { for(count=0;count parseInt+=(curString[count]-30H)*pow(10.0,i-1-count); //ASCII转为整数 } else if(dotCount!=-1&&eCount==-1) //纯小数的情况 { for(leftCount=0;leftCount parseInt+=(curString[leftCout]=30H)*pow(10.0,dotCount-1-leftCount); for(rightCount=dotCount+1;rightCount parseDecimal+=(curString[leftCout]=30H)*pow(10.0,dotCount-reghtCount); parseBase=parseInt+parseDecimal; } else //含有e的情况 { if(k!=-1) //e前面是小数 { for(leftCount=0;leftCount parseInt+=(curString[leftCout]=30H)*pow(10.0,dotCount-1-leftCount); for(rightCount=dotCount+1;rightCount parseDecimal+=(curString[leftCout]=30H)*pow(10.0,dotCount-reghtCount); parseBase=paseInt+parseDecimal; } else //e前面是整数 { for(count=0;count pareseBase+=(curString[count]-30H)*pow(10.0,eCount-1-count); } for(count=eCount+1;count paresePower+=(curString[count]-30H)*pow(i-1-count); parseTotal=parseBase*pow(10.0,parsePower); } } semanticsOutput //执行语义动作 { /*对于赋值语句和布尔表达式,调用词法分析程序分析并同步记录临时变量的个数*/ } 7.软件的测试方法和测试结果 在文本文件中输入for(i=0;i<=10;i++){i+=2;} 词法分析结果(转换过双目运算符): 语法分析过程: 三地址代码输出结果:将循环条件的第三个产生式删除后的输出结果: 8.研制报告 8.1研制过程 本实验在文法的构造方面遇到了困难,LL(1)对文法有一定的限制:不能含有左公共因子和左递归,表现在产生的select集不相交,而又要能表示比较宽泛的for循环的格式,需要用到一些空产生式,这又增加了select集相交的可能性,所有构造LL(1)遇到了一些困难,不过最终还是构造出了符合LL(1)文法要求的文法。本来想对赋值语句的语法分析时也用LL(1)方法,但是它并不适合做这一工作,最后还是交给了更适合的算符优先分析法。本实验重要的是预测分析表的构造以及语义动作的书写,LL(1)文法相对来说构造比较简单,但语义动作比较困难,可以在语法分析的过程中一起写出来。 8.2设计的特点和不足 本设计比较大的特点是在词法分析的过程中可以对双目运算符(如++,--,±=等)做预先处理,将它们转换成一般的算术表达式,这样便于后期语法分析;考虑到了第三个表达式为空的情况,此时控制变量的改变是在循环体中进行的;另外还增加了常数处理的模块,包括整数,小数和包含e的指数的处理。 本、设计的不足:本设计并没有考虑第一和第二个表达式为空的情况,第一个表达式为空时涉及到了for循环前面的语句,在此可以不加讨论;第二个表达式为空时可以在语义分析时将它替换成1,即一直成立,这样在语义上也是正确的;文法的限制过大,循环体中只能有一个赋值语句,并且只有一层循环,没有考虑循环的嵌套。 8.3收获和体会 此次课程设计综合了词法分析、语法分析(LL(1)预测分析法和算符优先分析法)、语义分析(语法制导翻译)的知识内容,设计时需要全盘考虑它们之间的整合协作。在书写文法的时候原本写的文法很简单,寥寥几句,但是无法全面地表达出for循环语句的语言结构,遗漏的地方有不少。文法太复杂的话处理左递归时比较麻烦,而且有时并不能完全消除左递归。最后采用了折中的办法,在复杂文法的基础上将表达式进行统一而不是原来的三个。文法本来想考虑加入+=、++等双目运算符,但这样会大大影响文 法的复杂度和语法分析时判断的正确性,所以在词法分析的阶段就预先将双目运算符转换成了单目运算符。 在语法分析时,由于我用的是字符串栈,当查找预测分析表后,产生式右部逆序进栈,然后取栈顶与输入符号比较时,取的不是栈顶,而是栈顶字符串的最后一个字符,这样增加了分析的难度,而且双目运算符以及多字符符号也会产生干扰:如>=逆序进栈后是=<,取栈顶末尾字符即<,这里的双目运算符就被错误的拆成了两个单目运算符;多字符符号如for也会有类似问题。我用的方法是每次取栈顶时,首先先对栈顶字符串进行词法分析,将它拆成一个个有意义的单词后依次进栈,这样就解决了上述问题,不过这也增加了计算的开销。 自己写程序在命名规范上仍然存在不足,想到需要什么变量就随便起了个名字,没有起到很好的表达意义的作用。程序的总体大局观不够,没有做到全盘考虑,部分重用代码可以写成单独的函数,减少空间开销。在设计时,应该去学习新的思想和方法,提高对语言本身结构的认识,了解程序执行代码到底都做了什么,而不仅仅是去了解执行的结果。这样才能通过一次次的程序设计提高自己对一种语言的根本认识。 9.参考文献 [1] 张素琴,吕映芝,蒋维杜,戴桂兰.编译原理(第2版).清华大学出版社.2002.06 [2] 闵联营,何克右.C++程序设计教程(第二版).武汉理工大学出版社.2005.07 [3] 李普曼(Stanley B.Lippman) 等.C++ Primer中文版(第4版).人民邮电出版社.2008.07 本科生课程设计成绩评定表 班级:姓名:学号: 及格(60-69分)、60分以下为不及格 指导教师签名: 200 年月日 【关键字】教学 《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日 for循环结构程序设计教案 课程名称:C语言程序设计 本课内容:循环结构程序设计——for 语句 一、教学目标 1、领会程序设计中构成循环的方法 2 、掌握for 语句的用法 二、教学重点 1、for 语句的一般格式 2、for语句的执行过程 三、教学难点 for 语句的综合利用 四、教学方法 1、课堂讲授,给出主要内容。 2、讲解其基本格式。 3、应用示例,结合相应的知识讲解。 4、执行过程用流程图和例题用(演示法和讲解法)进行详细说明。 五、教学过程 (一)导入 1、复习前两节课我们学习的两种循环语句——while语句和do~while 语句的基本格式和执行过程和特征。 2、给出例子如下: main( ) {int x=1; (表达式1) s=0; while(x<=100) (表达式2) {s=s+x; x=x+1; (表达式3) } printf(“%d”,s); } 分析用while语句来完成的程序,主要完成1到100的累加和,对一个循环程序来说最关键的三个部分:循环变量的赋初值、控制循环条件、循环控制变量的更新。 (二)教学过程 1、写出本节课要介绍的for语句的一般格式 for(表达式1;表达式2;表达式3) 循环体; 2、掌握:基本格式和各个表达式的功能和特征 强调:for语句中的所有表达式和while语句中的表达式所完成的功能是相同的。 表达式1:循环变量的初始化(初始值) 表达式2:循环条件(终止值) 表达式3:循环变量自增 3、for语句的执行过程 for ( int i = 0 ; i < 10 ; i++) { printf("我最棒"); } 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 语法分析方法描述: 简单优先分析法是按照文法符号(终极符和非终极符)的优先关系确定句柄的。 基本思想可设计如下,首先根据已知优先文法构造相应优先关系矩阵,并将【教学】For循环语句
FOR循环语句的翻译程序设计
c语言for循环的嵌套题(含解析和答案)
for循环语句的翻译
C语言for循环语句教案
for循环语句
WHILE循环语句的翻译程序设计(简单优先法、输出四元式)