编译原理课程设计--IF-ELSE条件语句的翻译程序设计

编译原理课程设计--IF-ELSE条件语句的翻译程序设计
编译原理课程设计--IF-ELSE条件语句的翻译程序设计

课程设计任务书

学生姓名:_____ 专业班级:

指导教师:_ 工作单位:计算机科学与技术学院

题目: IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式)初始条件:

理论:学完编译课程,掌握一种计算机高级语言的使用。

实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。

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

(1)写出符合给定的语法分析方法的文法及属性文法。

(2)完成题目要求的中间代码四元式的描述。

(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。

(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。

(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:

1 系统描述(问题域描述);

2 文法及属性文法的描述;

3 语法分析方法描述及语法分析表设计;

4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;

5 编译系统的概要设计;

6 详细的算法描述(流程图或伪代码);

7 软件的测试方法和测试结果;

8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);

9 参考文献(按公开发表的规范书写)。

时间安排:

设计安排一周:周1、周2:完成系统分析及设计。

周3、周4:完成程序调试及测试。

周5:撰写课程设计报告。

设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。

设计报告书收取时间:设计周的次周星期一上午10点。

指导教师签名: 2012年 10月 23日

系主任(或责任教师)签名: 2012年 10月 23日

IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式)

1系统描述

1.1实验目的

对条件语句:IF <布尔表达式> THEN <赋值语句> ELSE <赋值语句>

(1)按给定的题目写出符合语法分析方法要求的文法和属性文法描述。

(2)按给定的题目给出语法分析方法的思想及分析表的设计。

(3)按给定题目给出中间代码序列的结构设计。

(4)完成相应的词法分析、语法分析和语义分析程序设计。

(5)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。

1.2开发平台

Visual C++ 6.0、Windows XP

2文法及属性文法的描述

2.1文法描述

(1) S->if E then B else B

(2) E->(A>A)

(3) E->(A

(4) E->(A)

(5) A->d

(6) A->num

(7) B->{d=C}

(8) C->A+A

(9) C->A-A

(10) C->A*A

(11) C->A/A

(12) C->A

其中,d代表变量,num代表常量(这里仅限数字),E布尔表达式,B为赋值表达式,C为算术表达式

2.2属性文法描述

(1)E->A rop A’{E.true=nextstat;

E.codebegin=nextstat;

E.false=nextstat+1;

emit(“if” A.place “rop” A’.place “goto” -);

emit(“goto” -)}

(2)E->(A) {E.place=A.place}

(3)A->id {p=lookup(https://www.360docs.net/doc/a216840658.html,);

if p!=null then

A.place=p

else error}

(4)B->{d=C} {d.place=C.place}

(5)C->A op A’{C.place=newtemp;

emit(C.place “=” A.place “op” A’.place)} (6)C->A {C.place=A.place}

注:rop为>或<;op为+、-、*或/

3语义分析方法的描述及分析表设计

3.1优先关系定义

X=Y 表示X和Y的优先关系相等

X>Y 表示X的优先性比Y的优先性大

X

(1)X=Y 当且仅当G中存在产生式规则A->…XY…

(2)X>Y 当且仅当G中存在产生式规则A->…XB…,B=>Y…,B≠Y

(3)X…BD…,B=>…X,B≠X,D=>Y…

3.2简单优先文法定义

若一个文法是简单优先文法必须满足以下条件:

(1)在文法符号集V中,任意两个符号之间最多只有一种优先关系成立

(2)在文法中任意两个产生式没有相同的右部

其中第一条是必须满足的,第二条若不满足则会导致规约不唯一。

3.3简单优先文法的算法步骤

首先根据已知优先文法构造相应优先关系矩阵,并将文法的产生式保存,设置符号栈S,算法步骤如下:

(1)将输入符号串a1,a2…aN#依次逐个存入符号栈S中,直到遇到栈顶符号ai 的优先性>下一个带输入符号aj时为止。

(2)栈顶当前符号ai为句柄尾,由此向左在栈中找句柄的头符号ak,即找到ak-1

(3)由句柄ak…ai在文法产生式中查找右部为ak…ai的产生式,若找到则用相应左部代替句柄,若找不到则为出错,这是可以判定输入串不是该文法

的句子。

(4)重复上述(1)(2)(3)步骤直到规约完输入符号串,栈中只剩下文法的开始符号为止。

3.4语义分析方法描述

语义分析采用基于属性文法的翻译方案,即,在语法分析过程中每进行一次规约操作则对对应产生式进行语义计算。

3.5分析表构造

3.5.1优先关系的计算

3.5.1.1 定义集合

FA(S)={a|S=>a…,S≠a,a为文法符号}

LA(S)={a|S=>…a,S≠a,a为文法符号}

3.5.1.2 改造后的优先关系计算

当文法中存在A->…XY…时,X=Y

当文法中存在A->…XB…时,X

当文法中存在A->…BD…时,LA(B)>D且LA(B)>FA(D)

3.5.2分析表结构

分析表采用二维数组存储方式,文法中的每一个符号对应数组a中的一个位置,

而a[i][j]代表第i个和第j个的优先关系:

(1)a[i][i]=0 无优先关系

(2)a[i][i]=1 i对应元素优先级小于j的

(3)a[i][i]=2 i对应元素优先级大于j的

(4)a[i][i]=3 i对应元素优先级等于j的

而在分析过程中规约产生式的选择则在语法分析过程中,在语法分析过程中实现。分析表最终结果如下:

int anltable[22][22]={

/*S*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},

/*if*/ {0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

/*E*/{0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

/*then*/{0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0},

/*B*/{0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},

/*else*/{0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0},

/*(*/{0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0},

/*)*/{0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

/*>*/{0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0},

/*<*/{0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0},

/*=*/{0,0,0,0,0,0,0,0,0,0,0,1,1,1,3,0,0,0,0,0,0,0},

/*A*/{0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,2,3,3,3,3,0},

/*d*/{0,0,0,0,0,0,0,2,2,2,3,0,0,0,0,0,2,2,2,2,2,0},

/*num*/{0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,2,2,2,2,2,0},

/*C*/{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0},

/*{*/{0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0},

/*}*/{0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},

/*+*/{0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0},

/*_*/{0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0},

/***/{0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0},

/*/*/{0,0,0,0,0,0,0,0,0,0,0,3,1,1,0,0,0,0,0,0,0,0},

/*#*/{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

};//0-error ,1=<, 2=> ,3==

4中间代码形式描述及结构设计

四元式是一种比较普遍采用的中间代码形式。四元式的四个组成成分是:算符op,第一和第二运算对象ARG1和ARG2及运算结果RESULT。运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。

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

(1)(*,b,c,t1)

(2)(*,b,d,t2)

(3)(+,t1,t2,t3)

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

四元式和三元式的主要不同在于,四元式对中间结果的引用必须通过给定的名字,而三元式是通过产生中间结果的三元式编号。也就是说,四元式之间的联系是通过临时变量实现的。

5编译系统的概要设计

(1)系统主要分为两个模块:词法分析和语法分析(包括语义分析)。并且在分析过程中将词法分析产生的单词输出到文件,语法分析过程中分析栈的变化情况输

出到文件。

(2)系统设计采用过程化的设计方法,将词法分析、语法分析等功能模块在独立的过程中实现。

(3)系统概要结构如下:

1)预定义模块

2)词法分析模块

3)语法分析模块

4)其他辅助模块

5)主程序模块(主要指程序入口函数main())

各模块调用关系如下:

6算法描述

6.1预定义模块

预定义模块主要包括宏定义、常量定义、类型定义以及全局变量定义等。具体如下:

(1)宏定义

#define OK 1//正常

#define ERROR -1//出错

#define FAILURE -1//分析失败

(2)类型定义

struct att

{//名字表类型

string sname;

char select;

char addre;

};

typedef struct SqStack

{

char*base;

char*top;

int stacksize;

}SqStack;//栈定义

(3)全局变量

int lineno = 1;//输出时的当前行号

char ch ; //当前字符

char allname[30][30];//单词全名

char out[30][30];//保存单词简称

att attname[40];//名字表

(4)优先关系表初始化(见3.5.2)

6.2词法分析

词法分析主要为analysis(ifstream &fin,ofstream &fout)函数,其中fin为输入文件流,fout为单词输出文件流。辅助函数为judge(char *string),判断单词是否为关键字。

分析算法如下描述:

while(true)

{

字符串存放临时数组temp;

if(到文件末尾) break;

读取一个字符到ch;

if(ch是换行) {lineno+=1;}

else if(ch是字符)

{

while(ch是字符或数字)

{

ch存入temp;

读取下一个字符;

}

判断temp是否为关键字,并根据判断结果使temp入名字表并设置正确的

属性。

}

else if(ch是数字)

{

while(ch是数字)

{

ch存入temp;

读取下一个字符;

}

temp入名字表并设置正确的属性。

}

else if(ch为其他合法字符(如:>,<,=等等)) 填入名字表。

else 输出错误,无法识别的字符。

}

6.3语法分析

语法分析主要为laynax(ofstream &f)函数,其中,f为栈变化情况输出文件。其他辅助函数为除judge(char *string)外的其他所有辅助函数。语法分析的过称描述如下:

初始化分析栈;

while(还有单词)

{

判断当前栈顶单词与输入单词的优先级;

if(<||=) 当前符号入栈

else if(>)

{

while(栈顶元素优先级等于输入单词)

{

保存输入单词;

置输入单词为栈顶单词;

栈顶元素出栈;

}

判断保存单词串是否为句柄;

if(是句柄)

{

进行规约;

进行语义规则计算;

输出栈的变化情况;

使规约后单词为新的输入符号;

}

else

{

输出规约出错;

}

}

else

{

输出输入单词错误;

}

}

6.4其他模块

其他模块描述如下:

(1)栈操作模块

void InitStack (SqStack &S)

{//栈初始化

S.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));//分配存储空间

if(!S.base)

exit(OVERFLOW); //为栈S分配存储空间失败

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

}

int push(SqStack &S,char ch)//将元素e插入到栈S中,成为新的栈顶元素{

if(S.top-S.base >S.stacksize) //判定栈是否满

{

S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT *sizeof(char)));

if(!S.base)

{

printf("分配存储单元失败.\n"); //存储单元分配失败

exit(OVERFLOW);

}

S.top=S.base+S.stacksize;//指明栈顶指针的基址

S.stacksize+=STACKINCREMENT;//指明栈的空间大小

}

*S.top++=ch; //先将e送入栈顶指针所指向的单元,再将栈顶指针加

return(OK);

}

int pop(SqStack &S,char &ch)

{//栈顶元素出栈

if(S.top==S.base)

{

printf("溢出");

return(ERROR);

}

ch=*--S.top;

return(OK);

}

char gettop(SqStack S)

{ //返回栈顶元素

if(S.top==S.base) cout<<"栈空,出错"<

char e;

e = *(S.top-1);

return e;

}

void printstack(SqStack &S,int naa,int ty,ofstream &fout) {//输出栈当前情况

char temp[40][20];

for(int k=0;k<40;k++)

{

for(int t=0;t<20;t++)

temp[k][t]=NULL;

}

int te=0;

int i=0,j=0;

int nu=0;

char*ku;

ku=S.base;

i=naa+1;

char*contrl;

contrl=S.base;

while(contrl!=S.top)

{

if(*contrl!='1')

{

if(*contrl=='i')

{fout<<"if";nu=nu+2;}

else if(*contrl=='t')

{fout<<"then";nu=nu+4;}

else if(*contrl=='e')

{fout<<"else";nu=nu+4;}

else

{fout<<*contrl;nu++;}

}

contrl++;

}

fout<<"\t\t\t";

for(i;i<=length;i++)

{

if(gettop(S)=='S')

fout<<"#";

else

fout<

}

if(gettop(S)=='S')

fout<<"#";

else

fout<

te++;

fout<

}

(2)其他

int getnum(char cc)

{//返回元素在优先表中的位置

switch(cc)

{

case'S':

return0;break;

case'i':

return1;break;

case'E':

return2;break;

case't':

return 3;break;

case'B':

return4;break;

case'e':

return5;break;

case'(':

return6;break;

case')':

return7;break;

case'>':

return8;break;

case'<':

return9;break;

case'=':

return10;break;

case'A':

return11;break;

case'd':

return12;break;

case'n':

return13;break;

case'C':

return14;break;

case'{':

return15;break;

case'}':

return16;break;

case'+':

return17;break;

case'-':

return18;break;

case'*':

return19;break;

case'/':

return20;break;

case'#':

return21;break;

default:

return88;

}

}

int judge(char *string)

{//判断是否是关键字

char*keywords[1000]={"if","then","else"};

for(int i = 0;i <= 2;i++)

{

if(!strcmp(string,*(keywords+i)))

{

return 1;

}

}

return 0;

}

6.5主程序

主程序主要负责,用户界面的初始化,以及程序执行控制。程序如下:

int main()

{

int test=0;

cout<<"============================================================ ==================="<

cout<<"= IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式) ="<

cout<<"============================================================ ==================="<

char inFile[100],wordOutFile[100],stackFile[100];

ifstream *fin;

ofstream *wordOut,*stackOut;

while(true)

{

printf("输入源文件名(包括路径):");

cin>>inFile;

fin=new ifstream(inFile);

if(fin==NULL)

{

printf("输入源文件名错误!\n");

continue;

}

break;

}

while(true)

{

printf("输入单词输出文件(包括路径):");

cin>>wordOutFile;

wordOut=new ofstream(wordOutFile);

if(wordOut==NULL)

{

printf("输入文件名错误!\n");

continue;

}

break;

}

while(true)

{

printf("输入栈情况输出文件(包括路径):");

cin>>stackFile;

stackOut=new ofstream(stackFile);

if(stackOut==NULL)

{

printf("输入文件名错误!\n");

continue;

}

break;

}

getchar();

test=analysis(*fin ,*wordOut);

if(test==1)

{

test=laynax(*stackOut);

}

else

return0;

if(test==1)

{

printfou();

}

return 0;

}

7测试方法和结果

7.1测试方法

(1)程序设计过程中采用单步测试的方法,每完成一个独立的功能模块则对其进

行单独测试。各模块测试成功之后,则对程序整体进行测试。

(2)程序整体测试时,利用多种变化的输入数据进行测试,以验证程序的正确性,并且提供错误的输入来观察程序的反应。

7.2测试结果

7.2.1程序运行界面

7.2.2测试一(正确数据)

(1)输入数据

(2)输出结果

单词输出(部分):

分析栈输出(部分):

四元式输出:

7.2.3测试二(不正确数据)

输入数据:

输出结果:

8设计总结

8.1设计优点

(1)简单优先分析法是一种规范规约。具有准确、规范等优点。

(2)四元式为普遍的中间代码形式。

(3)程序结构清晰,功能模块划分合理。

(4)程序具有坚实的基础,可扩展性强。

8.2设计缺点

(1)规范规约本身具有效率低的缺点。

(2)分析表结构庞大,占据大量内存空间,但其中却有好多冗余。

(3)程序只能进行简单的if-else语句进行翻译,功能有限。

(4)程序容错能力较差,遇到输入错误时,只能进行简单处理,即,终止程序。

在极端情况下可能导致不可预知错误。

8.3考虑改进

(1)使用算符优先分析法代替简单优先分析方法。

(2)采用优先链的方式存储优先表,代替数组。

(3)提高程序的容错能力。例如:遇到错误时,将错误文法尽可能补全为正确文法,使分析能够继续进行。

(4)增强程序的功能,使其能适应复杂的源程序输入。

9收获与体会

本次课程设计可以说是对编译原理课程本学期所学内容的一次综合应用,虽然称不上一个完整的编译程序,但已经展现了一个完整编译程序的雏形。通过本次课程设计,不仅进一步熟悉了编译程序所涉及的各方面知识,更掌握了一个编译程序的整体架构方式以及编译程序构造的整体流程。并且,从中认识到,编译程序模块化(词法分析、语法分析、语义分析等)的重要,更是程序设计模块化的重要。但,在其过程中也暴漏了自身知识的匮乏,包括,编译原理知识学习不扎实,不能很好的运用;编程语言运用不熟练,导致频繁因查找编程语言语法知识耗费大量时间等等。但总的来说,本次编程还是收获不少,不仅仅是实现了课程设计所要求的内容,更为以后深入的学习(包括课程相关与不相关)打下了坚实的基础。

10参考文献

【1】张素琴、吕映芝、蒋维杜、戴桂兰等.编译原理(第二版).清华大学出版社.2005

【2】闵联营、何克右. C++程序设计教程. 武汉理工大学出版社. 2005

【3】Stanley B.Lippman、Josee Lajoie、Barbara E.Moo著,李师贤、蒋爱军、梅晓勇、林瑛译.

C++ Primer中文版. 2006

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日

文言文句子的翻译

《文言文句子的翻译》 【教学目的】 1、落实《考试说明》“阅读浅显文言文能力”的训练,集中训练文言句子翻译的能力。 2、在学生已掌握文言文翻译的一般原则、技巧的基础上,加强踩点得分意识,以难词难句为突破口,指导学生掌握好高考文言句子翻译的方法技巧。 【教学重难点】 1、抓关键词句(关键词语、特殊句式),洞悉得分点。 2、掌握解题步骤、翻译方法,学以致用。 3、借助积累(课内文言知识、成语、语法结构、语境等),巧解难词难句。 【教学设计】 1、本课以学法指导和能力训练为重点,帮助学生归纳系统的文言句子的翻译方法(直译),并指导其应用。 2、在学生掌握了“信、达、雅”三字翻译目标和“翻译六字诀”的基础上,针对学生在文言翻译中的盲点,力图引导学生总结归纳出解决翻译疑难的技巧,并通过训练验证这些技巧的可操作性,使学生能举一反三,从而增强文言文翻译的信心。 3、本设计重在让学生易于掌握,便于利用,注重实用性和可操作性。 【教学步骤】 一.课堂导入 1、提问:从高考的特点与考查目的出发,文言文翻译要严格遵循的两个原则是什么? 第一: 忠于原文,力求做到_____、_____、_____ 。(信达雅) 第二: 字字落实,以_____为主,以_____为辅(直译意译) (①让学生用自己语言表述文言文翻译“信、达、雅”三字原则的理解 ②直译:指译文要与原文保持对应关系,重要的词语要相应的落实,要尽力保持原文遣词造句的特点和相近的表达方式,力求语言风格也和原文一致。意译:指着眼于表达原句的意思,在忠于愿意的前提下,灵活翻译原文的词语,灵活处理原文的句子结构。) 2、提问: 文言文翻译的“六字决”? ①对:一般指把原名中的文言单音词对译为现代汉语的双音或多音词。 ②换:有些词语意义已经发展,用法已经变化,语法已经不用,在译文中,应换这些古语为今语。 ③留:人名、地名、年号、国号、庙号、谥号、书名、物名都保留不译;与现代汉语表达一致的词语可保留。 ④删:一些没有实在意义的虚词,如表敬副词、发语词、部分结构助词等,同义复用的实词或虚词中的一个和偏义复词中陪衬的词应删去。 ⑤补:省略的部分;词语活用相应的部分;代词所指的内容;使上下文衔接连贯的内容等。

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;

文言文哲理句子加翻译

文言文哲理句子加翻译 经典句子 文言文哲理句子加翻译 1、见侮而不斗,辱也。译:当正义遭到侮辱、欺凌却不挺身而出,是一种耻辱的表现。 2、不戚戚于贫贱,不汲汲于富贵。译:不为贫贱而忧愁,不热衷于发财做官。 3、一寸山河一寸金。译:祖国的每一寸山河比一寸黄金还要宝贵,是绝不能让给外人的。 4、勿以恶小而为之,勿以善小而不为。译:对任何一件事,不要因为它是很小的、不显眼的坏事就去做;相反,对于一些微小的。却有益于别人的好事,不要因为它意义不大就不去做它。 5、不迁怒,不贰过。译:犯了错误,不要迁怒别人,并且不要再犯第二次。 6、邑人奇之,稍稍宾客其父,或以钱币乞之。译:同县的人对他能作诗感到惊奇,渐渐地请他的父亲去做客,有的人还用钱求仲永题诗。 7、三人行,必有我师焉,择其善者而从之,其不善者而改之。译:三个人在一起,其中必有某人在某方面是值得我学习的,那他就可当我的老师。我选取他的优点来学习,对他的缺点和不足,我会引

以为戒,有则改之。 8、人生自古谁无死,留取丹心照汉青。译:自古以来,谁都难免会死的,那就把一片爱国的赤胆忠心留在史册上吧! 9、三人行,必有我师焉;择其善者而从之,其不善者而改之。译:几个人在一起走路,其中一定有人可以当我的老师。应当选择他们的优点去学习,看到自己也有他们的缺点就要改正。 10、中峨冠而多髯者为东坡。译:中间戴着高高的帽子长着浓密胡子的人是苏东坡。 11、有益国家之事虽死弗避。译:对国家有利的事情要勇敢地去做,就算有死亡的危险也不躲避。 12、良药苦于口而利于病,忠言逆于耳而利于行。译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。 13、少顷,但闻屏障中抚尺一下,满坐寂然,无敢哗者。译:过了一会儿,只听到围幕中抚尺一拍,全场都安静下来,没有一个敢大声说话的。 14、小来思报国,不是爱封侯。译:从小就想着报效祖国,而不是想着要封侯当官。 15、屠大窘,恐前后受其敌。译:屠户很窘迫,恐怕前后受到两狼的攻击。 16、宾客意少舒,稍稍正坐。译:宾客们的心情稍微放松了,身子渐渐坐正了。

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/a216840658.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语句,执行 下一条语句。

《文言文语句翻译》

《文言文语句翻译》(高三参赛) 一、设计说明 高考对文言文语句翻译的考查,虽然材料选自课外,但是考查立足于课内,立足于考查学生对所学文言知识能否灵活运用之上,对学生理解并翻译语句能力的客观考查,符合课程改革和语文教学的发展方向。结合《课程标准》,立足教材本身,勾连高考试题,我设计引导学生在理解和运用语言的实践活动中悟法、学法、用法,调动学生自主、合作、探究学习的积极性,进行适合学生实际水平的有效复习。 该学案分三部分,课前案重在引导学生了解高考命题要求及考点阐释,通过自主复习,运用课内掌握的文言基础知识,总结出语句翻译的具体方法。课中案重在就学生自主反馈的翻译方法进行展示和纠正,以练—讲—练的形式,将课内例句与高考样题衔接起来,渐次推进,引导学生灵活运用翻译方法,总结答题规律,提升掌握语言文字的能力。课后案作为当日作业,旨在让学生夯实基础,巩固演练,继续钻研,锐意进取。二、材料依据 必修教材篇目《师说》《赤壁之战》《鸿门宴》《齐桓晋文之事》等,《〈史记〉选读》篇目《信陵君窃符救赵》《廉颇蔺相如列传》及08—10年高考部分省份样题。 三、设计内容: 学习目标: 知识与能力:了解并掌握文言文语句翻译的具体要求,探求翻译的具体方法。 过程与方法:解读考点,夯实旧知,练中悟法、学法。 情感态度与价值观:培养扎实严谨的学习作风。 课前复习步骤: 一、解读考点 阅读并勾画要点:考纲中“理解并翻译文中的句子”,意思是说“翻译”须以“理解”为前提,“理解”,就是准确把握字句在文段中的正确的意义;而“翻译”则是将文言句子译为规范的现代汉语。考查的句子是有特点的,在实词、虚词、句式、活用、通假字等方面有典型性的句子。测试题目出在“课外”,答案在“课内”。这里“课外”的含义一般指“选材”是学生没学过的,题目是没做过的;“课内”的含义可从两个方面理解:一是指测试的知识是学生“课内”学过的,二是学生可以利用学过的知识加以推断。 二、明确原则 文言文语句翻译原则——信(忠实原文)、达(文意通达流畅)、雅(语言富有文采)。 三、链接课内 根据参考篇目,结合梳理笔记,复习文言基础知识。 四、探求方法 1、翻译下列句子,注意句中划线和括号处,并用一个词概括所用方法。要求书写规范。第一组:魏安釐王二十年,秦昭王已破赵长平军,又进兵围邯郸。 译文:。 劳苦而功高如此,未有封侯之赏…… 译文:。

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章课后习题,加强和巩固学生对所学知识的理解和掌握使用。

古文之句子翻译

2015年中考语文复习之句子翻译训练 《小石潭记》(八上) 5.潭中鱼可百许头,皆若空游无所依。 ——潭中的鱼大约有一百来条,都好像在空中游动,什么依靠也没有似的。 6.日光下澈,影布石上。 ——阳光照到水底,鱼的影子映在水底的石上。 7.佁然不动,俶而远逝。 ——呆呆地一动不动,忽然间向远处游去了。 8.斗折蛇行,明灭可见。 ——看到(溪身)像北斗星那样曲折,(溪水)像蛇那样蜿蜒曲折,时隐时现。 9.其岸势犬牙差互。 ——溪岸的形状像狗牙那样参差不齐。 10.凄神寒骨,悄怆幽邃。 ——使人感到心神凄凉,寒气透骨,寂静极了,幽深极了。 《马说》(八下) 3.且欲与常马等不可得,安求其能千里也? ——想要跟普通的马等同尚且不可能,又怎么能要求它日行千里呢?4.策之不以其道,食之不能尽其材,鸣之不能通其意 ——驱使它,不能按照正确的方法;喂养它又不能使它充分发挥自己的才能;听它嘶鸣却不懂得它的意思。 5.其真无马邪?其真不知马也。 ——难道真的没有千里马吗?恐怕是他们真不识千里马吧! 《送东阳马生序》(八下) 1.天大寒,砚冰坚,手指不可屈伸,弗之怠。 ——(有时)天气非常寒冷,砚池里的水结成很硬的冰,手指(冻僵)不能弯曲、伸直,也不敢放松抄书。 2.录毕,走送之,不敢稍逾越。 ——抄完,跑者送还书,不敢稍微超过约定的期限。 3.既加冠,益慕圣贤之道。 ——已经成年,更加仰慕圣贤的学说。 4.又患无硕师名人与游,尝驱百里外从乡之先达执经叩问。 ——又担心没有才学渊博的老师、名人和他们交游,曾经跑到百里之外,拿着经书向当地有道德有学问的前辈请教。 5.先达德隆望尊,门人弟子填其室,未尝稍降辞色。 ——那位前辈道德高,声望高,学生挤满了他的屋子,但他并没有把言辞放委婉些,把脸色放温和些。

《小学文言文解题思路》微课教学设计

《小学文言文解题思路》微课教学设计 掌握文言文的解题方法和技巧。 1、文言文考察知识点。 1.新课导入。 今天我们要学习的就是小学文言文里面一个重要的知识点——文言文,当人们使用“古代汉语”这个术语时,在不同的语境中赋予了它三个不同的含义:古代的汉语、上古汉语和文言。 2.什么是仿句? 文言文”是相对于“白话文”而言。 “文言文”的意思就是指“用书面语言写成的文章”。而“白话文”的意思就是“用常用的直白的口头语言写成的文章”。 例如,想问某人是否吃饭了,用口头语言表述,是“吃饭了吗?”,而用书而语言进行表述,就是“饭否?”。“饭否”就是文言文。 3. 明确文言文仿句翻译要求? “信”即字字落实,力求准确; “达”即文从句顺,力求通顺; “雅”即生动形象,讲究文采; 4.文言文翻译的4点基本素质? 1、掌握作者形象。 2、把握作品出处。 3、掌握文言词汇。 4、翻译全文。 仿句式,仿修辞,仿语境。 5.归纳文言文翻译的遇到障碍。 1、通假字。 2、古今异义。 3、一词多义。 4、词类活用。 6.明确文言文的翻译的步骤,理解文言文的翻译技巧。 1.留。即保留原文中的专有名词、国号、年号、人名、地名、官名、职称、器具名称等,可照录不翻译。 2.删。即删去不译的词。凡是古汉语中的发语词、判断词、在句子结构上起标志作用的助词、凑足音节的助词等,在现代汉语中没有词能替代,便可删去。 3.换。即对古今意义相同,但说法不同的词语,翻译时都要换成现在通俗的词语,使译文通达明快。 4.换。即将文言中的单音节词直接译成以该词为语素的现代汉语的双音节或多音节词。考察学生的语言运用能力,语言表达能力,和情感态度价值观。

(完整版)文言语句翻译专项练习(含答案)

文言语句翻译专项练习 1.阅读下面的文言文,将画线的部分译成现代汉语 征和二年,卫太子为江充所败,而燕王旦、广陵王胥皆多过失。是时上年老,宠姬赵婕妤有男,上心欲以为嗣,命大臣辅之。察群臣唯光任大重,可属社稷。上乃使黄门画者画周公负成王朝诸侯以赐光。后元二年春,上游五柞宫,病笃,光涕泣问曰:“如有不讳,谁当嗣者?”上曰:“君未谕前画意邪?立少子,君行周公之事。”(《汉书·霍光传》) 译文: 2.阅读下面的文言文,翻译划线的两个句子。 李林甫为相,凡才望功业出己右及为上所厚、势位将逼己者,必百计去之,①尤忌文学之士,或阳与之善,啖以甘言,而阴陷之。②(《资治通鉴·卷二一五》) ① ② 3.阅读下面的文言文,翻译划线的两个句子 孔子行道而息,马逸,食人之稼,野人取其马。子贡请往说之。毕辞,野人不听。有鄙人始事孔子者,曰:“请往说之。”因谓野人曰:“子不耕于东海,吾不耕于西海也,吾马何得不食子之禾?”其野人大说,相谓曰:“说亦皆如此其辩也,独如向之人!”解马而与之。(选自《吕氏春秋》) ①有鄙人始事孔子者 ②说亦皆如此其辩也,独如向之人!

4.把下面画横线的句子翻译成现代汉语 及之而后知,履之而后艰,乌有不行而能知者乎?披五岳之图,以为知山,不如樵夫之一足;谈沧溟之广,以为知海,不如估客之一瞥;疏八珍之谱,以为知味,不如庖丁之一啜。(魏源《海国图志》) (1)及之而后知,履之而后艰,乌有不行而能知者乎? 译文: (2)不如樵夫之一足。 译文: 5.将下面一段文言文译成现代汉语。 解(郭解)出入,人皆避之。有一人独箕踞视之,解遣人问其名姓。客欲杀之。解曰:“居邑屋至不见敬,是吾德不修也,彼何罪!”乃阴属尉史[1]曰:“是人,吾所急[2]也,至践更[3]时脱之。”(《史记·游侠列传》) 注释:[1]尉史,县尉手下的书吏,古代管户口的小官。[2]急,重也。[3]践更,按期轮番服役。 译文: 6.将画线的句子译成现代汉语(未画线的句子已译出): 孟子曰:圣人,百世之师也,伯夷、柳下惠是也。故闻伯夷之风者,顽夫廉,懦夫有立志;闻柳下惠之风者,薄夫敦,鄙夫宽。奋乎百世之上,百世之下,闻者莫不兴起也。非圣人而能若是乎?——而况于亲炙之者乎?(《孟子·尽心下》) 译文:孟子说:。所以在那些听到伯夷的风格和操守的人当中,即使是贪婪的人也变得廉洁了,懦弱的人也变得意志坚强了;

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

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节课开始到实验室进行上机验收。

流程控制语句练习题

流程控制语句练习题 1、为某超市编写一个程序,完成顾客购物后根据优惠政策计算付款额的功能。某超市有如 下优惠政策: ?所有的本超市的会员购物享受9折优惠。 ?对于非会员的顾客购物满100元的也可以享受9折优惠。 ?本身是会员并购物满100元可以享受8折优惠。 假如某顾客从该超市购买了三件商品(价格自己输入),请计算该顾客可得到的折扣额(如果有),以及打折后需支付的金额。 2、银行提供了整存整取定期储蓄业务,其存期分为一年、两年、三年、五年,到期凭存单 编写一个程序,用于根据存期和存款额(本金)计算利息,以及到期取款时银行应支取的本息。提示: ?要求用户选择存期,并输入本金。声明两个变量分别存储存期和本金。 ?计算利息的公式: 利息=本金*年利率*存期 本息=本金+利息 3、编写一个程序,要求用户输入今天是星期几,根据用户的输入判断是工作日还周未,并 显示合适的问候语。 提示: ?如果输入的数字不在1~7之间,则显示“请输入位于1 ~ 7 之间的数” ?如果用户输入的数字为6或7,则显示“周未愉快!”。 ?对于1~5之间的数字,则显示“工作日愉快!”。 4、只要顾客购买的商品数量大于等于10件,并且购物总额大于等于10000元,商店就给 顾客10%的折扣。接收购物数量以及总金额,要求计算出折扣后的应付金额。 5、做一个简易计算器:(包含+、-、*、/、%) 接收一个字符,例如用“+”表示加法,用“-”表示减法。接收num1和num2两个数。如果输入的字符为“+”,则将这两个数相加并显示相应结果。如果输入的字符为“-”。则将这两个数相减并显示相应的值。 6、编写一个程序,用于计算长方形、圆形和三角形的面积。根据用户的选择要能计算相应 形状的面积。 7、企业年底发放的奖金根据当年的利润提成。利润低于或等于10万元时,奖金可提10%; 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时,高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,输入当年的利润,求应发放奖金总数。 8、编写一个程序,用于创建包括下列选项的菜单: A、添加详细信息 B、修改详细信息

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循环语句的翻译程序

学号: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日

相关文档
最新文档