编译IF-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)代码+报告

编译IF-ELSE条件语句的翻译程序设计(简单优先法、输出三地址表示)代码+报告
编译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";

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、利用句子结构推断词义 句式的整齐、语意的对应是汉语一大特点,文言文中表现尤为突出,根据这一特点可以推知词义,进而准确地理解原文。 如《捕蛇者说》“殚其地之出,竭其庐之入”中“竭”的含义是“使……竭”,即“尽”的意思,那么与其对应的“殚”的含义也可为“使……殚”,即“尽”的意思。 3、利用词的构成推断词义 在文言文里,结构相同的词语或者作同一句子成分的词,往往在意义上具有相同、相近或相反的特点,利用这一特点,可以正确解释词语。 如:“优柔寡断”,“优”对“寡”,“柔”对“断”,后面的“寡断”是“少果断”,那么前面的“优柔”就应该是“多柔和”。

文言文句子的翻译

《文言文句子的翻译》 【教学目的】 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 属性文法的描述

文言文翻译方法及解题技巧

文言文翻译方法及解题技巧 文言文翻译方法 一、基本方法:直译和意译 文言文翻译的基本方法有直译和意译两种。 所谓直译,是指用现代汉语的词对原文进行逐字逐句地对应翻译,做到实词、虚词尽可能文意相对。直译的好处是字字落实;其不足之处是有时译句文意难懂,语言也不够通顺。 所谓意译,则是根据语句的意思进行翻译,做到尽量符合原文意思,语句尽可能照顾原文词义。意译有一定的灵活性,文字可增可减,词语的位置可以变化,句式也可以变化。意译的好处是文意连贯,译文符合现代语言的表达习惯,比较通顺、流畅、好懂。其不足之处是有时原文不能字字落实。 这两种翻译方法当以直译为主,意译为辅。 二、具体方法:留、删、补、换、调、变。 “留”:就是保留。凡是古今意义相同的词,以及古代的人名、地名、物名、官名、国号、年号、度量衡单位等,翻译时可保留不变。例如:《晏子使楚》中的“楚王”、“晏婴”、“晏子”等不用翻译。 “删”,就是删除。删掉无须译出的文言虚词。例如:“寡人反取病焉”的“焉”是语气助词,可不译,本句的意思就是“我反而自讨没趣。”(《晏子使楚》)又如:“子猷、子敬俱病笃,而子敬先亡”中的“而”是连词,可不译,整句意思是“子猷与子敬都病重,子敬先死去。” “补”,就是增补。(1)变单音词为双音词,如《桃花源记》中“率妻子邑人来此绝境”,“妻子”一词是“妻子、儿女”的意思;(2)补出省略句中的省略成分,如《人琴俱亡》中“语时了不悲”,翻译为:(子猷)说话时候完全不悲伤。 “换”,就是替换。用现代词汇替换古代词汇。如把“吾、余、予”等换成“我”,把“尔、汝”等换成“你”。 “调”就是调整。把古汉语倒装句调整为现代汉语句式。例如《人琴俱亡》中“何以都不闻消息”,“何以”是“以何”的倒装,宾语前置句,意思是“为什么”。 “变”,就是变通。在忠实于原文的基础上,活译有关文字。“子猷问左右”(人琴俱亡))中的“左右”指的是“手下的人”,“左右对曰”(《晏子使楚》中的“左右”指的是“近臣”。 古文翻译口诀 古文翻译,自有顺序,首览全篇,掌握大意; 先明主题,搜集信息,由段到句,从句到词, 全都理解,连贯一起,对待难句,则需心细, 照顾前文,联系后句,仔细斟酌,揣摩语气, 力求做到,合情合理,词句之间,联系紧密。 若有省略,补出本意,加上括号,表示增益。 人名地名,不必翻译,人身称谓,依照贯例, "吾""余"为我,"尔""汝"为你。省略倒装,都有规律。 实词虚词,随文释义,敏化语感,因句而异。 译完之后,还须仔细,逐句对照,体会语气, 句子流畅,再行搁笔。 三、考试文言文翻译方法十字诀例析 (一)增。就是增补,在翻译时增补文言文省略句中的省略成分。注意:补出省略的成分或语句,要加括号。

文言文哲理句子加翻译

文言文哲理句子加翻译 经典句子 文言文哲理句子加翻译 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日

《文言文语句翻译》

《文言文语句翻译》(高三参赛) 一、设计说明 高考对文言文语句翻译的考查,虽然材料选自课外,但是考查立足于课内,立足于考查学生对所学文言知识能否灵活运用之上,对学生理解并翻译语句能力的客观考查,符合课程改革和语文教学的发展方向。结合《课程标准》,立足教材本身,勾连高考试题,我设计引导学生在理解和运用语言的实践活动中悟法、学法、用法,调动学生自主、合作、探究学习的积极性,进行适合学生实际水平的有效复习。 该学案分三部分,课前案重在引导学生了解高考命题要求及考点阐释,通过自主复习,运用课内掌握的文言基础知识,总结出语句翻译的具体方法。课中案重在就学生自主反馈的翻译方法进行展示和纠正,以练—讲—练的形式,将课内例句与高考样题衔接起来,渐次推进,引导学生灵活运用翻译方法,总结答题规律,提升掌握语言文字的能力。课后案作为当日作业,旨在让学生夯实基础,巩固演练,继续钻研,锐意进取。二、材料依据 必修教材篇目《师说》《赤壁之战》《鸿门宴》《齐桓晋文之事》等,《〈史记〉选读》篇目《信陵君窃符救赵》《廉颇蔺相如列传》及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

古文之句子翻译

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

兼语句

兼语句 ●林秀琴 你发现没有,在生活里一个人可以身兼不同的角色,比如你的妈妈,她既是你的妈妈,也是你爸爸的妻子,又是你外婆的女儿,还是你姨的姐妹。再比如你自己,你是你妈妈的孩子,又是你老师的学生,还是你弟弟的哥哥。有意思吧?汉语的句子也有这样的能力。有时候,一个句子中有一个部分,既是主语,又是宾语,它身兼两种角色,具有两个能力,这种句子就叫“兼语句”。比如“朋友请我看电影”这个句子,“朋友”“请”的是“我”,谁“看电影”呢?也是“我”,——“我”是前边主语的宾语,又是后边谓语的主语,就好像你是你妈妈的孩子、你弟弟的哥哥一样。 有点复杂,是不是?没关系,聪明的你,学习以后就明白了。 1、表示使令意义(英文翻译)的兼语句 汉语里有一类词表示让别人做什么,我们说这类词具有使令意义,如“请、让、叫、要求、同意、派、邀请、约”。 (1)肯定式(请加英文) 主语+动词1+兼语+动词2+宾语 朋友请我去看电影。 妈妈让我快写作业。

老师叫我去他的办公室。 老板要求他三点到公司。 (2)否定式(英文) 主语+不/没+动词1+兼语+动词2+宾语 妈妈不同意我去中国。 他没邀请汤姆参加生日晚会。 老板没派他去纽约。 2、第一个动词是“有”的兼语句 (1)肯定式(请加英文) 主语+ 有+ 兼语+ 谓语(动词/形容词) 我有一个朋友去中国留学了。 我有一个同学很幽默。 (2)否定式(英文) 主语+ 没有+ 兼语+ 谓语(动词/形容词) 那个学校没有人会说中文。 我们班没有人去打球。 3、第一个动词是表示喜好意义的兼语句 主语+(不)动词1+兼语+动词/形容词 老师夸我很聪明。 我喜欢他很幽默。 我讨厌他总开玩笑。 我不喜欢他总迟到。

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

文言语句翻译专项练习 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)变单音词为双音词,如《桃花源记》中“率妻子邑人来此绝境”,“妻子”一词是“妻子、儿女”的意思;(2)补出省略句中的省略成分,如《人琴俱亡》中“语时了不悲”,翻译为:(子猷)说话时候完全不悲伤。 “换”,就是替换。用现代词汇替换古代词汇。如把“吾、余、予”等换成“我”,把“尔、汝”等换成“你”。“调”就是调整。把古汉语倒装句调整为现代汉语句式。例如《人琴俱亡》中“何以都不闻消息”,“何以”是“以何”的倒装,宾语前置句,意思是“为什么”。“变”,就是变通。在忠实于原文的基础上,活译有关文字。“子猷问左右”(人琴俱亡))中的“左右”指的是“手下的人”,“左右对曰”(《晏子使楚》中的“左右”指的是“近臣”。 古文翻译口诀古文翻译,自有顺序,首览全篇,掌握大意;先明主题,搜集信息,由段到句,从句到词,全都理解,连贯一起,对待难句,则需心细,照顾前文,联系后句,

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日

相关文档
最新文档