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)表两个部分,它们都可以用二维数组表示。
分析栈,包括文法符号栈和相应的状态栈。它们均是先进后出栈。
分析器的动作由栈顶状态和当前输入符号所决定。 LR 分析器工作过程示意图如图所示:
其中SP 为栈顶指针,S[i]为状态栈,X[i]为文法符号栈。状态转换表内容按关系GOTO[Si,X]=Sj 确定,改关系式是指当前栈顶状态为Si 遇到当前文法符号为X 时应转向状态Sj 。X 为终结符或非终结符。
ACTION[Si,a]规定了栈顶状态为Sj 时遇到输入符号c[i]应该执行的动作。动作有以下四种可能:
移进:当Sj=GOTO[Si ,a]成立,则把Sj 移入到文法符号栈。其中i ,j 表示状态号。
规约:当在栈顶形成句柄为b 时,则用b 归约为相应的非终结符A ,即当文法中有A->b 的产生式,而b 的长度为r ,则从状态栈和文法符号栈中自栈顶向下去掉r 个符号。并把A 移入文法符号栈内,再把满足Sj=GOTO[Si ,A]的状态移进状态栈,其中Si 为修改指针后的栈顶状态。
接受acc :当归约到文法符号栈中只剩下文法的开始符号S 时,并且输入符号串已结束即当前输入符是‘#’,则为分析成功。
报错:当遇到状态栈顶为某一状态下出现不该遇到的文法符号时,则报错,说明输入串不是该分发能接受的句子。
3.2语法分析表设计
3.2.1构造文法的DFA
I0:S ’->.S
S->.do{E;}while(B)
I1:S ’->S.
I2:S->do.{E;}while(B) I3:S->do{.E;}while(B) E->.I= I op I I->.id
输入串XXX …#
总控程序 ACTION 表
GOTO 表
Sn . . S1 S0 Xn . . X1 #
SP
输出
I4:S->do{E.;}while(B) I5:E->I . =I op I I6:I->id.
I7:S->do{E;.}while(B) I8:E->I=.I op I I->.id
I9:S->do{E;}.while(B) I10:E->I = I. op I
I11:S->do{E;}while.(B) I12:E->I=I op .I I=.id
I13:S->do{E;}while(.B) B->.I rop I I->.id
I14:E->I=I op I.
I15:S->do{E;}while(B.) I16:B->I .rop I
I17:S->do{E;}while(B). I18:B->I rop .I I19:B->IropI.
3.2.2然后写出LR 分析表:
状态
ACTION
GOTO Do { = ; } While ( ) Rop Op Id #
S B E
I 0 S2
1 1 acc
2 S3
I1
I0
I19
I4
I13
I9
I14
I15
I12
I6
I10
I8
I2
I7
I16
I11
I5
I3
I17
I18
3 S6
4 5
4 S7
5 S8
6 R4 R4 R4 R4 R4 R4 R4 R4 R4 R4 R4 R4
7 S9
8 S6 10
9 S11
10 S12
11 S13
12 S14
13 S6 15 16
14 R3 R3 R3 R3 R3 R3 R3 R3 R3 R3 R3 R3
15 S17
16 S18
17 R1 R1 R1 R1 R1 R1 R1 R1 R1 R1 R1 R1
18 S6 19
19 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2
4.中间代码形式的描述及中间代码序列的结构设计
4.1中间代码形式的描述
在本程序中作用三地址码表示中间代码
三地址码的表达形式为:
标号结果:= 操作数1 操作符操作数2
常见三地址表示举例:
赋值语句t1 := a op b,a:= b
条件转移if true goto Label
无条件转移goto Label
4.2中间代码序列的结构设计
本程序用标号来表示程序的跳转过程,示例如下
100 赋值语句
101赋值语句
102 条件跳转语句
103 无条件转移语句
…
5.编译系统的概要设计
本编译程序的结构图如下:
源程序(do-while 语句)
词法分析(Lex函数)
语法语义分析(Analyze函数)
代码生成程序
程序输出
说明:源程序(do-while语句)通过控制台输入。然后通过Lex函数对输入的源程序进行分析后,将分析结果以二元组的方式输出到控制台。接下来通过调用语法语义分析函数来完成对分析得到的单词进行文法句子的识别,并用进行语法制导翻译,完成属性文法定义规定的相关语义动作。本编译程序最后完成的三地址码输出是通过中间文件间接输出到控制台上的。在执行Analyze函数的过程中,同时运用ofstream文件流将三地址码输出到一个ASCII码的txt类型文件中,最后从该文件中读出最终处理的三地址码输出至控制台。
6.详细的算法描述(流程图或伪代码)
6.1词法分析
词法分析程序要做的工作是:从源程序的第一个字符开始,顺序读字符,一次读一个,根据所读进的字符识别各类单词,同时去掉源程序中的空白和注释。
词法分析检查的错误主要是挑出源程序中出现的非法符号。下面为本程序中所用来进行词法分析的伪代码:
输入字符;
If(字符是字母)
{
查找关键词表;
If(是关键字do或者while)识别关键词;
Else 判断为标识符;
}
Else if(字符是数字)获取整个数;
Else if(运算符)
{
If(是算术运算符)识别算术运算符;
Else 识别为关系运算符;
}
Else 标识为其他类型
以下附部分源码:
int Lex(char InStr[20][8],int InStrLen)
{//0关键字,1标识符2数字3界符4算符5其他char strsrc[BUFFURSIZE],strdst[8],ch;
int strcount=0,strLength,i=0;
cout<<"Please input the do-while statement:"< gets(strsrc); strLength=strlen(strsrc); cout< while(strcount { while(strsrc[strcount]==' ') strcount++; ch=strsrc[strcount]; if(Alpha(ch)) { i=0; do strdst[i++]=strsrc[strcount++]; while((Alpha(strsrc[strcount])||Digit(strsrc[strcount]))&&(strcount strdst[i]='\0'; if(!strcmp(strdst,"while")) cout< else cout< for(int k=0;strdst[k]!='\0';k++) { InStr[InStrLen][k]=strdst[k]; } InStr[InStrLen++][k]='\0'; } else if(Digit(ch)) { i=0; do strdst[i++]=strsrc[strcount++]; while(Digit(strsrc[strcount])&&(strcount strdst[i]='\0'; cout< for(int k=0;strdst[k]!='\0';k++) { InStr[InStrLen][k]=strdst[k]; } InStr[InStrLen++][k]='\0'; } else if(Oper(ch)) { i=0;strdst[i]=ch;strdst[i+1]='\0'; if(!strcmp(strdst,";")||!strcmp(strdst,"(")||!strcmp(strdst,")")||!strcmp(strdst,"{")||!st rcmp(strdst,"}")) cout< else cout< for(int k=0;strdst[k]!='\0';k++) { InStr[InStrLen][k]=strdst[k]; } InStr[InStrLen++][k]='\0'; strcount++; } else { cout< isillegal=1; cout<<"isillegal="< cout<<"not while statement "< strcount++; } } InStr[InStrLen++][0]='#'; cout<<"inputed string"< for(int j=0;j cout<<" "< cout<<"grammer analysis"<<'\n'; return InStrLen; } 6.2语法分析 流程图如下,具本处理过程,请参见本文档3.1小节 此处附上语法语义分析函数 void Analyze(State state) { int row=0,col=0,numchange=0; cout<<" Procedure"< "< strcpy(next,state.InStr[state.CurInstr]); ropOrOp(next); row=state.stkState[state.CurState]; col=Index(next); numchange=table[row][col]; 输入串XXX …# 总控程序 ACTION 表 GOTO 表 Sn . . S1 S0 Xn . . X1 # SP 输出 ofstream outfile("do_while.txt"); while(strcmp(state.stkSymbol[state.CurSymbol],"S")!=0&&numchange!=20) { if(numchange==0){isillegal=1;break;} numchange=Action(state,numchange,outfile); } if(isillegal==0) { cout< state.showState(); cout< } cout<<"processing semantic analysis"< } 关键的状态转移函数ACTION和GOTO int Action(State &state,int actionnum,ofstream &outfile) { int row=0,col=0,numchange=0; int choice=0; int ct=100; int m=0; if(actionnum>=1&&actionnum<=18)choice=1; else choice =actionnum; switch(choice) { case 0: { isillegal=1; cout<<"isillegal="< break; } case 1://移进项目 { cout< state.showState(); cout< state.CurState++; s tate.stkState[state.CurState]=actionnum; state.CurSymbol++; strcpy(state.stkSymbol[state.CurSymbol],state.InStr[state.CurInstr]); strcpy(next,state.InStr[state.CurInstr]);ropOrOp(next); row=state.stkState[state.CurState]; col=Index(next); numchange=table[row][col]; break; } case 20://接收 { cout< state.showState(); cout< break; } case 21://r1 S-->while(B){E;} { cout< state.showState(); cout< for(int i=9;i>0;i--) {state.stkState[state.CurState--]=0;} for(i=9-1;i>=0;i--) { strcpy(B[i],state.stkSymbol[state.CurSymbol]); strcpy(state.stkSymbol[state.CurSymbol--],""); } outfile<<"B.false: "<<'\n'; state.CurSymbol++; strcpy(state.stkSymbol[state.CurSymbol],"S"); //B-->IropI strcpy(next,state.stkSymbol[state.CurSymbol]);ropOrOp(next); row=state.stkState[state.CurState]; col=Index(next); numchange=table[row][col]; numchange=Goto(state,numchange); break; } case 22://r2 B-->IropI { cnt=0; cout< cout< for(int i=3;i>0;i--) {state.stkState[state.CurState--]=0;} for(i=3-1;i>=0;i--) { strcpy(B[i],state.stkSymbol[state.CurSymbol]); strcpy(state.stkSymbol[state.CurSymbol--],""); } outfile<<"102 t1:="< outfile<<"103 if t1.val=true"<<" goto 100"< outfile<<"104 goto 105"< state.CurSymbol++; strcpy(state.stkSymbol[state.CurSymbol],"B"); //归约B-->IropI strcpy(next,state.stkSymbol[state.CurSymbol]);ropOrOp(next); row=state.stkState[state.CurState]; col=Index(next); numchange=table[row][col]; numchange=Goto(state,numchange);break; } case 23://r3 E-->I=IopI { cnt=0; cout< state.showState(); cout< for(int i=5;i>0;i--) {state.stkState[state.CurState--]=0;} for(i=5-1;i>=0;i--) { strcpy(E[i],state.stkSymbol[state.CurSymbol]); strcpy(state.stkSymbol[state.CurSymbol--],""); } outfile<<"100 "<<"t1:="< outfile<<"101 "< state.CurSymbol++; strcpy(state.stkSymbol[state.CurSymbol],"E"); strcpy(next,state.stkSymbol[state.CurSymbol]);ropOrOp(next); row=state.stkState[state.CurState]; col=Index(next); numchange=table[row][col]; numchange=Goto(state,numchange);break; } case 24://r4归约I-->id { cout< state.showState(); cout< state.stkState[state.CurState--]=0; strcpy(I[cnt++],state.stkSymbol[state.CurSymbol]);//{I.value=id.value} strcpy(state.stkSymbol[state.CurSymbol],"I"); //归约I-->id strcpy(next,state.stkSymbol[state.CurSymbol]);ropOrOp(next); row=state.stkState[state.CurState]; col=Index(next); numchange=table[row][col]; numchange=Goto(state,numchange);break; } } return numchange; } int Goto(State &state,int gotonum) { int row=0,col=0,numchange=0; cout< state.CurState++; state.stkState[state.CurState]=gotonum; strcpy(next,state.InStr[state.CurInstr]); ropOrOp(next); row=state.stkState[state.CurState]; col=Index(next); return table[row][col]; } 7.软件的测试方法和测试结果 (1)运行程序,显示如下程序界面 (2)按照提示输入合法的do-while语句 Do{a=b+c;}while(a (3)按enter确定输入完毕,得到词法分析结果,显示如下: 并且最后一行提示了经过词法分析后合法的待输入串在栈中的存储情况。 (4)继续确定,可以看见输入的句子的按LR方法的详细处理过程。结果显示如下: 由此可以看见在用LR方法识别d0-while句子的时候,状态栈,符号栈以及待输入串的详细变化情况。(说明, 其中21,22,23,24分别表示用第1、2、3、4个产生式进行归约。) (5)继续执行程序,最终出现语义分析结果 8.研制报告 8.1研制过程 本次实验是对do-while语句运用LR分析法进行语法分析,分析的过程中要求运用属性文法和语法制导翻译的相关知识来有效完成对一个合法的do-while 语的语义分析。 做实验如果有一个比较详细的安排和计划,就会使实验进程井井有条。在实验之始,按照实验说明书的要求,对实验进行了模块划分。首先大致分为三个部分,包括词法分析,语法分析和语义分析。因为以前做过词法分析和语法分析的相关实验,所以这部分比较容易。于是精力大部分放在第三个部分语义分析上。首先,根据自己拟定文法,构造出正确的LR分析表,文法虽然只有四个产生式,但经过分析,却产生了多达20个状态。完成了LR分析,接着是确定给定文法的属性文法,以便在语法制导翻译中,根据所给的语义动作,有效完成三地址码的输出。 确定了程序的基本结构和流程,接下来就是编制程序了。模块化的功能函数降低了编制程序的难度,经过不断修改和调试程序,终于成功完成了该实验。 8.2设计评价 本次实验设计能有效识别合法的do-while 语句。根据给定的文法,只要是形如do{E;}while(B)的句子(其中E为赋值表达式,B为布尔表达式),都可以正确得出其LR分析的详细过程,并且做出有效的三地址输出。 在本次实验中,对于数据结构有特殊的要求,需要用到具有先进后出性质的栈结构,但是为了方便本次实验的处理,采用一维数组来模拟栈结构。同时,将状态栈,符号栈,和待输入串放在一个类中,以便可以声明对象直接进行处理。 虽然本次实验成功完成了对do-while语句的语法制导翻译过程,但是还是存在一些缺点。比如,在词法分析过程中,没有对错误的语句输入进行判断,因此只有输入正确的do-while语句,才能完成程序执行。 8.3心得与体会 通过这次为期一周的实验,完成了对do-while语句的翻译过程。这次实验对这半年来所学习的编译原理的相关知识进行了有效应用,尤其是对比较抽象的词法分析,语法分析,语义分析,语法制导翻译等有了更深层次的理解。正因为理论联系实践,我才对编译原理这门课程有了更好的掌握。虽然实验成功了很有成就感,但也发现了自己的一些不足。比如对一些基础知识的理解还不够透彻,对所学的算法还不能够熟练应用。 不管这次实验中有多少跌跌撞撞,但终归是受益匪浅。学习就是不断进步的过程,经过这次的课程设计,我的编程能力和逻辑分析能力得到了锻炼。 9.参考文献 [1]张素琴、吕映芝、蒋维杜、戴桂兰等.编译原理(第二版).清华大学出版社.2005年2月 参考书: [1]何炎祥.编译原理(第二版).华中科技大学出版社.2005年8月 [2]胡伦骏.编译原理(第2版).电子工业出版社.2005年2月 [3]胡元义等.编译原理实践教程.西安电子科技大学出版社.2002年1月[4]钱能著,C++程序设计教程,北京:清华大学出版社,2002.7 课程设计任务书 学生姓名:赵旭林专业班级:计算机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日 2010年经典英语祝福语(带中文翻译) 各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢 wishing you a song in your heart at christmas and blessings all year long. 圣诞之际,祝你心中有首快乐的歌,新年快乐! wishing you peace, joy and happiness through christmas and the coming year. 在圣诞和新年来临之际,祝福你平安、快乐、幸福! a christmas greeting and good wishes to you who is thought about all the year through. have a beautiful christmas and a happy new year. 始终思念你,捎来圣诞佳节最美好的祝福,祝圣诞吉祥,新年如意。 here is wishing you all a merry christmas and a new year bright with joy and success. 祝圣诞快乐,新年充满幸福和成功。 christmas comes but once a year. but when it comes it brings good cheer. 圣诞节一年只有一次,但每次来临都带来喜悦。 a cheery christmas and the new year hold lots of happiness for you! 给你特别的祝福,愿圣诞和新年带给你无边的幸福、如意。LOcALHosT may you have the best christmas ever. 愿你度过最美好的圣诞节! may the joy of christmas be with you throughout the year. 愿圣诞的快乐一年四季常在。 wishing you a sparkling christmas and 衷心祝福来年快乐、幸运! christmas should be a time of banked-up fines, the scent of flowers and wine, good talk, good memories and loyalties renewed. but if all else is lacking - love will do. 圣诞是这样美好的时光:炉火熊熊,花 目录 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翻译过程 课程设计任务书 学生姓名:专业班级: 指导教师:工作单位:计算机科学与技术学院 题目: 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 属性文法的描述 第5章流程控制语句 JavaScript程序是由若干个语句组成的,每一个语句以分号作为结束符。语句可以很简单,也可以很复杂。其中,改变程序正常流程的语句称为控制语句。流程控制语句是用来控制程序中各语句执行顺序的语句,是程序中基本却又非常关键的部分。流程控制语句可以把单个语句组合成有意义的、能完成一定功能的小逻辑模块。本章内容包括: ?顺序控制语句; ?选择控制语句; ?循环控制语句; ?其他流程控制语句。 通过本章学习,读者应该对几种流程控制语句有很深的理解,并可以利用这几种流程控制语句编写简单的程序。 5.1 顺序控制语句 JavaScript语言中,顺序控制语句是最简单的语句。其有如下特点:所有语句按照一定的顺序执行,每一条语句只执行一遍,不重复执行,也没有语句不执行。JavaScript语言中的顺序控制语句包括表达式语句,函数调用语句,空语句和复合语句等。 5.1.1 表达式语句 表达式后面跟一个分号就构成了一个表达式语句。最常见的表达式语句为赋值语句。赋值语句是在一个赋值表达式后跟一个分号形成的,程序中很多计算都由赋值语句完成。 【示例5-1】演示几个表达式语句。其代码如下所示。 var m=4; //把4赋给变量m var n=”hello world”; //把字符串hello world赋值给n i=m+n; //把变量m和n的和赋值给变量i 实际上,任何表达式都可以加上分号而成为语句。 【示例5-2】变量i自增1。 i++; //变量i的值加1 注意:有些语句写法虽然是合法的,但是由于其没有保留计算结果,因而并没有实际意义。如以下代码: a-b; i++-1; 30条中英文互译经典语录 1、If you don't know what you want, you won't know when you've gotten it.如果你不知道自己想要的是什么,那么当你拥有了也会茫然不知。 2、We all have stories we won't ever tell.~~~ 我们都有一些不会讲出来的故事。 3、Hold the head of the lonely, put proud expression-brave say: I not bad at all. 昂起孤单的头,摆着骄傲的表情,勇敢的说:我一点都不赖。 4.Accept your life if you can't change it. Change your life if you can't accept it. 如果你无法改变你的生活,就接受它。如果你接受不了你的生活,就改变它。 5.There is a kind of sadness that a cat can't reach its tail.有一种悲伤是摸不着自己的尾巴。 6.Life is a chain of moments of enjoyment;not only about survival.生活是一串串的快乐时光;我们不仅仅是为了生存而生存。 7.Happiness isn't getting all you want. It's enjoying all you have. 幸福不是得到你想要的一切,而是享受你所拥有的一切。 8、Everyone is happy. But, your happiness, often in the eyes of others. 每个人都是幸福的。只是,你的幸福,常常在别人眼里。 9、Try your best,girls ! Women who don't try hard have two outcomes: endless flea market and outdoor market shopping.姑娘,努力吧!不努力的女人只有两种结果,穿不完的地摊货和逛不完的菜市场。 10、Heard some things, obviously irrelevant, but also in the hearts of several bends Shui think of you.听到一些事,明明不相干的,也会在心中拐好几个弯想到你。 11、Smiling face, not to blame. Leisurely, the heart, with you. Destined to allow life to change, only a hundred years later, the life of a flower.笑着面对,不去埋怨。悠然,随心,随性,随缘。注定让一生改变的,只在百年后,那一朵花开的时间 12、Imagination is the highest kite one can fly. 想象力是飞得最高的那盏风筝。 课程设计任务书 学生姓名:辛波专业班级:计算机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日 程序流程控制语句:选择语句 https://www.360docs.net/doc/2f12531451.html,网站制作 2011年9月1日 Java语言中的程序流程控制语句有三种:顺序结构、选择结构和循环结构。其中顺序结构最简单,程序依次执行各条语句。Java的每条语句一般以分号(“;”)作为结束标志。所以本章重点讲解选择结构和循环结构。 1、选择语句 在程序设计时,经常需要使用选择结构在程序中完成逻辑判断和选择功能,这就需要使用到选择语句。Java中的选择语句包括if语句、if-else语句和switch语句。选择语句用来控制选择结构,对选择条件进行判断,并根据判断结果选择要执行的程序语句,改变程序执行流程。 2、if选择语句 在实际生活中,经常会需要做一些逻辑判断,并根据逻辑判断结果做出选择。例如,当一个男孩子向一个非常理智的女孩子求婚时,这个女孩子思考的逻辑可能是这样的: 如果你有100万 那么,我就嫁给你! 在这里,女孩子嫁给男孩子这个过程的实施,必须以“你有一百万”为前提。只有逻辑判断“你有一百万”这一前提条件为真时,“那么,我就嫁给你!”这个行为才能得到执行。在生活当中,类似这样的情形是很常见的。 相应地,在Java程序设计语言中,也有相应的条件语句来完成类似的逻辑判断和有选择地执行这样的功能,这就是if语句。if语句的语法格式如下: if(条件表达式) 语句 或者 if(条件表达式){ 一条或多条语句 } if语句执行的过程如下: 1.对if后面括号里的条件表达式进行判断。 2.如果条件表达式的值为true,就执行表达式后面的语 句或后面大括号里的多条语句。 3.如果条件表达式的值为false,则跳过if语句,执行 下一条语句。 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 语法分析方法描述: 简单优先分析法是按照文法符号(终极符和非终极符)的优先关系确定句柄的。 基本思想可设计如下,首先根据已知优先文法构造相应优先关系矩阵,并将WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)
2010年经典英语祝福语(带中文翻译)
FOR循环语句的翻译程序设计
DO-WHILE循环语句的翻译程序设计
JavaScript流程控制语句
30条中英文互译经典语录
for循环语句的翻译
程序流程控制语句
WHILE循环语句的翻译程序设计(简单优先法、输出四元式)