IF-ELSE条件语句的翻译程序设计(递归下降法、输出四元式)
学号:012091034001
课程设计
题目IF-ELSE条件语句的翻译程序设
计(递归下降法、输出四元式)
学院计算机科学与技术学院
专业计算机科学与技术专业
班级计算机0909
姓名旭
指导教师高曙
2012 年 1 月 6 日
课程设计任务书
学生姓名:旭专业班级:计算机009班
指导教师:高曙工作单位:计算机科学与技术学院
题目: IF-ELSE条件语句的翻译程序设计(递归下降法、输出四元式)初始条件:
理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体
要求)
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码四元式的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:
1 系统描述(问题域描述);
2 文法及属性文法的描述;
3 语法分析方法描述及语法分析表设计;
4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;
5 编译系统的概要设计;
6 详细的算法描述(流程图或伪代码);
7 软件的测试方法和测试结果;
8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);
9 参考文献(按公开发表的规范书写)。
时间安排:
设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名: 2011年 12月 23日系主任(或责任教师)签名: 2011年 12月 23日
目录
目录 (2)
1、系统描述 (3)
2、文法及属性文法的描述 (3)
2.1文法的描述 (3)
2.2属性文法的描述 (3)
3、语法分析方法描述及语法分析表设计 (4)
3.1语法分析方法描述 (4)
3.2语法分析表设计 (5)
4、按给定的题目给出中间代码形式的描述及中间代码序列的结构设计 (5)
4.1if-else四元式表示的描述 (5)
4.2if-else三地址四元式表示序列的就够设计 (5)
5 、编译系统的概要设计 (5)
5.1概要分析 (5)
5.2词法分析的具体实现 (6)
6、详细的算法描述(流程图或伪代码) (6)
6.1词法分析输出部分 (6)
6.2流程图 (7)
7、软件的测试方法和测试结果 (8)
8、研制报告 (10)
9、参考文献 (11)
10、附加代码 (11)
IF-ELSE条件语句的翻译程序设计(递归下
降法、输出四元式)
1、系统描述(问题域描述)
本次实验使用windows XP的visual C++软件,利用递归下降法实现IF-ELSE的条件语句的翻译程序设计,输出四地址表示,程序只能处理简单的布尔表达式和最简单的赋值语句,布尔表达式能够实现大于和小于的识别,也能处理关系运算符>=和<=的布尔表达式。
程序的词法分析的结果和用到的文法是显示到dos界面上,而语法分析的结果则保存在1.txt中,打开它就知道语法分析的结果和中间代码的输出了。
2.文法及属性文法的描述;
2.1文法的描述:
if->X then Y else Y;
X->id X->id>id; X->id<=id; X->id>=id; Y->id=id; 2.2属性文法的描述: 属性文法(也称属性翻译文法)是Knuth在1968年首先提出的。 它是在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)配备若干相关的“特性”(称为属性)。 产生式语义规则 S->if E then S1else S2E.true:=biaozhi++; E.fals:=ebiaozhi++; S1.next:=S.next; S2.next:=S.next; S.code:=E.cod|| gen(E.true‘:’)||S1.code|| gen(‘goto’ S.next)|| gen(E.false‘:’)||S2.code 3 语法分析方法描述及语法分析表设计; 3.1语法分析方法描述: 在程序语言的语法定义中有许多采用递归定义。我们在对它进行语法分析时,编制的处理程序也采取递归的方式,可使其结构简单易读。但由于频繁地调用子程序大大地降低了分析速度。 递归下降法的主要思想是:对每个非终结符按其产生式结构写出相应语法分析子程序。因为文法递归相应子程序也递归,子程序的结构与产生式结构几乎一致。所以称此种方法称为递归子程序法或递归下降法。 程序是以一个个单词的形式向后读取,读取到if之后就开始执行E的递归子程序,程序根据布尔表达式的真假,进而选择执行相应的分支,即如果布尔表达式为真,就执行then后面的赋值语句,如果布尔表达式为假,就执行else后面的赋值语句,递归子程序E分别赋予布尔表达式真和假不同的地址,并将跳转相应的信息写到处理四元式的结构体数组中去,E执行完以后,回到S中继续执行后面的,读取到then之后,就表示当条件为真的时候,执行then之后的赋值表达式,处理赋值的信息写到处理四元式的结构体数组中去,当读取到else之后,同理的执行当条件为假的时候的赋值表达式,处理完了之后赋值相应的信息也写到处理四元式的结构体数组中去,这样反复执行就实现的对语法的分析。 3.2语法分析表设计: 实验要求的是递归下降法,主要是调用不同的递归子程序,所以没有什么语法分析表,流程图在后面。 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 4.1if-else四元式表示的描述: 中间代码,也称中间语言,是复杂性介于源程序语言和机器语言的一种表示形式。三地址代码可看成中间代码的一种抽象形式。 三地址代码通常有三种表示方法:四元式、三元式、间接三元式。我使用三元式输出实验的中间代码。四元式在三元式的基础上增加看result运算结果,四元式之间的联系是通过临时变量实现的。 4.2if-else三地址四元式表示序列的就够设计: 四元式结构形式: 编号 (OP,ARG1,ARG2,RESULT) If-else变成这种形式形式如下: If a>b goto t1 goto t2 t1:x=a; goto t50 t2:x=b; goto t50 t50: 如(jump,-,-,L)写成goto L;把(jrop,B,C,L)写成if B rop C goto L。 5 编译系统的概要设计 5.1概要分析: 首先在源程序相同的目录下创建一个txt文档,并在文档中输入需要编译的程序即if-else语句,然后定义一个输入流文件,利用这个流文件中的open函数打开我需要编译的txt文件,在调用初始化各种变量的初始化函数。 接着开始进行词法分析,词法分析程序的主要任务是对构成源程序的字符串从左到右的扫描,逐个字符地读入源程序字符并按照构词规则切分成一个一个具有独立意义的单词。并确定其属性(如保留字、标识符、运算符、界限符和常量等)。再把它们转换成长度统一的标准形式—属性字。 词法分析是编译过程中的第一个阶段,在语法分析前进行。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。单词的分类(五类): 1. 关键字:由程序语言定义的具有固定意义的标识符。也称为保留字或基本字。 2. 标识符:用来表示程序中各种名字的字符串。 3. 常数:常数的类型一般有整型、实型、布尔型、文字型。 4. 运算符:如+、-、*、/ 等。 5. 界限符:如逗号、分号、括号等。 但是我做的这个实验没有用到那么多东西,词法分析的有效字符串为: IF,ELSE,THEN, <,>,.<=,>=,=,和从a到z的单个标识符,但是程序还是相对来说比较简单,复杂的表达式可能不能处理,以后会改进。而词法分析的结果就是将相应的单词赋予不同的属性值,利用词法分析表将结果保存起来,为后面的语义分析做准备。词法分析完成之后就是把词法分析的结果都显示出来。 语法分析的过程在上面已经有了说明,语法分析完了之后就是打印中间代码的四元式形式,根据上面的结果,四元式的数组里面已经存储了编译的具体信息,之需要按照相应的算符,将他们输出出来,即可看到四元式表示形式。 5.2词法分析的具体实现: 词法分析的具体过程如下,首先将我们需要的编译的内容读到一个数组之中,利用输入流函数的和获取符号函数配合完成,将数组的的空格、回车等无用的内容去掉,从而将处理过后的转存到该数组中,在利用的这个数组中符号书写的连贯性来进行进行词法分析。例如,then的写法是先写t,再查看下一字符串是否为HEN,那么词法分析一个个单词来进行,发现数组中存储的是t,在判断数组接下来的存储的分别是否为hen,就能够识别关键字then了,其他的是一个道理,处理完成之后就对每个单词的属性都做了出来,就实现了词法分析应该的功能。 6 详细的算法描述(流程图或伪代码) 6.1词法分析输出部分: void print() { for(token_index=0;token_index { if(tokentable[token_index].type==$IF) cout<<"IF"<<" "<<"关键字"< if(tokentable[token_index].type==$ELSE) cout<<"ELSE"<<" "<<"关键字"< if(tokentable[token_index].type==$THEN) cout<<"THEN"<<" "<<"关键字"< if(tokentable[token_index].type==$ID) cout< if(tokentable[token_index].type==$ASSIGN) cout<<'='<<" "<<"运算符"< if(tokentable[token_index].type==$GREA T) cout<<'>'<<" "<<"运算符"< if(tokentable[token_index].type==$LESS) cout<<'<'<<" "<<"运算符"< } token_index=0; } 6.2流程图: 7 软件的测试方法和测试结果 导入文件1.txt ,其内容为: IF (ad) THEN x=f; ELSE x=t; ELSE IF (b>y) THEN x=y; ELSE x=r; 词法分析 读取下一单词是IF ,调用E 结束 输出四元式 输出词法分析 初始化 输入txt 文件名 E 递归子程序 读取下一单词 语法分析:递归程序S 置结束标志 词法分析结果为: 语法分析结果和四元式显示为: 错误的文件: 输入:IF (a THEN ix=a; ELSE i=b;# 显示: 8.研制报告(研制过程,本设计的评价、特点、不足、收获与体会等) 本次实验是针对IF-ELSE递归下降输出四元式,没有对复杂的布尔表达式和复杂赋值语句进行处理,基本上满足了实验的基本要求,输出的格式也符合三地址表示的形式,特点是基本实现了嵌套,可以实现对>=,<=,<,>等的处理,体现出了递归下降法的思想, 递归函数的算法符合题目的要求。 本次实验的不足还有很多,程序只能对单个字母的标识符进行识别,上面的错误例子1就是这样的不足导致的。同时对于复杂的赋值语句也无法进行处理。对于带有运算符的赋值语句,暂时还没有实现,等以后水平提升了以后,应该会进一步完善改算法。 收获:通过本次实验,我收获了很错东西。首先对编译有了进一步的深刻理解,对递归下降法的思想有了很深的认识,同时对于语法分析的原理和过程都有了进一步的巩固,对于C++的编程水平也起到了锻炼的作用,巩固了平时所学的知识,真正做到了学以致用,对于各种结构体的运用也有了深刻的认识。 体会:在做实验的过程中,发现自己在编程序的过程中总是会忽略各种细节,从而导致每次都要改正很错小的低级错误才能正确运行,不仅浪费时间,还会影响到对其他错误地方的修改,此外还缺少较为全面和系统的眼光看待问题,在今后的编程中我会注意改正这方面的缺点,这样才能促使自己编程水平的不断进步。 编译原理是一门非常专业的学科,对于现阶段的我来说,只能掌握它的基本原理,然后在利用C++编程来具体实现,在编译和C++的互相印证中,我不仅对编译原理有了更深的理解,同时也锻炼了自己的动手编程能力,对于将知识转化为能力有了很大的帮助,总之,我学习到了很多的知识。 9 参考文献(按公开发表的规范书写) [1]张素琴、吕映芝、蒋维杜、戴桂兰等.编译原理(第2版).清华大学出版社.2005年2月 参考书: [1]胡元义等.编译原理实践教程.西安电子科技大学出版社.2002年1月 [2]王雷等.编译原理课程设计.机械工业出版社.2005年3月 [3]何克右等.C++程序设计教程.武汉理工大学出版社.2005年7月 10 附加代码 #include #include #include #define $ASSIGN 249 #define $IF 250 #define $THEN 251 #define $ELSE 252 #define $GREA T 253 #define $LESS 248 #define $ID 254 typedef struct Wtoken { int type; char ch; }Wtoken; typedef enum{JUMP,JG,JL,ASSIGN,END}OpKind; typedef struct { int label;//标号 OpKind op; char par1,par2; union{ char result; int address; }; }Fourtable;//四元式 #define MAX_TOKEN 256 //Wtoken表大小 #define MAX_QUAD 256 //四元式数组大小 Wtoken tokentable[MAX_TOKEN]; Fourtable quad[MAX_QUAD]; int token_index;//token表索引 int total_len;//token表有效长度 int quad_len;//四元式表有效长度 int quad_index;//四元式索引 int label; ifstream ins; bool init(char filename[255]); bool cifafenxi(); void print(); void ERROR(); void S(int,int); void E(int,int,int); bool nexttoken(); int newlabel(); void yufafenxi(); void printFourtable(); void main() cout<<"Please input the name of file:"; char fname[200]; cin>>fname; if(!init(fname)) return; if(!cifafenxi()) return; char ch; while(1) { if(ins.eof()) break; ins>>ch; } cout<<"The result of CIFA analyse :"< print(); cout< nexttoken(); cout<<"The Grammar:"< yufafenxi(); cout<<"The FourTable as followings:"< printFourtable(); } int newlabel() { return label++; } bool init(char filename[255]) { token_index=0; total_len=0; quad_len=0; quad_index=0; label=100; ins.open(filename,ios::nocreate | ios::in); if(ins.fail()) { cout<<"文件打开出错!"< return false; } return true; } bool cifafenxi() { char buf[16]; char ch; while(1) { ins>>ch; if(ins.fail()) break; if(ch=='I') { ins>>buf; if(strcmp(buf,"F")==0) tokentable[total_len++].type=$IF; } else if(ch=='T') { ins>>buf; if(strcmp(buf,"HEN")==0) tokentable[total_len++].type=$THEN; } else if(ch=='E') { ins>>buf; if(strcmp(buf,"LSE")==0) tokentable[total_len++].type=$ELSE; } else if(ch=='>') { tokentable[total_len++].type=$GREA T; } else if(ch=='<') { tokentable[total_len++].type=$LESS; } else if(ch=='=') { tokentable[total_len++].type=$ASSIGN; } else if(ch=='x' || (ch>='a' && ch<='z')) { tokentable[total_len].type=$ID; tokentable[total_len++].ch=ch; } } return true; } #define AD_RESULT(nlabel,nop,npar1,npar2,nresult) {quad[quad_len].label=nlabel; quad[quad_len].op=nop; quad[quad_len].par1=npar1; quad[quad_len].par2=npar2; quad[quad_len].result=nresult; quad_len++; } #define AD_ADDRESS(nlabel,nop,npar1,npar2,naddress) { quad[quad_len].label=nlabel; quad[quad_len].op=nop; quad[quad_len].par1=npar1; q uad[quad_len].par2=npar2; quad[quad_len].address=naddress; quad_len++; } Wtoken cur; bool nexttoken() { if(token_index>=total_len) return false; cur.type=tokentable[token_index].type; cur.ch=tokentable[token_index].ch; token_index++; return true; } void ERROR(char str[20]) { cout<<"error! "< } void S(int begin,int next) { if(cur.type==$ID) { char a,b; cout<<"S->"< a=cur.ch; if(!nexttoken()) ERROR("S"); if(cur.type!=$ASSIGN) ERROR("S"); cout<<"="; if(!nexttoken()) ERROR("S"); if(cur.type!=$ID) ERROR("S"); cout< b=cur.ch; AD_RESULT(begin,ASSIGN,b,0,a); AD_ADDRESS(-1,JUMP,0,0,next); nexttoken(); } else if(cur.type==$IF) { if(!nexttoken()) ERROR("S"); { cout<<"S->if E then S else S"< int etrue=newlabel(); int efalse=newlabel(); E(begin,etrue,efalse); if(cur.type==$THEN) { if(!nexttoken()) ERROR("S"); S(etrue,next); if(cur.type==$ELSE) { if(!nexttoken()) ERROR("S"); S(efalse,next); } else { ERROR("S"); } } else ERROR("S"); } } } void E(int begin,int etrue,int efalse) { if(cur.type==$ID) { char a,b; int mark=0; a=cur.ch; cout<<"E->"< if(!nexttoken()) ERROR("E()"); if(cur.type==$GREA T) {cout<<'>';mark=1;} else if(cur.type==$LESS) cout<<'<'; else ERROR("E()"); if(!nexttoken()) ERROR("E()"); if(cur.type!=$ID) ERROR("E()"); cout< b=cur.ch; if(mark==0) AD_ADDRESS(begin,JL,a,b,etrue); if(mark==1) AD_ADDRESS(begin,JG,a,b,etrue); AD_ADDRESS(-1,JUMP,0,0,efalse); if(!nexttoken()) ERROR("E()"); } else ERROR("E()"); } void yufafenxi() { S(-1,1000); AD_RESULT(1000,END,0,0,'-'); } void print() { for(token_index=0;token_index { if(tokentable[token_index].type==$IF) cout<<"IF"<<" "<<"关键字"< if(tokentable[token_index].type==$ELSE) cout<<"ELSE"<<" "<<"关键字"< if(tokentable[token_index].type==$THEN) cout<<"THEN"<<" "<<"关键字"< if(tokentable[token_index].type==$ID) cout< if(tokentable[token_index].type==$ASSIGN) cout<<'='<<""<<"运算符"< if(tokentable[token_index].type==$GREA T) cout<<'>'<<""<<"运算符"< if(tokentable[token_index].type==$LESS) cout<<'<'<<""<<"运算符"< } token_index=0; } void printFourtable() { for(int i=0;i { if(quad[i].label>-1) cout<<"L"< else cout<<" "; if(quad[i].op==JG) { cout<<"(>,"< } else if(quad[i].op==JL) { cout<<"(<,"< } else if(quad[i].op==JUMP) { cout<<","<<"-,-,L"< } else if(quad[i].op==ASSIGN) 课程设计任务书 学生姓名:赵旭林专业班级:计算机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、提问: 文言文翻译的“六字决”? ①对:一般指把原名中的文言单音词对译为现代汉语的双音或多音词。 ②换:有些词语意义已经发展,用法已经变化,语法已经不用,在译文中,应换这些古语为今语。 ③留:人名、地名、年号、国号、庙号、谥号、书名、物名都保留不译;与现代汉语表达一致的词语可保留。 ④删:一些没有实在意义的虚词,如表敬副词、发语词、部分结构助词等,同义复用的实词或虚词中的一个和偏义复词中陪衬的词应删去。 ⑤补:省略的部分;词语活用相应的部分;代词所指的内容;使上下文衔接连贯的内容等。 IF-ELSE条件语句的翻译程序设计 1 问题描述 要求用LL(1)自顶向下分析方法及三地址中间代码,对IF-THEN-ELSE条件语句完成编译各阶段过程,包括词法、语法、语义等分析。 2 问题分析及编译系统的概要设计 编译过程一般分为六个阶段的过程,可以由六个模块完成,它们称为词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序,此外,一个完整编译程序还必须包括“表格管理程序”和“出错处理程序”。 这次实验涉及到词法分析、语法分析、语义分析及表格管理和出错管理。其中,词法分析至少要能识别关键字“if”、“then”和“else”,标识符(即自定义变量),数字,和运算符等等;语法分析要分析程序结构的合法性,即是否为文法的句子;语义分析要能够语法制导翻译出中间代码(三地址)并将其输出;表格管理是指符号表;出错处理是指在语法分析时,所有非文法句子的错误类型处理. 3 文法及属性文法的定义 3.1 文法: 文法是用于描述语言的语法结构的形式规则(即语法规则)。这些规则必须是准确的、易于理解的以及有相当强的描述能力。由这种规则所产生的程序语言应有利于句子分析和翻译,而且,最好能通过这些规则自动产生有效的语法分析程序. IF-ELSE条件语句的文法如下所示: 0.A->EB 1.B->+EB|-EB|ε 2.E->FT 3.T->*FT|/FT|ε 4.F->i|(E) 或者能够更简洁一点: 0.S->if A THEN B ELSE C 1.A->m rop n 3.C->x=n arop m 4.rop->=|<|> 5.arop->+|-|*|/ 3.2 属性文法: 属性文法是在上下文无关文法的基础上,为每个文法符号(终结符或者非终结符)配备若干相关的“值”(与文法符号相关的属性)。 在一个属性文法中,对应于每个产生式A→a都有一套与之相关联的语义规则,每规 则的形式为:b:=f(c 1,c 2 ,…,c k )其中f是一个函数,而且或者①b是A的一个综合属性 并且c 1,c 2 ,…,c k 是产生式右边文法符号的属性或者②非终结符既可有综合属性也可有 继属性,文法开始符号的所有继承属性作为属性计算前的初始值。 属性文法为: if(VT[opr]=='=') //{"="判断}; { arr[d][1]=arr_i[opd]; arr[d][0]='='; arr[d][2]=id; arr[d][3]=' '; arr[d][4]=' '; id++; } else if(VT[opr]=='>') //{">"判断}; { arr[d][1]=arr_i[opd]; arr[d][0]='>'; arr[d][2]=id; arr[d][3]=' '; arr[d][4]=' '; id++; } 课程设计任务书 学生姓名:专业班级: 指导教师:工作单位:计算机科学与技术学院 题目: 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; 文言文翻译方法及解题技巧 文言文翻译方法 一、基本方法:直译和意译 文言文翻译的基本方法有直译和意译两种。 所谓直译,是指用现代汉语的词对原文进行逐字逐句地对应翻译,做到实词、虚词尽可能文意相对。直译的好处是字字落实;其不足之处是有时译句文意难懂,语言也不够通顺。 所谓意译,则是根据语句的意思进行翻译,做到尽量符合原文意思,语句尽可能照顾原文词义。意译有一定的灵活性,文字可增可减,词语的位置可以变化,句式也可以变化。意译的好处是文意连贯,译文符合现代语言的表达习惯,比较通顺、流畅、好懂。其不足之处是有时原文不能字字落实。 这两种翻译方法当以直译为主,意译为辅。 二、具体方法:留、删、补、换、调、变。 “留”:就是保留。凡是古今意义相同的词,以及古代的人名、地名、物名、官名、国号、年号、度量衡单位等,翻译时可保留不变。例如:《晏子使楚》中的“楚王”、“晏婴”、“晏子”等不用翻译。 “删”,就是删除。删掉无须译出的文言虚词。例如:“寡人反取病焉”的“焉”是语气助词,可不译,本句的意思就是“我反而自讨没趣。”(《晏子使楚》)又如:“子猷、子敬俱病笃,而子敬先亡”中的“而”是连词,可不译,整句意思是“子猷与子敬都病重,子敬先死去。” “补”,就是增补。(1)变单音词为双音词,如《桃花源记》中“率妻子邑人来此绝境”,“妻子”一词是“妻子、儿女”的意思;(2)补出省略句中的省略成分,如《人琴俱亡》中“语时了不悲”,翻译为:(子猷)说话时候完全不悲伤。 “换”,就是替换。用现代词汇替换古代词汇。如把“吾、余、予”等换成“我”,把“尔、汝”等换成“你”。 “调”就是调整。把古汉语倒装句调整为现代汉语句式。例如《人琴俱亡》中“何以都不闻消息”,“何以”是“以何”的倒装,宾语前置句,意思是“为什么”。 “变”,就是变通。在忠实于原文的基础上,活译有关文字。“子猷问左右”(人琴俱亡))中的“左右”指的是“手下的人”,“左右对曰”(《晏子使楚》中的“左右”指的是“近臣”。 古文翻译口诀 古文翻译,自有顺序,首览全篇,掌握大意; 先明主题,搜集信息,由段到句,从句到词, 全都理解,连贯一起,对待难句,则需心细, 照顾前文,联系后句,仔细斟酌,揣摩语气, 力求做到,合情合理,词句之间,联系紧密。 若有省略,补出本意,加上括号,表示增益。 人名地名,不必翻译,人身称谓,依照贯例, "吾""余"为我,"尔""汝"为你。省略倒装,都有规律。 实词虚词,随文释义,敏化语感,因句而异。 译完之后,还须仔细,逐句对照,体会语气, 句子流畅,再行搁笔。 三、考试文言文翻译方法十字诀例析 (一)增。就是增补,在翻译时增补文言文省略句中的省略成分。注意:补出省略的成分或语句,要加括号。 文言文哲理句子加翻译 经典句子 文言文哲理句子加翻译 1、见侮而不斗,辱也。译:当正义遭到侮辱、欺凌却不挺身而出,是一种耻辱的表现。 2、不戚戚于贫贱,不汲汲于富贵。译:不为贫贱而忧愁,不热衷于发财做官。 3、一寸山河一寸金。译:祖国的每一寸山河比一寸黄金还要宝贵,是绝不能让给外人的。 4、勿以恶小而为之,勿以善小而不为。译:对任何一件事,不要因为它是很小的、不显眼的坏事就去做;相反,对于一些微小的。却有益于别人的好事,不要因为它意义不大就不去做它。 5、不迁怒,不贰过。译:犯了错误,不要迁怒别人,并且不要再犯第二次。 6、邑人奇之,稍稍宾客其父,或以钱币乞之。译:同县的人对他能作诗感到惊奇,渐渐地请他的父亲去做客,有的人还用钱求仲永题诗。 7、三人行,必有我师焉,择其善者而从之,其不善者而改之。译:三个人在一起,其中必有某人在某方面是值得我学习的,那他就可当我的老师。我选取他的优点来学习,对他的缺点和不足,我会引 以为戒,有则改之。 8、人生自古谁无死,留取丹心照汉青。译:自古以来,谁都难免会死的,那就把一片爱国的赤胆忠心留在史册上吧! 9、三人行,必有我师焉;择其善者而从之,其不善者而改之。译:几个人在一起走路,其中一定有人可以当我的老师。应当选择他们的优点去学习,看到自己也有他们的缺点就要改正。 10、中峨冠而多髯者为东坡。译:中间戴着高高的帽子长着浓密胡子的人是苏东坡。 11、有益国家之事虽死弗避。译:对国家有利的事情要勇敢地去做,就算有死亡的危险也不躲避。 12、良药苦于口而利于病,忠言逆于耳而利于行。译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。 13、少顷,但闻屏障中抚尺一下,满坐寂然,无敢哗者。译:过了一会儿,只听到围幕中抚尺一拍,全场都安静下来,没有一个敢大声说话的。 14、小来思报国,不是爱封侯。译:从小就想着报效祖国,而不是想着要封侯当官。 15、屠大窘,恐前后受其敌。译:屠户很窘迫,恐怕前后受到两狼的攻击。 16、宾客意少舒,稍稍正坐。译:宾客们的心情稍微放松了,身子渐渐坐正了。 程序流程控制语句:选择语句 https://www.360docs.net/doc/e214623728.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循环语句的翻译程序设计(递归下降法、输出三地址表示) 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; 流程控制结构 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.题目:将WHILE语句转换成四元式的程序实现 设计内容及要求:设计一个语法制导翻译器,将WHILE语句翻译成四元式。要求:先确定一个定义WHILE语句的文法,为其设计一个语法分析程序,为每条产生式配备一个语义子程序,按照一遍扫描的语法制导翻译方法,实现翻译程序。对用户输入的任意一个正确的WHILE语句,程序将其转换成四元式输出(可按一定格式输出到指定文件中)。 1、系统描述 通过设计、编制、调试一个WHILE循环语句的语法及语义分析程序,加深对语法 及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。用语法 制导完成语义分析,并将形成的中间代码以四元式的形式输出。 2 、文法及属性文法的描述 。 2.1 文法的描述 该文法的产生式如下所示: (1)S->while(B){E} (2)E->AE (3)E->A (4)A->iPA (5)A->i (6)B->iTi & (7)B->i 其中while、( 、) 、{ 、} 、P、T 、;和i均为终结符,而S、A、B、E这些大写字母均为非终结符。T表示比较运算符,P表示算术运算符,i表示合法标识符。 2.2 属性文法的描述 对该文法的属性文法描述如下: (1) S->while(B){E} prinf(if B goto E else goto next) (2) E->AE print = · (3) E->A print = (4) A->i P A print(A= P (5) A->i; = i; (6) B->i T i print(B = T (7) B->i = i 3 、语法分析方法描述及语法分析表设计 | 3.1 语法分析表设计 3.1.1 文法的DFA 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循环语句的翻译程序设计(递归下降法、输出三地址表示)
各种文言文最常用的翻译方法整理
文言文句子的翻译
IF-ELSE条件语句的翻译程序设计(LL(1)法、输出三地址表示) 2
DO-WHILE循环语句的翻译程序设计
JavaScript流程控制语句
文言文翻译方法及解题技巧
文言文哲理句子加翻译
程序流程控制语句
《文言文语句翻译》
WHILE循环语句的翻译程序设计.
流程控制结构
古文之句子翻译
WHILE循环语句的翻译程序设计课设报告
WHILE循环语句的翻译程序设计(简单优先法、输出四元式)