do-while语句翻译程序

do-while语句翻译程序
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

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日

2010年经典英语祝福语(带中文翻译)

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. 圣诞是这样美好的时光:炉火熊熊,花

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翻译过程

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 属性文法的描述

JavaScript流程控制语句

第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条中英文互译经典语录

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. 想象力是飞得最高的那盏风筝。

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日

程序流程控制语句

程序流程控制语句:选择语句 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循环语句的翻译程序设计(简单优先法、输出四元式)

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

流程控制结构

流程控制结构 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

(单元教案首页) 单元标题第3章流程控制结构 教学时数:()学时,其中理论()学时、实验()学时、上机()其它()学时,其它是指: 教学目的与要求: 1.理解程序的的三大控制结构。 2.掌握选择结构实现语句的用法编程应用 3.掌握循环结构实现语句的用法及其编程应用。 4.理解并掌握各种跳转语句的使用方法。 主要教学内容: 1.程序的控制结构:顺序、选择、循环。 2.选择结构语句:if语句(两种格式)和switch语句、程序举例。 3.循环结构语句:for语句、while、语句、do-while语句、三种循环语句的互相转化、程序举例。 4.控制结构跳转语句:break语句、continue语句、return语句 教学重点与难点: 重点:if语句、switch语句、for语句、while语句、do-while语句 难点: switch语句、选择结构编程应用、循环结构编程应用、跳转语句的编程应用课后作业: 1.课本P66 综合练习三:第一题~第四题 2.上机实习:实习3:Java流程控制 课后体会:

兰州资源环境职业技术学院教师授课教案

—————————————————————— 第3章流程控制结构 一、本章主要内容: 本章主要讲述Java程序的基本控制结构和控制语句,使得学生能利用这三种结构来解决一些比较复杂的问题。 Java程序的基本控制结构有三种:顺序结构、选择结构、循环结构。 二、具体授课内容: 概述 选择结构 循环结构 跳转语句 三、本章授课思路: 1. 回顾C语言中结构化程序设计方法所所用的程序三大控制结构(顺序结构、选择结构、循环结构)语法知识,以复习回顾的方式引入讲解Java语言的程序控制结构知识(和 C语言用法一致),学生易于理解记忆。 2.具体讲解选择结构(if、switch)和循环结构语法(while、for、do-while)及其编程用法的典型程序编写举例,使学生理解掌握Java语言中控制结构的使用特点及编程技巧。 将两种输入数据的编程方法融入到控制结构用法的编程举例的程序中,使学生对输入数据方法的能够有一定的理解掌握和编程使用,结合在后续第4章面向对象的程序设计的方法的具体学习中再加强理解和掌握。 4.课堂上通过练习和讲解第3章课后习题,加强和巩固学生对所学知识的理解和掌握使用。

英文翻译中文在线翻译:促进经济平稳较快发展

英文翻译中文在线翻译:促进经济平稳较快 发展 英文翻译中文在线翻译:促进经济平稳较快发展 (一)促进经济平稳较快发展 1. Promoting steady and robust economic development 扩大内需特别是消费需求是我国经济长期平稳较快发展的根本立足点,是今年工作的重点。 Expanding domestic demand, particularly consumer demand, which is essential to ensuring China’s long-term, steady, and robust economic development, is the focus of our economic work this year. 着力扩大消费需求。加快构建扩大消费的长效机制。大力调整收入分配格局,增加中低收入者收入,提高居民消费能力。完善鼓励居民消费政策。大力发展社会化养老、家政、物业、医疗保健等服务业。鼓励文化、旅游、健身等消费,落实好带薪休假制度。积极发展网络购物等新型消费业态。支持引导环保建材、节水洁具、节能汽车等绿色消费。

扩大消费信贷。加强城乡流通体系和道路、停车场等基础设施建设。加强产品质量安全监管。改善消费环境,维护消费者合法权益。 We will work hard to expand consumer demand. We will move faster to set up a permanent mechanism for boosting consumption. We will vigorously adjust income distribution, increase the incomes of low-and middle-income groups, and enhance people’s ability to consume. We will improve policies that encourage consumption. We will vigorously develop elderly care, domestic, property management, medical and healthcare services. We will encourage consumer spending on cultural activities, tourism, and fitness; and implement the system of paid vacations. We will actively develop new forms of consumption such as online shopping; support and guide the consumption of green goods such as environmentally friendly building materials, water-saving sanitation products, and energy-efficient vehicles; and expand consumer credit. We will improve the urban-rural logistics system and infrastructural facilities, such as roads and parking lots, strengthen supervision over product quality and

精典的关于浪漫爱情的英文短句附中文翻译的句子

精典的关于浪漫爱情的英文短句附中文翻译的句子精典的关于浪漫爱情的英文短句附中文翻译的句子精选一: NO.1A woman who truly loves you will be angry at you for many things, but will stick around. 如果一个女人真的爱你,她会因为很多事情对你发脾气,却始终坚守在你身边。 NO.2A successful relationship requires fall in love many times, always with the the same person. 一段成功的恋情,就是一次次的堕入爱河,与同一个人。

NO.3A boy will make you think he loves you, but he really doesn't. A girl will make you think she doesn't love you, when she really does. 很多时候,男人会让你觉得他爱上了你,其实他真没有;而女人会让你觉得她不可能会爱上你,结果她却动了心。 NO.4Anyone can make you smile. Many people can make you cry. But it takes someone really special to make you smile with tears in your eyes 谁都能让你笑,许多人能让你哭,但只有那个特别的人,能让你在眼中含泪的时候,依然能笑得出来。

NO.5Actully love can be expressed in many ways,your way is one of them.Sometimes it's not that he doesn't love you anymore,but you didn't understand his way of love. 其实爱有多种方式,你的方式只是一种。有时候不是对方不爱你,而是你没有理解他爱你的方式。 NO.6No words are necessary between two loving hearts. 两颗相爱的心之间不需要言语。 NO.7Before I met you I never knew what it was like; to look at someone and smile for no reason. 没有遇到你之前,我从来没想到自己会这样,毫无缘由的对着一个人

中英文经典语句

1.If we do this , those who failed won`t lose face nor even have their feeling hurt .. 如果我们这样做,那些考的不好的学生不会丢脸,感情上也不会受到伤害。 2.Since our test scoreshave been publicly displayed for so many years , it takes no difference whether we change the regulation or not . 既然我们的成绩已经公布这么多年了,是否改变我们的规定没有什么不同。 3. Meanwhile , to take every test score knowen can avoid any kind of cheating . 同时,公布每一次成绩能够避免作弊。 4.Shandong Provincial Education Department has recently taken strict measures to make sure that no students have to go to school on weekends or during official holiday . 山东省教育厅最近采取严厉措施确保学生周末和法定节假日期间不去上课。 5.Our local education administrations have adopted some new policies to reduce the pressure on students , in order to return time and happiness to the students . 为了把时间和幸福还给学生,我们当地的教育行政部门已经采取了一些新政策减轻学生的压力。 6.Everthing has two sides and examination is no exception . It has both advantage and disadvantages . 任何事物都有两面性,考试也不例外。它既有有利的一面,也有不利的一面。 7,Although a one ~day campaign can hardly generate enough long term influence to change people`s behaviour , at the very least , it is a good start . 虽然一天的运动很难产生足够长远的影响去改变人们当地行为,但,至少,这是一个良好的开端。 8.If people are convinced that they are contributing to a worthy cause , they will gradually change their behavior ,and it is the goal of campaign . 如果人们确定他们是在为一项高尚的事业做贡献,他们就会逐渐改变他们的行为,而这就是这次活动的目标。 9.We should do everything in our power to appear to our conscience or desire to be worthy citizen . 我们应努力唤起我们的良知或做有价值公民的愿望。 10.Even the farthest journey always starts the first step . 千里之行,始于足下。 11.Those who bring sunshine to others , can`t keep it from themselves . 给他人带去阳光的人,自己也会沐浴在阳光之中。(送人玫瑰,手留余香) 12.If everyone donates a bit of love , the whole world will become a paradise . 如果人人献出一点爱,世界将会变成美好的天堂。 13.It`s high time for us human beings to take quick action to protect water resources . 对我们人类来说,到了迅速采取措施保护水资源的时候了。 14.With the development of industry , factories and vehicles produce poisonous gases or wastes , which consequently results in the pollution of water . 随着工业的发展,工厂和车辆排放了许多有毒的气体和废弃物,因而造成了水污染。15.The world population is growing rapidly day by day .So enough fresh water is needed to feed such a big population . 世界人口在迅速的增长,所以需要足够的淡水来供养如此庞大的人口。 16.It is known to us all that water is the source of life , and the available water resources on the earth are quite limited .

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;

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)表两个部分,它们都可以用二维数组表示。 分析栈,包括文法符号栈和相应的状态栈。它们均是先进后出栈。

中英文翻译经典唯美爱情句子

I went to bed last night with a vision of you next to me. I slept like a baby all night, because I was not feeling alone. When I awoke this morning to see if it was real or if it was a dream, realty hit me that it was only a dream. Very soon, I know that you will be right next me, and that I will not have to dream of it again because you will be right there so we can hold, hug and squeeze each other tight. Baby, I long to be there with you so I can help build you and support you, so that we can accomplish a whole lot together as husband and wife. Teaching me the meaning of love. Encouraging me when I need a shove. But most of all thank you for Loving me for who I am教导我爱的意义是什么,当我需要动力时你鼓励我。但我最想感谢你的是,爱上像我这样的一个人。. If you were a teardrop;In my eye, For fear of losing you,I would never cry And if the golden sun,Should cease to shine its light, Just one smile from you,Would make my whole world bright如果你是我眼里的;一滴泪;为了不失去你;我将永不哭泣;如果金色的阳光;停止了它耀眼的光芒;你的一个微笑;将照亮我的整个世界。 If I were to fall in love,It would have to be with youYour eyes, your smile,The way you laugh,The things you say and do Take me to the places,My heart never knew So, if I were to fall in love,It would have to be with you. 如果说我已陷入情网;我的情人就是你;你的眼睛,你的微笑;你的笑脸;你说的一切,你做的一切;让我的心迷失了方向;所以,如果说我已陷入情网;我的爱人就是你。 Two star-crossed lovers in perfect harmony Just give me a chance and you will agree.I was meant for you.And you were meant for me.两个命运多舛的情人如此和谐地在一起,只要给我一线希望,你终将答应。我为你而生,你因我而存在。 Love is more than a word, it says so much. When I s ee these four letters, I almost feel your touch. This only happened since. I fell in love with you. Why this word does this, I haven' t got a clue.Love 不单是一个字,它还代表了许多意涵,当我看到这四个字母时,我几乎能感受到你内心的感动。但是这只发生在,我爱上你之后,为何这个字有如此的魔力,我也搞不清楚。 Dear ,alexandra(待改进) I really miss you very mush,every minutes all miss you,so I can’t wait to write you my idea, Sweetheart, My thoughts are deep into you . From the moment that I wake up . And to the whole day through . Happy Valentine's Day 亲爱的,我深深地想念著你,从我每天早上起来的那一刻起,每一分每一秒直到一天结束。情人节快乐! 4. Thank you for standing behind me. In all that I do. I hope you're as happy with me. As I am with you 感谢你永远支持我,不论我作了些什么,我希望你跟我在一起永远开心,就像我跟你在一起时那么地快乐。 5. If I could save time in a bottle. the first thing that I'd like to do. is to save every day until eternity passes away. just to spend them with you; if I could make days last forever. if words could make wishes come true. I'd save

相关文档
最新文档