编译IF-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)代码+报告
学号:0120910340205
编译课程设计
题目IF-ELSE条件语句的翻译程序设计(简单优先法、输出三
地址表示)
学院计算机科学与技术学院专业计算机科学与技术专业班级计算机科学与技术0902班姓名
指导教师郭羽成
2012 年 1 月 5 日
课程设计任务书
学生姓名:专业班级:计算机0902班
指导教师:郭羽成工作单位:计算机科学与技术学院
题目: IF-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)初始条件:
理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:
1 系统描述(问题域描述);
2 文法及属性文法的描述;
3 语法分析方法描述及语法分析表设计;
4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;
5 编译系统的概要设计;
6 详细的算法描述(流程图或伪代码);
7 软件的测试方法和测试结果;
8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);
9 参考文献(按公开发表的规范书写)。
时间安排:
设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名: 2011年 11月 18日
系主任(或责任教师)签名: 2011年 11月 18日
一.系统描述
I F-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)
对条件语句: IF 〈布尔表达式〉 THEN 〈赋值语句〉 ELSE 〈赋值语句〉(1)写出符合语法分析方法要求的文法和属性文法描述。
(2)给出语法分析方法的思想及分析表设计。
(3)给出中间代码序列的结构设计。
(4)完成相应的词法分析、语法分析和语义分析程序设计。
(5)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
二.文法及属性文法的描述
if then else文法的产生式为:
①S→if E then B else B
②E→id1 A id2 | id1
③A→< | > | ==
④B→id1=num
根据条件语句: IF 〈布尔表达式〉 THEN 〈赋值语句〉 ELSE 〈赋值语句〉,描述相应的文法,其中共有4个非终结符(S,E,A,B),终结符10个(if,then,else,id1,id2,<,>,==,=,num)。E为布尔表达式,B为赋值语句。
三.语法分析方法描述及语法分析表设计
首先根据已知优先文法构造相应的优先关系矩阵,并将文法的产生式保存,设置符号栈S,算法步骤如下:
1)将输入符号串a1a2……an#依次逐个存入符号栈S中,直到遇到栈顶符号ai的优先性>
下一个待输入符号aj时为止。
2)栈顶当前符号ai为句柄尾,由此向左在栈中找句柄的头符号ak,即找到 ak-1 为止。 3)由句柄ak……ai在文法的产生式中查找右部为ak……ai的产生式,若找到则用相应左 部代替句柄,若找不到则为出错,这是可断定输入串不是该文法的句子。 4)重复上述的三个步骤直到归约完输入符号串,栈中只剩文法的开始符号为止。 按照优先关系矩阵对输入串if x>y then a=2 else u=9 的分析过程 步骤符号栈优先关系移近或归约输入串 1 # < 移近if x>y then a= 2 else u=9# 2 #if < 移近x>y then a=2 else u=9# 3 #if x < 移近>y then a=2 else u=9# 4 #if x> < 移近y then a=2 else u=9# 5 #if x>y > 归约then a=2 else u=9# 6 #if E = 移近then a=2 else u=9# 7 #if E then < 移近a=2 else u=9# 8 #if E then a = 移近=2 else u=9# 9 #if E then a= = 移近 2 else u=9# 10 #if E then a=2 > 归约else u=9# 11 #if E then B = 移近else u=9# 12 #if E then B else < 移近u=9# 13 #if E then B else u = 移近=9# 14 #if E then B else u= = 移近9# 15 #if E then B else u=9 > 归约# 16 #if E then B else B > 归约# 17 #S 分析成功# 四.中间代码形式的描述及中间代码序列的结构设计 4.1中间代码形式描述 此设计要求使用的是三地址的中间代码,三地址代码是由下面一般形式构成的语句序列: x:=y op z; 其中x,y,z为名字,常数或编译时产生的临时变量;op代表运算符号如标点,浮点运算符号 等等。每个语句的右边只能有一个运算符。 表达式x + y * z翻译成的三地址语句序列是: t1 := y * z t2 := x + t1 常用的三地址语句有: 赋值语句x := y op z,x := op y,x := y 无条件转移goto L 条件转移if x relop y goto L 过程调用param x 和call p , n 过程返回 return y 索引赋值x := y[i]和 x[i] := y 地址和指针赋值x := &y,x := *y和*x := y 4.2中间代码序列的结构设计 在本程序的文法中,中间代码的三地址码为: L1:if id1 A id2 goto L2 goto L3 L2:id1=num goto Lnext L3:id1=num goto Lnext Lnext: 其中id1,id2在具体的程序运行中用输入的单词符号所确定,A代表<,>,==三种符号,num 代表数字。 五. 编译系统的概要设计 在词法分析部分,应用函数word()来识别标识符和关键字,其中用ASCII码来识别字母,如遇到不合法的字符就会报错。 在语法分析部分,用简单优先法完成此次文法分析的关键在于构造该文法的简单优先关 系矩阵,以及如何运用该矩阵完成移入和归约的过程,从而完成整个文法的分析。 求非终结符号的FIRST集和LAST集,利用FIRST集和LAST集求出优先关系,最终构造出简单优先关系矩阵。 在整个简单优先关系矩阵构造成功后,我们还应该构造一个堆栈,用来存放符号;并将符号栈中的栈顶元素与输入串队列的队头元素进行比较,然后查找简单优先关系矩阵得到相应的优先关系,从而完成分析表中所要求完成的动作,如果栈中的栈顶元素比输入串队列的队头元素优先关系为<或=则将输入串队列的队头元素移入栈中,若为>则要将栈中的符号进行归约,这时要找到栈中的句柄归约,若找不到句柄进行归约则输入的符号串不是该文法的句子。找到句柄归约完之后再重复上面的步骤,最后符号栈中最后只剩该文法的开始符号,则整个过程分析成功,否则则分析失败或出现错误。根据栈的归约操作通过cout语句将三地址输出。 六.源代码 #define N 100 #include #include #include using namespace std; static char a[N]; /*存放输入的语句*/ static char str[N]; /*存放构成单词符号的字符串*/ static int b[N]; static char copyy[N][N]; static char ch; static int i=0; static int j=0; static int m; static int n; int p; int h[14][14]; int l[14][14]; struct list //定义结点{ int data; list *next; }; class stack//定义栈类{ private: list *ptr; public: stack() { ptr=NULL; } void push(int i); int pop(); }; void stack::push(int x) { list *q=new list; q->data=x; q->next=ptr; ptr=q; } int stack:: pop() {list *p; int value; value=ptr->data; p=ptr; ptr=ptr->next; return value; } //***************词法分析程序*********************** int word() { if((a[i]>=65&&a[i]<=90)||(a[i]>=97&&a[i]<=122)) {/* 识别标识符和关键字*/ ch=a[i]; str[j]=ch; i++; j++; while((a[i]>=65&&a[i]<=90)||(a[i]>=97&&a[i]<=122 )||(a[i]>=48&&a[i]<=57)) {ch=a[i]; str[j]=ch; i++; j++; } if(a[i]!=' ') i--;/*使i回调*/ if(strcmp(str,"if")==0||strcmp(str,"IF")==0) return(2); else if(strcmp(str,"then")==0||strcmp(str,"THEN")==0) return(3); else if(strcmp(str,"else")==0||strcmp(str,"ELSE")==0) return(4); else if(strcmp(str,"AND")==0||strcmp(str,"and")==0) else if(strcmp(str,"or")==0||strcmp(str,"OR")==0) return(6); else if(strcmp(str,"not")==0||strcmp(str,"NOT")==0) return(7); else return(1); } else if(a[i]>=48&&a[i]<=57) {/*识别常数*/ ch=a[i]; str[j]=ch; i++; j++; while((a[i]>=48&&a[i]<=57)&&i { ch=a[i]; str[j]=ch; i++; j++; } if(a[i]!=' ') i--; return(8); } else if(a[i]=='<') {ch=a[i]; str[j]=ch; i++; j++; {ch=a[i]; str[j]=ch; return(10); } else { i--; return(9); } } else if(a[i]=='>') {ch=a[i]; str[j]=ch; i++; j++; if(a[i]=='=') {ch=a[i]; str[j]=ch; return(12); } else { i--; return(11); } } else if(a[i]=='!') {ch=a[i]; str[j]=ch; i++; j++; if(a[i]=='=') {ch=a[i]; str[j]=ch; return(13); } else { i--; return(-1); } } else if(a[i]=='=') {ch=a[i]; str[j]=ch; i++; j++; if(a[i]=='=') {ch=a[i]; str[j]=ch; return(15); } else { i--; return(14); } } else if(a[i]=='(') {ch=a[i]; str[j]=ch; return(17); } else if(a[i]==')') {ch=a[i]; str[j]=ch; return(18); } else if(a[i]==' ') { return(16); } else return (-1); } int bn() { int k=0; while(k b[n]=word(); if(b[n]==16) { i++; k=i; n--; } else if(b[n]!=-1) { i++; k=i; strcpy(copyy[n],str); cout< } else { cout< cout<<"error!词法分析器分析到第"< break; } n++; for(m=0;m str[m]='\0'; j=0; } } stack A,B; void inserth(int i,int j) {if(!h[i][j]) { h[i][j]=1; A.push(h[i][j]); } } void insertl(int i,int j) {if(!l[i][j]) { l[i][j]=1; B.push(l[i][j]); } } int sentence_judge() { if(b[0]==2) { if(b[1]==1) { if(b[2]==3) { if(b[3]==1) { if(b[4]==14) { if(b[5]==8) { if(b[6]==4) { if(b[7]==1) { if(b[8]==14) { if(b[9]==8) return (1); else return (-1); } else return (-1); } else return (-1); } else return (-1); } else return (-1); } else return (-1); } else return (-1); } else if((b[2]==9)||(b[2]==11)||(b[2]==15)) { if(b[3]==1) { if(b[4]==3) { if(b[5]==1) { if(b[6]==14) { if(b[7]==8) { if(b[8]==4) { if(b[9]==1) { if(b[10]==14) { if(b[11]==8) return (2); else return (-1); } else return (-1); } else return (-1); } else return (-1); } else return (-1); } else return (-1); } else return (-1); } else return (-1); } else return (-1); } else return (-1); } else return(-1); } else return(-1); } void sentence() { char c[][N]={"S→if E then B else B","E→id1 A id2|id1","A→<|>|==","B→id1=num"}; char d[][N]={"S","E","A","B","if","then","else","id1","id2","<",">","==","=","num"};//非终结符4个,终结符10个 char e[][N][N]={{"S","→","if","E","then","B","else","id1","=","num","#"},{"E","→","id1","A", "id2","|","id1","#"},{"A","→","<","|",">","|","==","#"},{"B","→","id1","=","num","#"}}; int f[N][N]; int g[N][N];//存放关系,1代表=关系,2代表<关系,3代表>关系 int k,n; i=0; g[1][5]=1;g[2][8]=1; g[3][6]=1;g[4][2]=1; g[4][7]=2;g[5][3]=1; g[5][7]=2;g[6][3]=1; g[6][7]=2;g[7][2]=1; g[7][5]=3;g[7][9]=2; g[7][10]=2;g[7][11]=2; g[7][12]=1;g[8][5]=3; g[9][8]=3;g[10][8]=3; g[11][8]=3;g[11][13]=1; g[13][6]=3; cout<<"条件语句的文法如下:"< cout< for(j=0;j<4;j++) { for(i=0;i<4;i++) { if(strcmp(e[j][0],d[i])==0) for(k=0;k<14;k++) if(strcmp(e[j][2],d[k])==0) inserth(i,k); } } for(j=0;j<4;j++) { for(k=0;k<8;k++) { if(strcmp(e[j][k],"|")==0) { for(i=0;i<4;i++) { if(strcmp(e[j][0],d[i])==0) for(m=0;m<14;m++) if(strcmp(e[j][k+1],d[m])==0) inserth(i,k+1); } } } } for(j=0;j<4;j++) { n=0; while(strcmp(e[j][n],"#")!=0) n++; for(i=0;i<4;i++) { if(strcmp(e[j][0],d[i])==0) for(k=0;k<14;k++) { if(strcmp(e[j][n-1],d[k])==0) insertl(i,k); } } } for(j=0;j<4;j++) { for(k=0;k<8;k++) { if(strcmp(e[j][k],"|")==0) { for(i=0;i<4;i++) { if(strcmp(e[j][0],d[i])==0) for(m=0;m<14;m++) if(strcmp(e[j][k-1],d[m])==0) insertl(i,k-1); } } } } for(j=0;j<4;j++) { for(i=2;i<10;i++) { if(strcmp(e[j][i],"|")!=0&&strcmp(e[j][i+1],"|")!=0&&strcmp(e[j][i+1],"#")) { for(k=0;k<14;k++) if(strcmp(e[j][i],d[k])==0) f[j][k]=1; } } } if(sentence_judge()!=-1) //sentence_judge()进行规约 cout<<"输入的句子符合语法要求!"; else cout<<"输入的句子不符合语法要求!"; } void code() { if(sentence_judge()==1) { cout<<"L1: "<<"if "< cout<<" goto L3\n"; 课程设计任务书 学生姓名:赵旭林专业班级:计算机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、利用句子结构推断词义 句式的整齐、语意的对应是汉语一大特点,文言文中表现尤为突出,根据这一特点可以推知词义,进而准确地理解原文。 如《捕蛇者说》“殚其地之出,竭其庐之入”中“竭”的含义是“使……竭”,即“尽”的意思,那么与其对应的“殚”的含义也可为“使……殚”,即“尽”的意思。 3、利用词的构成推断词义 在文言文里,结构相同的词语或者作同一句子成分的词,往往在意义上具有相同、相近或相反的特点,利用这一特点,可以正确解释词语。 如:“优柔寡断”,“优”对“寡”,“柔”对“断”,后面的“寡断”是“少果断”,那么前面的“优柔”就应该是“多柔和”。 《文言文句子的翻译》 【教学目的】 1、落实《考试说明》“阅读浅显文言文能力”的训练,集中训练文言句子翻译的能力。 2、在学生已掌握文言文翻译的一般原则、技巧的基础上,加强踩点得分意识,以难词难句为突破口,指导学生掌握好高考文言句子翻译的方法技巧。 【教学重难点】 1、抓关键词句(关键词语、特殊句式),洞悉得分点。 2、掌握解题步骤、翻译方法,学以致用。 3、借助积累(课内文言知识、成语、语法结构、语境等),巧解难词难句。 【教学设计】 1、本课以学法指导和能力训练为重点,帮助学生归纳系统的文言句子的翻译方法(直译),并指导其应用。 2、在学生掌握了“信、达、雅”三字翻译目标和“翻译六字诀”的基础上,针对学生在文言翻译中的盲点,力图引导学生总结归纳出解决翻译疑难的技巧,并通过训练验证这些技巧的可操作性,使学生能举一反三,从而增强文言文翻译的信心。 3、本设计重在让学生易于掌握,便于利用,注重实用性和可操作性。 【教学步骤】 一.课堂导入 1、提问:从高考的特点与考查目的出发,文言文翻译要严格遵循的两个原则是什么? 第一: 忠于原文,力求做到_____、_____、_____ 。(信达雅) 第二: 字字落实,以_____为主,以_____为辅(直译意译) (①让学生用自己语言表述文言文翻译“信、达、雅”三字原则的理解 ②直译:指译文要与原文保持对应关系,重要的词语要相应的落实,要尽力保持原文遣词造句的特点和相近的表达方式,力求语言风格也和原文一致。意译:指着眼于表达原句的意思,在忠于愿意的前提下,灵活翻译原文的词语,灵活处理原文的句子结构。) 2、提问: 文言文翻译的“六字决”? ①对:一般指把原名中的文言单音词对译为现代汉语的双音或多音词。 ②换:有些词语意义已经发展,用法已经变化,语法已经不用,在译文中,应换这些古语为今语。 ③留:人名、地名、年号、国号、庙号、谥号、书名、物名都保留不译;与现代汉语表达一致的词语可保留。 ④删:一些没有实在意义的虚词,如表敬副词、发语词、部分结构助词等,同义复用的实词或虚词中的一个和偏义复词中陪衬的词应删去。 ⑤补:省略的部分;词语活用相应的部分;代词所指的内容;使上下文衔接连贯的内容等。 目录 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 属性文法的描述 文言文翻译方法及解题技巧 文言文翻译方法 一、基本方法:直译和意译 文言文翻译的基本方法有直译和意译两种。 所谓直译,是指用现代汉语的词对原文进行逐字逐句地对应翻译,做到实词、虚词尽可能文意相对。直译的好处是字字落实;其不足之处是有时译句文意难懂,语言也不够通顺。 所谓意译,则是根据语句的意思进行翻译,做到尽量符合原文意思,语句尽可能照顾原文词义。意译有一定的灵活性,文字可增可减,词语的位置可以变化,句式也可以变化。意译的好处是文意连贯,译文符合现代语言的表达习惯,比较通顺、流畅、好懂。其不足之处是有时原文不能字字落实。 这两种翻译方法当以直译为主,意译为辅。 二、具体方法:留、删、补、换、调、变。 “留”:就是保留。凡是古今意义相同的词,以及古代的人名、地名、物名、官名、国号、年号、度量衡单位等,翻译时可保留不变。例如:《晏子使楚》中的“楚王”、“晏婴”、“晏子”等不用翻译。 “删”,就是删除。删掉无须译出的文言虚词。例如:“寡人反取病焉”的“焉”是语气助词,可不译,本句的意思就是“我反而自讨没趣。”(《晏子使楚》)又如:“子猷、子敬俱病笃,而子敬先亡”中的“而”是连词,可不译,整句意思是“子猷与子敬都病重,子敬先死去。” “补”,就是增补。(1)变单音词为双音词,如《桃花源记》中“率妻子邑人来此绝境”,“妻子”一词是“妻子、儿女”的意思;(2)补出省略句中的省略成分,如《人琴俱亡》中“语时了不悲”,翻译为:(子猷)说话时候完全不悲伤。 “换”,就是替换。用现代词汇替换古代词汇。如把“吾、余、予”等换成“我”,把“尔、汝”等换成“你”。 “调”就是调整。把古汉语倒装句调整为现代汉语句式。例如《人琴俱亡》中“何以都不闻消息”,“何以”是“以何”的倒装,宾语前置句,意思是“为什么”。 “变”,就是变通。在忠实于原文的基础上,活译有关文字。“子猷问左右”(人琴俱亡))中的“左右”指的是“手下的人”,“左右对曰”(《晏子使楚》中的“左右”指的是“近臣”。 古文翻译口诀 古文翻译,自有顺序,首览全篇,掌握大意; 先明主题,搜集信息,由段到句,从句到词, 全都理解,连贯一起,对待难句,则需心细, 照顾前文,联系后句,仔细斟酌,揣摩语气, 力求做到,合情合理,词句之间,联系紧密。 若有省略,补出本意,加上括号,表示增益。 人名地名,不必翻译,人身称谓,依照贯例, "吾""余"为我,"尔""汝"为你。省略倒装,都有规律。 实词虚词,随文释义,敏化语感,因句而异。 译完之后,还须仔细,逐句对照,体会语气, 句子流畅,再行搁笔。 三、考试文言文翻译方法十字诀例析 (一)增。就是增补,在翻译时增补文言文省略句中的省略成分。注意:补出省略的成分或语句,要加括号。 文言文哲理句子加翻译 经典句子 文言文哲理句子加翻译 1、见侮而不斗,辱也。译:当正义遭到侮辱、欺凌却不挺身而出,是一种耻辱的表现。 2、不戚戚于贫贱,不汲汲于富贵。译:不为贫贱而忧愁,不热衷于发财做官。 3、一寸山河一寸金。译:祖国的每一寸山河比一寸黄金还要宝贵,是绝不能让给外人的。 4、勿以恶小而为之,勿以善小而不为。译:对任何一件事,不要因为它是很小的、不显眼的坏事就去做;相反,对于一些微小的。却有益于别人的好事,不要因为它意义不大就不去做它。 5、不迁怒,不贰过。译:犯了错误,不要迁怒别人,并且不要再犯第二次。 6、邑人奇之,稍稍宾客其父,或以钱币乞之。译:同县的人对他能作诗感到惊奇,渐渐地请他的父亲去做客,有的人还用钱求仲永题诗。 7、三人行,必有我师焉,择其善者而从之,其不善者而改之。译:三个人在一起,其中必有某人在某方面是值得我学习的,那他就可当我的老师。我选取他的优点来学习,对他的缺点和不足,我会引 以为戒,有则改之。 8、人生自古谁无死,留取丹心照汉青。译:自古以来,谁都难免会死的,那就把一片爱国的赤胆忠心留在史册上吧! 9、三人行,必有我师焉;择其善者而从之,其不善者而改之。译:几个人在一起走路,其中一定有人可以当我的老师。应当选择他们的优点去学习,看到自己也有他们的缺点就要改正。 10、中峨冠而多髯者为东坡。译:中间戴着高高的帽子长着浓密胡子的人是苏东坡。 11、有益国家之事虽死弗避。译:对国家有利的事情要勇敢地去做,就算有死亡的危险也不躲避。 12、良药苦于口而利于病,忠言逆于耳而利于行。译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。 13、少顷,但闻屏障中抚尺一下,满坐寂然,无敢哗者。译:过了一会儿,只听到围幕中抚尺一拍,全场都安静下来,没有一个敢大声说话的。 14、小来思报国,不是爱封侯。译:从小就想着报效祖国,而不是想着要封侯当官。 15、屠大窘,恐前后受其敌。译:屠户很窘迫,恐怕前后受到两狼的攻击。 16、宾客意少舒,稍稍正坐。译:宾客们的心情稍微放松了,身子渐渐坐正了。 课程设计任务书 学生姓名:辛波专业班级:计算机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日 《文言文语句翻译》(高三参赛) 一、设计说明 高考对文言文语句翻译的考查,虽然材料选自课外,但是考查立足于课内,立足于考查学生对所学文言知识能否灵活运用之上,对学生理解并翻译语句能力的客观考查,符合课程改革和语文教学的发展方向。结合《课程标准》,立足教材本身,勾连高考试题,我设计引导学生在理解和运用语言的实践活动中悟法、学法、用法,调动学生自主、合作、探究学习的积极性,进行适合学生实际水平的有效复习。 该学案分三部分,课前案重在引导学生了解高考命题要求及考点阐释,通过自主复习,运用课内掌握的文言基础知识,总结出语句翻译的具体方法。课中案重在就学生自主反馈的翻译方法进行展示和纠正,以练—讲—练的形式,将课内例句与高考样题衔接起来,渐次推进,引导学生灵活运用翻译方法,总结答题规律,提升掌握语言文字的能力。课后案作为当日作业,旨在让学生夯实基础,巩固演练,继续钻研,锐意进取。二、材料依据 必修教材篇目《师说》《赤壁之战》《鸿门宴》《齐桓晋文之事》等,《〈史记〉选读》篇目《信陵君窃符救赵》《廉颇蔺相如列传》及08—10年高考部分省份样题。 三、设计内容: 学习目标: 知识与能力:了解并掌握文言文语句翻译的具体要求,探求翻译的具体方法。 过程与方法:解读考点,夯实旧知,练中悟法、学法。 情感态度与价值观:培养扎实严谨的学习作风。 课前复习步骤: 一、解读考点 阅读并勾画要点:考纲中“理解并翻译文中的句子”,意思是说“翻译”须以“理解”为前提,“理解”,就是准确把握字句在文段中的正确的意义;而“翻译”则是将文言句子译为规范的现代汉语。考查的句子是有特点的,在实词、虚词、句式、活用、通假字等方面有典型性的句子。测试题目出在“课外”,答案在“课内”。这里“课外”的含义一般指“选材”是学生没学过的,题目是没做过的;“课内”的含义可从两个方面理解:一是指测试的知识是学生“课内”学过的,二是学生可以利用学过的知识加以推断。 二、明确原则 文言文语句翻译原则——信(忠实原文)、达(文意通达流畅)、雅(语言富有文采)。 三、链接课内 根据参考篇目,结合梳理笔记,复习文言基础知识。 四、探求方法 1、翻译下列句子,注意句中划线和括号处,并用一个词概括所用方法。要求书写规范。第一组:魏安釐王二十年,秦昭王已破赵长平军,又进兵围邯郸。 译文:。 劳苦而功高如此,未有封侯之赏…… 译文:。 WHILE循环语句的翻译程序设计(简单优先法、输出四元式) 1 需求说明或问题描述 1.1 问题描述 对C++中while循环语句的理解及分析,通过编译中的词法分析、语法分析、语义分析及中间代码生成等编译过程,用简单优先分析法分析并翻译while语句。 1.2 需求说明 1 写出符合给定的语法分析方法的文法及属性文法 2 完成题目要求的中间代码四元式的描述 3 写出给定的语法分析方法的思想,完成语法分析及语义分析程序设计 4 设计若干用例,上机通过测试 2 文法及语法设计 2.1文法及属性文法: 文法G=(V N ,V T ,P ,S) 其中V N={S , B, E, C, A, B, P, T} V T={w, (, ), { ,}, i, ;} P={ S -> w(B){E} E -> C C -> CA C -> A A -> iPA A -> i; P -> +|-|*|/ B -> iTi B-> i T -> >|<|>=|<=|== } 2.2 语法分析方法描述及语法分析表设计 2.2.1 语法分析方法描述: 简单优先分析法是按照文法符号(终极符和非终极符)的优先关系确定句柄的。 基本思想可设计如下,首先根据已知优先文法构造相应优先关系矩阵,并将WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)
各种文言文最常用的翻译方法整理
文言文句子的翻译
FOR循环语句的翻译程序设计
DO-WHILE循环语句的翻译程序设计
文言文翻译方法及解题技巧
文言文哲理句子加翻译
for循环语句的翻译
《文言文语句翻译》
WHILE循环语句的翻译程序设计(简单优先法、输出四元式)