学号:
课程设计
题目
学院
专业
班级
姓名
指导教师
年月日
课程设计任务书
学生姓名:蔡亮专业班级:软件0505班
指导教师:林泓工作单位:计算机科学与技术学院
初始条件:
理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体
要求)
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码四元式的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:
1 系统描述(问题域描述);
2 文法及属性文法的描述;
3 语法分析方法描述及语法分析表设计;
4 给出中间代码形式的描述及中间代码序列的结构设计;
5 简要的分析与概要设计;
6 详细的算法描述(流程图或伪代码);
7 给出软件的测试方法和测试结果;
8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);
9 参考文献(按公开发表的规范书写)。
时间安排:
设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名: 2008年 5月 23日
系主任(或责任教师)签名: 2008年 5月 23日
DO-WHILE语句的翻译程序设计
(简单优先法,输出四元式)
1问题描述
输入一个DO-WHILE的语句,进行词法分析,词法分析器利用超前搜索,状态转换等方法,将源程序转化成为一个一个的单词符号二元式,如果词法分析无误,则进入语法分析部分,使用简单优先法进行文法分析,为每个终极符与非终极符之间定义优先关系,利用优先关系进行移进-规约,如果能规约到文法的开始符,则文法分析成功,输出四元式.
2文法及属性文法的描述
2.1文法描述
G(s): S->do B while E,
B->c:=a+1,
E->a>b
2.2属性文法描述
G(s): S->do B while E, {S.begin:=newlabel;
B.next:=S.begin;
E.true:=newlabel;
E.false:= S.next;
S.code:=gen(S.begin’:’) |B.code |E.code
|gen(E.true’:’) |gen(‘goto’S.begin) ; } B->c:=a+1 { B.code:= ’c:=a+1’ }
E->a>b { E.code=gen(‘if’’a>b’’goto’ E.true) |Gen(‘goto’ E.false) }
E->true {E.code:=gen(‘goto’ E.true) }
E->false {E.code:=gen(‘goto’ E.false) }
3 语法分析方法描述
3.1简单优先法的定义
一个文法G,若它不含ε产生式,也不含任何右部相同的不同产生式,并且它的任何符号对(X,Y),或者没有关系,或者存在下述三种关系:=、<、>之一,则称该文法是一个简单优先文法。
A)X=Y当且仅当G中含有形如P→…XY…的产生式
B)X C)X>Y当且仅当Y为G的终结符,G中含有形如P→…QR…的产生式,其中Q,R 为非终结符,且Q →…X,Y∈First(R) D)对任何X,若文法开始符号S→X…,则# 3.2简单优先法的基本思想 根据优先关系的定义,将简单优先文法中各文法符号之间的这种关系用一个矩阵表示,称作简单优先矩阵。PDA读入一个单词后,比较栈顶符号和该单词的优先级,若栈顶符号优先级低于该单词,继续读入;若栈顶符号优先级高于或等于读入符号,则找句柄进行归约,找不到句柄就继续读入。直到最后栈内只剩下开始符号,输入串读到“#”为止。此时识别正确。可分点描述如下: 1、对句型中相邻的文法符号规定优先关系,以寻找句型中的句柄; 2、规定句柄内各相邻符号之间具有相同的优先级; 3、规定句柄两端符号优先级要比位于句柄之外而又和句柄相邻的符号的优先级高,以先归约句柄; 4、对于文法中所有符号,只要它们可能在某个句型中相邻,就要为它们规定相应的优先关系,若某两个符号永远不可能相邻,则它们之间就无关系. 3.3简单优先矩阵 用于表示文法符号之间的简单优先关系的矩阵。 3.4简单优先法的优缺点 优点:技术简单,当做简单优先矩阵是要求较短。 缺点:适用范围小,分析表尺寸太大。 4 中间代码形式描述 四元式是一种比较普遍采用的中间代码形式。四元式的四个组成成分是:算符op,第一和第二运算对象ARG1和ARG2及运算结果RESULT。运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。 例如:输入字符串do c=a+1 while a>b则输出四元式 (1) (+,a,1,c) (2) (>,a,b,t0) (3) (=,t0,true,1) (4) (-,-,-,-) 5简要的分析与概要设计 整个工程分为5个文件: Main.c ----程序的入口点,输入待分析的字符串后先进行词法分析,然后调用两个函数进行语法分析及产生中间代码。 Global.h ----定义了一些全局变量及宏 Parse.h ----- 语法分析器的主要算法 Prece.h ----- 定义和实现了一些关于优先级的操作 Stack.h ----- 定义和实现了一个栈及其操作 而各模块的调度关系如下: Main.c Prece.h Global.h Parse.h Stack.h 6详细的算法描述(各部分的主要算法) 6.1 Main的主要算法 void InputString()//输入字符串 { int len = 0; printf("表达式文法为: "); printf(GRAMMAR); printf("\n Please input any string to parse:\n"); scanf("%s", Buff);//输入字符串 len = strlen(Buff);//取字符串长度 Buff[len] = '#'; Buff[len+1] = 0; } void main()//主程序 { printf(" DO-WHILE循环语句的翻译\n "); printf("循环语句的格式为:DO <赋值语句> WHILE <表达式>\n "); printf("翻译的语句:do c=a+1 while a>b\n "); cifa();//调用词法分析程序,对输入字符串进行词法分析 InputString();//再次输入待分析字符串以便进行语法分析 Parse();//调用语法分析,对输入字符串进行语法分析 getch(); } void cifa()//词法分析 { char str; printf(" ********** 词法分析器**********\n"); if ((fp=fopen("lj.txt","r"))==NULL)//如果文件无法打开 printf("源程序无法打开!\n"); else { str =fgetc(fp); while (str!=EOF) { if (isalpha(str)!=0)//判断是否为字符 str=letterprocess(str);//调用字符处理 else { if (isdigit(str)!=0)判断是否为数字 str=numberprocess(str);//调用数字处理 else//其它 str=otherprocess(str); //调用其它处理 } }; printf("词法分析结束!\n"); } } 6.2Global的主要算法 ————关于一些全局变量及宏的定义 typedef enum{ false=0, true } bool; #define GRAMMAR "G(s): S->do B while E,B->c:=a+1,E=a>b"//定义文法#define BUFFSIZE 100 #define STACKSIZE 100 6.3Parse的主要算法 void error()//规约不成功 { printf("The input string doesn't match the grammar!");} void succeed()//规约成功 { printf("Succeed! The input match the grammar.");} char Reduce(const char* c) //将终极符或非终极符规约为非终极符 { if (*c == 'd') { return 'S'; } else if (*c == 'c' ) { return 'B'; } else if (*c == 'a') { return 'E'; } } bool Parse()//简单优先语法分析 { char c; //保存栈顶元素 char t; //保存最有可能弹出的终极符 int ip = 0; //指向输入缓冲区的指针 InitStack(); //初始化栈 while (true) { TopV alue(&c); if (c=='S' && Buff[ip]=='#')//如果栈顶为S或#,规约成功 { succeed(); return true; } else { switch (GetPrecedence(&c, &Buff[ip])) {//如果优先符是小于或等于则压栈,否则进栈 case LT: case EQ: { Push(&Buff[ip++]);//压栈 PrintStack(); break; } case GT: { Pop(&c);//出栈 do { t = c; Pop(&c); } while (GetPrecedence(&c, &t) != LT); Push(&c); t = Reduce(&t); Push(&t); PrintStack(); break; } default: { error(); return false; } } } } } 6.3 Prece的主要算法 //定义优先关系 Prece PreTable[18][18] = { /** S d o B w h i l e E a = + 1 > b c # **/ /* S */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT }, /* d */ { NO, NO, EQ, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT }, /* o */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, LT, GT }, /* B */{ NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT }, /* w */{ NO, NO, NO, NO, NO, EQ, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT }, /* h */ { NO, NO, NO, NO, NO, NO, EQ, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT }, /* i */ { NO, NO, NO, NO, NO, NO, NO, EQ, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT }, /* l */ { NO, NO, NO, NO, NO, NO, NO, NO, EQ, NO, NO, NO, NO, NO, NO, NO, NO, GT }, /* e */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, LT, NO, NO, NO, NO, NO, NO, GT }, /* E */ {NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT }, /* a */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, EQ, NO, NO, EQ, NO, GT }, /* = */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, EQ, NO, NO, NO, NO, NO, NO, GT }, /* + */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, EQ, NO, NO, NO, GT }, /* 1 */ { NO, NO, NO, NO, NO, GT, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT }, /* > */{ NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, EQ, NO, GT }, /* b */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, GT }, /* c */ { NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, EQ, NO, NO, NO, NO, NO, GT }, /* # */ { LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, LT, EQ }, }; int CharToIndex(const char* c)//定义矩阵 { switch (*c) { case 'S': return 0; case 'd': return 1; case 'o': return 2; case 'B': return 3; case 'w': return 4; case 'h': return 5; case 'i': return 6; case 'l': return 7; case 'e': return 8; case 'E': return 9; case 'a': return 10; case '=': return 11; case '+': return 12; case '1': return 13; case '>': return 14; case 'b': return 15; case 'c': return 16; case '#': return 17; default: return -1; } } Prece GetPrecedence(const char* c1, const char* c2) //取优先关系{ int i, j; i = CharToIndex(c1);//栈顶元素 j = CharToIndex(c2); //输入符号流第一个元素 if (i!=-1 && j!=-1) { return PreTable[i][j]; } else { return ND; //否则没有优先关系} } 6.3 Stack的主要算法 void InitStack()//初始化符号栈 { char c = '#'; StackTop = 0; Push(&c); } bool Push(const char* c)//压栈 { if (StackTop < STACKSIZE) { TheStack[StackTop++] = *c; return true; } else { return false; } } bool Pop(char* c)//出栈 { if (StackTop >= 0) { *c = TheStack[--StackTop]; return true; } else { return false; } } bool TopV alue(char* c)//取栈顶元素值 { if (StackTop > 0) /* not null */ { *c = TheStack[StackTop-1]; return true; } else { return false; } } void PrintStack()//打印栈的元素 { int i; for (i=0; i { printf("%c", TheStack[i]); } printf("\n"); } 7软件的测试 7.1调试 在visual c++ 6.0 下调试出现一下问题: 编译原理\ljsimple\prece.h(49) : warning C4013: 'CharToIndex' undefined; assuming extern returning int 编译原理\ljsimple\main.c(11) : warning C4005: 'NULL' : macro redefinition 编译原理\ljsimple\parse.h(37) : warning C4715: 'Reduce' : not all control paths return a value 具体的这些问题全都出现在文件调用过程中,修改个别输出方面的问题后成功得以解决。 7.2测试结果 调试成功后运行如下: 8 研制报告 这次编译原理课程设计的题目是用简单优先分析法进行DO-WHILE循环语句的语法分析,并输出四元式.设计的特点是利用定义每个终极符和非终极符之间优先关系,来进行符号的移进与规约,如果栈顶符号优先级低于该单词,继续读入;若栈顶符号优先级高于或等于读入符号,则找句柄进行归约,找不到句柄就继续读入。这样使得程序简化,只需定义一个栈用来存放移进的字符,然后用栈顶指针指向它后与待移进字符比较优先级即可,设计简单.此设计的严重不足是只能进行一个固定句子的词法与语法分析,因为在定义优先关系时已固定了DO,和WHILE的每个字符之间的优先关系,且赋值表达式和条件式也已固定,所以只能进行本程序已约定好的语句.最大的收获是在提出一个难题以后,如果能比较顺手的解决的话,那是一件比较开心的事。只是有些时候越想问题就会越多,也越难解决,那就得慢慢调试,慢慢推导了。相信只要想得出,就能调得出,当然耐心是很重要的,花在上面的时间也是要多一点的。 完成此次课程设计以后,觉得自己在编译原理的学习中存在很多的不足和需要提高的地方.通过对简单优先法翻译程序的编程也使自己在编写编译程序上有了感官的认识,且能力也得到了一定的提高!虽然此程序还存在很多的缺点与不足,但在将来的学习中我会不断的完善此部分知识.独立的完成程序以后也有不少收获,为自己在以后的学习中做了很好的铺垫! 9 参考文献 [1]张素琴、吕映芝、蒋维杜、戴桂兰等.编译原理(第二版).清华大学出版社.2005 年2月 参考书: [1]何炎祥.编译原理(第二版).武汉:华中科技大学出版社.2005年8月[2]陈火旺等.程序设计语言编译原理(第3版).国防工业出版社.2003年2月[3]胡伦骏.编译原理(第2版).电子工业出版社.2005年2月 [4]陈意云.编译原理与技术(第二版).中国科学技术大学出版社.2002年1月[5]胡元义等.编译原理实践教程.西安电子科技大学出版社.2002年1月 [6]王雷等.编译原理课程设计.机械工业出版社.2005年3月 课程设计任务书 学生姓名:赵旭林专业班级:计算机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日 老板要我查出明天飞机起飞的时间。The boss wants me to find out the plane took off time tomorrow. 首先,我们需要买些食物。 First, we need to buy some food. 所有人都确切的说是。 Everyone be exact. 这件事永远改变了我的生活。 It changed my life forever. 例如,机器人可以为人类作为危险的工作。 For example, the robot can work as a dangerous for humans. 从现在开始你就是我的搭档了。From now on you are my partner. 那个聪明的小孩会从1数到100. The clever child can count from 1 to 100. 人与自然和平相处时必须的。 Man and nature live in peace when necessary. 厨师们正在为晚餐做准备。 The chefs are preparing for dinner. 你能告诉我什么地方下车吗? Can you tell me where to get off? 快点,坐上那辆公交车。 Come on, sit on the bus. 那个电话没有接通。 The phone is switched on. 我们要多花时间和家人聚在一起。We should spend more time together with my family. 你能告诉我如何到达那家旅馆?Can you tell me how to get to the hotel? 每天早晨,许多人清早起床锻炼身体。 Every morning, many people get up early in the morning exercise. 明天记得把我的笔记本归还给我。Remember to return my laptop tomorrow to me. 当你帮助别人的时候,你一定会很快乐。 When you help others, you will be very happy. 目录 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; 由于时间紧迫而匆忙行事的习惯用语 今天要讲的习惯用语都是用来描述“由于时间紧迫而匆忙行事”的。第一个是:slapdash。 这是个合成词,由slap和dash两部分组成。Slap最常用的意思是拍击巴掌,这当然是即刻间进行的行动,而dash这个词也常指某种来去匆匆的行动,所以这两个词合在一起必然是说一种匆忙的事儿了。 Slapdash可以用来描绘各种各样的事情,比如房屋建筑、汽车修理或者业务规划、论文写作等。我们来看个例子来体会slapdash这个习惯用法的确切意思吧。 As soon as I opened the front door, the doorknob came off in my hand. And it got worse! The more I walked around and looked, the more I realized what a poor, slapdash job the builders had done. 我一开前门,门把手就掉了下来。接下来的情况甚至更糟。我在房子里四处观看,越看越明白那些建筑工人只是马马虎虎地装修了一下。 这段话里的slapdash是修饰job这个名词的形容词,但是slapdash也可以当名词或者动词用。例如这个验收房子的人可以这样说那些建筑工人:The builders had done the job with slapdash.或者The builders slapdashed through the job. 这两句话的意思都是“建筑工人马虎了事”。 第二个表示匆忙行事的习惯用语: slap together。这个习惯用语跟slapdash不同的地方在于: slapdash带有急匆匆而草率从事的含义,而slap together却绝对没有因快就马虎的意思。 我们看个例子来探究一下slap together这个习惯用语的意思。这段话说的是美国内战期间的一次无人不知的演讲。有一天,忙于战事的林肯总统必须去宾西法尼亚州葛底斯堡镇为葛底斯堡国家公墓的落成典礼献词。这个国家公墓是为那些在葛底斯堡战役中的阵亡将士修建的。当时林肯只有坐火车的那几分钟时间作准备。那天的主要演讲人是一位著名的演说家,林肯要在他之后讲话,于是林肯在一个信封的背面匆匆写下了自己的讲话稿。 例句2: The little speech Lincoln slapped together was no more than three minutes long. But eve n today many Americans know it by heart, and it still echoes in the heart of the nation. 林肯匆匆写成的简单演讲还不到三分钟长,但是至今还有不少美国人能背诵这篇讲话,它仍然能在很多人心中引起共鸣。 课程设计任务书 学生姓名:辛波专业班级:计算机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.doczj.com/doc/b611211445.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语句,执行 下一条语句。 Unit1: 1.那部关于古代战争的电影采用了先进的技术,令观众仿佛身临其境。(illusion)Thanks to modern technology, the film about that ancient battle gives the audience the illusion of being on the battlefield themselves. 2.在那场大火中,整个古城毁于一旦,但是这块石碑却幸运地保存了下来。(devastate)That ancient city was devastated by the fire, but fortunately the stone tablet survived. 3.他们看了那段录像,听了那位妇女的讲述,心里充满了对那位地震孤儿的同情。(fill with)The videotape and the story by the woman filled them with sympathy for the child who had become an orphan in the earthquake. 4.那场大地震中,我们听到过太多太多教师的事迹,他们拒绝离开学生自己逃生,献出了 自己的生命。(leave behind) In that earthquake, we heard many stories of teachers who had refused to leave their students behind and laid down their lives. 5.豫园的建造始于1558年,但由于资金短缺时建时停,1578年才建成。(off and on)The construction of the Yu Yuan Garden began in 1558, but it was not completed until 1578 because building went off and on for lack of money. 6.1980年我遇到她时,她刚从国外读完硕士回来。(meet up with) In 1980, when I met up with her, she had just returned from abroad with a master’s degree. 7.这是我第一次来纽约,但我还是设法找到了那家小公司。(find one’s way to) It was my first visit to New York, but I managed to find my way to the little firm. 8.在电影界要达到顶峰时非常困难的,但是作为一名导演谢晋做到了。(make it) It is hard to make it to the top in the movie industry, but as a director Xie Jin did it. U2: 1.如今许多爱慕虚荣的年轻人,尽管还不富裕,但却迷上了漂亮的小汽车。(vain, be obsessed with) Many vain young people are obsessed with fancy cars despite the fact that they are not rich enough to afford them. 2.当他的婚外恋被妻子发现后,他们的婚姻终于破裂了。(affair, fall apart) Their marriage finally fell apart when his affair with another woman was found out by his wife. 3.那位艺术家为了获得创作的灵感,在农村住了三年,放弃了生活上的许多享受。 (inspiration, deny oneself something) For artistic inspiration, the artist lived in the country for three years, where he denied himself 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循环语句的翻译程序设计(递归下降法、输出三地址表示)
初级中学英语句子翻译全套汇编
FOR循环语句的翻译程序设计
DO-WHILE循环语句的翻译程序设计
JavaScript流程控制语句
英语口语巧用 英语翻译常用语句
for循环语句的翻译
程序流程控制语句
基础英语(综合教程)2课后句子翻译
WHILE循环语句的翻译程序设计(简单优先法、输出四元式)