文档库 最新最全的文档下载
当前位置:文档库 › 武汉理工大学 DO-WHILE语句的翻译分析程序设计 ———递归下降法、输出四元式

武汉理工大学 DO-WHILE语句的翻译分析程序设计 ———递归下降法、输出四元式

武汉理工大学 DO-WHILE语句的翻译分析程序设计 ———递归下降法、输出四元式
武汉理工大学 DO-WHILE语句的翻译分析程序设计 ———递归下降法、输出四元式

DO-WHILE语句的翻译分析程序设计

———递归下降法、输出四元式

1问题描述

1.1问题描述

设计一个DO-WHILE循环语句的词法﹑语法及语义分析程序,语法分析选择递归下降法,采用用语法制导翻译输出中间代码四元式。

1.2主要任务

通过设计、编制、调试一个DO-WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。

首先写出一个能识别DO-WHILE循环语句的文法,通过消除左递归使它符合LL(1)即递归下降法的要求,然后按照这个文法编写一个集词法分析,语法分析和语义分析为一体的程序,该程序首先可以检查输入语句是否符合词法要求,若符合则继续识别输入的语句是否符合DO-WHILE语句的文法,若符合则进行语义分析,输出用四地址代码表示的中间代码。

1.3测试数据

编写好源代码后,进行调试,根据程序要求进输入一小段程序,进行词法、语法的分析,给出分析结果。

2文法及属性文法的描述

2.1文法的描述

用扩充巴科斯-瑙尔范式(EBNF)给出的while循环语句的文法描述,如下:

::=do (<条件语句>) while{ <赋值语句> }

<条件语句> ::=<表达式><条件运算符> <表达式>

<条件运算符>::= > | < | = | >= | <=

<表达式> ::= <表达式> + <表达式2> | <表达式> - <表达式2> | <表达式2>

<表达式2>::=<表达式2> * <表达式3> |<表达式2> / <表达式3> | <表达式3>

<表达式3>::=(<表达式>) | <标识符>|<数字>

<赋值语句>::=<标识符>=<表达式>;

2.2 DO-while循环语句文法的描述

产生式为S-> do E while A,为便于语法制导翻译将其改写如下:文法G(s)如下:

S-->DGWE (意思是do G while E)

G-->c=R

R-->dTe|d

T-->+|-|*|/

E-->aFb

F--> >|==|<

2.3 DO-WHILE循环语句的属性文法

产生式语义规则

S→do E while A S.begin:=newlabel;

E.true:=newlabel;

E.false:=S.next;

S1.next:=S.begin;

S.code:=gen(S.begin’:’‖E。code‖

gen(E.true’:’)‖S1.code‖

gen(‘goto’ S.begin)

3.语法分析方法及中间代码形式的描述

3.1语法分析方法

递归下降程序是由一组子程序组成,每个子程序对应于一个非终结(S,A,B,C,D,E,F,G ,H)。每个子程序处理相应句型中相对于此非终结符号的产生式。在定义文法时,是递归定义的,所以这些子程序也是递归的。当一个子程序调用另一个子程序时,原子程序顺序执行语句,即总是先执行被调用的子程序,然后再执行后继的程序。程序中9个子程序,其中S 是开始符号,也是递归下降分析的入口,通过调用词法分析器进行单词分析,并通过word=l.Yufa_Queue.front()来得到当前所分析到的单词,然后在递归语法分析中根据这个单词分析下一步要执行的子程序。其中要注意的是,当子程序G()和H()中出现匹配的是空字符串时,不做单词处理,该所取得的单词,应该为下一个匹配产生做准备。

它的优点是简单直观,易于构造,很多编译系统所实现。缺点是对文法要求很高,由于 递归调用多,影响分析器的效率。

其文法可以表示为:

E →T │E+T

T →F │T*F

F →i │(E )

可以用语法图来表示语言的文法,如图:

E

T

F

3.2中间代码形式描述

中间代码采用四元式输出,一个四元式是一个带有四个域的记录结构,这四个域分别称为op ﹑arg1﹑arg2及result 。域op 包含一个代表运算符的内部码。语句do c=a+b while a

E

的四元式输出形式如下:

100 ( + , a , b , T )

101 ( = , T , - , c )

102 ( j<, a , b , 100 )

4.简要的分析与概要设计

4.1全局程序概要设计

递归下降分析技术就是通过对每个非终结符编写一个子程序来实现它的操作,然后通过递归的调用来实现对输入字符串的分析,这其中还包括对输入字符串的词法分析。在词法分析的时,得到的字符单词要和关键字比较,看是否是关键字,根据比较结果进行返回相应的单词类型。单词类型主要包括界限符,关键字,常量,标识符,运算符等,每种符号都是一种类型。在语法分析程序中,根据词法得到的结果,进行判断是否是当前需要的单词类型,如果不是就说明输入字符串不能由该文法推导出来;如果是当前需要的类型,就相应得做该单词类型分支程序。

根据文法可以得到这个递归下降程序可以分析while语句,在文法的开始符号S开始进行递归调用,因此这个文法的递归中就要考虑到调用以及递归。在递归子程序中,在嵌套调用其他子程序时都是有一定条件的,当满足这个条件的时候该程序可以按照满足的条件执行下去,当没有满足程序中的条件时就会显示语法错误。

4.2词法分析

词法分析程序的任务是:从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号的中间程序。词法分析检查的错误主要是挑出源程序中出现的非法符号。所谓非法符号是指不是程序设计语言中允许出现的符号,就像自然语句中的错字。

4.3递归下降翻译器的设计

1.对每个非终结符A构造一个函数过程,对A的每个继承属性设置一个形式参数,函数

的返回值为A的综合属性,A对应的函数过程中,为出现在A的产生式中的每一个文

法符号的每一个属性都设置一个局部变量。

2.非终结符A对应的函数过程中,根据当前的输入符号决定使用哪个产生式候选。

3.每个产生式对应的程序代码中,按照从左到右的次序,对于单词符号,非终结符和语

义动作分别做以下工作。

(1)对于带有综合属性x的终结符X,把x的值存入为X,x设置的变量中。然后产

生一个匹配X的调用,并继续读入一个输入符号。

(2)对于每个非终结符号B,产生一个右边带有函数调用的赋值语句c=B(b1,b2,…,bk)

(3)对于语义动作,把动作的代码抄进分析器中,用代表属性的变量来代替对应属性

的每一次引用。

4.4语法制导翻译

在语法分析过程中,随着分析的步步进展,根据每个产生式所对应的语义子程序(或

语义规则描述的语义动作)进行翻译。属性文法的每个符号有属性,所以每个符号入栈时,

必须连属性一起入栈,这样,栈符号就由文法符号及存放该符号属性的域所组成。由于属性类型不同,属性域存放的内容就要根据属性的类型来定。有的可能直接存放属性值,也有的存放的是指向属性值的指针。对于综合属性,其属性域不存放其属性值,而是存放一个指针,指向存贮该属性值的单元。对于继承属性,其属性域直接保存其属性值。继承属性的属性域刚入栈时为空,但是在该栈符号变成栈顶符号之前的某一时刻,它们必须接受相应的属性值,即在成为栈顶时,继承属性的属性域必须有值。

5测试方法和测试结果

5.1测试方法

编写好源程序,连接运行无误后,用几个简单的while语句检测其正确性,如:输入do-while语句:Wa

则需对源程序进行检查修正,我们可以用逐步调试的方法来对源程序进行跟踪分析,找出出错的地方和原因,在对其进行修改,重新调试运行,直到输出正确的结果为止。若输出结果正确,还要多用几个while语句对其进行检测,直到所有输出结果正确。

5.2测试结果

测试结果如下:

6经验与体会

在做本次实验之前我对LL(1)文法的构成,递归下降原理不是很了解,在查阅了相关资料后,对此有了深入了解.在整个设计过程中,将词法分析做为一个单独的模块,它可以被任何语法分析调用,提高独立性.并且在编程之前就已经将程序的概要设计都做出来了,所以在编写程序的时候相对比较容易。词法分析,语法分析都是很容易的,只要理解了分析方法的实现原理,

编写程序判断输入字符串是否满足给定的文法是比较简单的。

本次的设计的不足主要体现在以下几个方面,首先,因为前几次的实验都没有把词法分析器编出来,因此程序中我没有采用词法分析器,只能够对唯一的Da=a+bWa

在这次课程设计的过程中,我也遇到了很多难题。在种种的困难中,我明白了在编写程序时要有耐心。如果你没有耐心,即使再好的思路也不会得到很好的表达,特别是在调试的过程中,对于各种各样的错误,要特别的有耐心去自习分析原因,特别是一些基本的语法错误,不能一看到错误很多就乱了阵脚,更不能轻易的放弃,半途而废。

通过此次课程设计,再次对编译原理的基础知识和一些实际操作只是有了一定的了解,对高级语言在计算机上进行编译分析的过程有了一定的了解。

7附录

源代码:

/*文法G(s)

s-->DGWE

G-->c=R

R-->dTe|d

T-->+|-|*|/

E-->aFb

F--> >|==|<

*/

#include

#include

#include

#include

char a[50],g[50][50];

char ch;

int n1,i1=0,i2=0;

int total=0;

void S();

void D();

void G();

void W();

void E();

void R();

void T();

void F();

void main()

{

int p,j=0;

printf("请输入do-while语句(D代表do,W代表while),并以#结束:\n");

do{

scanf("%c",&ch);

a[j]=ch;

j++;

}while(ch!='#');

n1=j;

ch=a[0];

S();

printf("\n");

if (ch=='#')

{

printf("输出四元式为:\n");

p=0;

for(;p

{

printf("10%d %s\n",p,g[p]); /*输出推导式*/

}

}

else {

printf("error\n");

printf("press any key to continue..\n");

getchar();

getchar();

return;

}

printf("\n");

printf("press any key to continue..\n");

getchar();

getchar();

}

/*出错情况分析*/

void S()

{

printf("%d\tS-->DGWE\n",total);total++;

D();

G();

}

void D()

{

if(ch!='D')

{ printf("有非法字符%c请按回车返回!!",ch);

getchar();

getchar();

exit(1);}

ch=a[++i1];

}

void G()

{ int i=i1+1;

if(ch!='c'&&a[i]!='=')

{

printf("有非法字符%c %c请按回车返回!!",ch,a[i]);

getchar();

getchar();

exit(1);

}

printf("%d\tG-->c=R\n",total);total++;

R();

}

void R()

{

int i;

i=i1+1;

i1=i1+2;

ch=a[i1];

if(a[i]!='='&&ch!='d')

{

printf("有非法字符%c %c请按回车返回!!",a[i],ch);

getchar();

getchar();

exit(1);

}

else

{

if((a[i1+1]=='+')||(a[i1+1]=='-')||(a[i1+1]=='*')||(a[i1+1]=='/'))

{

printf("%d\tR-->dTe\n",total);total++;

i2=3;

T();

}

else

{

printf("%d\tR-->d\n",total);total++;

i2=2;

strcpy(g[0],"(=,c,d,_)");

W();

E();

}

}

}

void T()

{

ch=a[++i1];

switch(ch)

{

case '+':

printf("%d\tT-->+\n",total);total++;

strcpy(g[0],"(+,d,e,T)");

strcpy(g[1],"(=,c,T,_)");

break;

case '-':

printf("%d\tT-->-\n",total);total++;

strcpy(g[0],"(-,d,e,T)");

strcpy(g[1],"(=,c,T,_)");

break;

case '*':

printf("%d\tT-->*\n",total);total++;

strcpy(g[0],"(*,d,e,T)");

strcpy(g[1],"(=,c,T,_)");

break;

default:

printf("%d\tT-->/\n",total);total++;

strcpy(g[0],"(/,d,e,T)");

strcpy(g[1],"(=,c,T,_)");

break;

}

W();

E();

}

void W()

{

++i1;

ch=a[++i1];

if(ch!='W')

{

printf("有非法字符%c请按回车返回!!",ch);

getchar();

getchar();

exit(1);

}

}

void E()

{

ch=a[++i1];

if(ch!='a')

{

printf("有非法字符%c %c请按回车返回!!",ch);

getchar();

getchar();

exit(1);

}

printf("%d\tE-->aFb\n",total);total++;

F();

}

void F()

{

int i;

ch=a[++i1];

i=i1+1;

if(a[i]!='b')

{

printf("有非法字符%c请按回车返回!!",a[i]);

getchar();

getchar();

exit(1);

}

if(i2==2)

switch(ch)

{

case '>':

printf("%d\tF-->>\n",total);total++;

strcpy(g[1],"(j>,_,_,100)");

break;

case '==':

printf("%d\tF-->==\n",total);total++;

strcpy(g[1],"(j==,_,_,100)");

break;

default:

printf("%d\tF-->>

strcpy(g[1],"(j<,_,_,100)");

break;

}

else if(i2==3)

switch(ch)

{

case '>':

printf("%d\tF-->>\n",total);total++;

strcpy(g[2],"(j>,_,_,100)");

break;

case '==':

printf("%d\tF-->==\n",total);total++;

strcpy(g[2],"(j==,_,_,100)");

break;

default:

printf("%d\tF-->>

strcpy(g[2],"(j<,_,_,100)");

break;

}

ch='#';

}

现代汉语语法分析:第一节 层次分析

第一节层次分析 1.1句法结构的层次性和层次分析 1、句法结构的层次性: 一个句子或是句法格式表面上看是线性排列,内部有一种层次的透景。(松紧程度不一样) 如:他刚来。(这三个词内部的松紧程度不一样。“刚”和“来”关系紧密,“他”和“刚”关系疏远,“刚”和“来”先组合,再和“他”组合) 2、结构的三个特点: *整体性(作为一个结构,一定具有整体性。) *可分割性(作为一个结构,一定可以被分割成多个部分。) *有规则性(一个结构作为一个整体,一定是由好几部分组成的,这好几个部分组合的时候,它是按照一定规则组成的。) 如:形声字:形+声,再+字(“形声字”这个词,不是一些语素随便凑成,而是按一定规则组成的。)【有两个以上语素组合时,其内部一定有层次结构。】 *音节也是有层次的,如:天[tian55] 这个音节也是有层次的: 声调——超音段成分 声母+韵母——音段成分 韵母——韵头+韵部(韵基) 韵基——韵腹(主要元音)+韵尾 【由此,我们可以说的宽泛一点,这叫语言的层次构造,这种构造,是语言的基本特性。不论是语音、词汇、句子都有这样的层析构造问题。】 3、层次分析:在分析一个句子,或是句法结构的时候,将句法构造的层次性考虑进来,并按其构造层次,逐层进行分析,在分析时,指出每一层面的直接组成成分,并说明直接组成成分之间的关系。这种分析手段就是层次分析。 如:他刚来 “他刚来”的直接组成成分:他+刚来主谓 谓语“刚来”的直接组成成分:刚+来状中 4、层次分析包含两个内容: 二他所写的文章怎么切分? 切分:怎样断句 定性: 层次分析的三种主要表示方法:从小到大、框式、树型图: 5、怎么切分? 同一结构如何切分 例句:他所参观的工厂。 名词性偏正结构定中 他所参观? 他所参观的工厂 他所参观的工厂会导致他和工厂有领属关系 所以他所参观的工厂 他所参观怎么分析? 他参观

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日

《项羽之死》逐只逐句的翻译

《项羽之死》 项王军壁垓下,兵少食尽,汉军及诸侯兵围之数重。 项王的部队在垓下扎营驻守,兵少粮尽,汉军及诸侯兵把他重重包围。 夜闻汉军四面皆楚歌,项王乃大惊曰:“汉皆已得楚乎?是何楚人之多也!”深夜,(项羽)听到汉军在四面唱着楚地的歌,项羽于是大为吃惊,说:“难道汉军把楚人都征服了吗?他们那边楚人为什么这么多呀!” 项王则夜起,饮帐中。有美人名虞,常幸从;骏马名骓,常骑之。 项王于是在夜里起来,在帐中饮酒。有美人名虞,一直受宠跟在项王身边;有骏马名骓(项羽)一直骑着。 於是项王乃悲歌慨,自为诗曰:“力拔山兮气盖世,时不利兮骓不逝。 这时候,项羽不禁慷慨悲歌,自己作诗(吟唱)道:“力量能拔山啊,英雄气概举世无双,时运不济时骓马不再奔跑! 骓不逝兮可柰何,虞兮虞兮柰若何!” 骓马不奔跑可将怎么办,虞姬呀虞姬,(我)将怎么安排你才妥善?” 歌数阕,美人和之。项王泣数行下,左右皆泣,莫能仰视。 项王唱了几遍,美人虞姬在一旁应和。项王眼泪一道道流下来,左右侍者也都跟着落泪,没有一个人忍心抬起头来看他。 於是项王乃上马骑,麾下壮士骑从者八百馀人,直夜溃围南出,驰走。 在这种情况下,项羽竟骑上马,部下壮士八百多人骑马跟在后面,当夜突破重围,向南冲出,(项羽)鞭策着马逃跑。 平明,汉军乃觉之,令骑将灌婴以五千骑追之。项王渡淮,骑能属者百馀人耳。天刚亮的时候,汉军才发觉,命令骑将灌婴带领五千骑兵去追赶。项王渡过淮河,部下壮士能跟上的只剩下一百多人了。 项王至阴陵,迷失道,问一田父,田父绐曰:“左”。 项王到达阴陵,迷了路,去问一个农夫,农夫骗他说:“向左边走。” 左,乃陷大泽中。以故汉追及之。项王乃复引兵而东,至东城,乃有二十八骑。项王带人向左,陷进了大沼泽地中。因此,汉兵追上了他们。项王于是又带着骑兵向东跑,到达东城,这时就只剩下二十八人。 汉骑追者数千人。项王自度不得脱。 汉军骑兵追赶上来的有几千人。项王自己估计不能逃脱了。 谓其骑曰:“吾起兵至今八岁矣,身七十馀战,所当者破,所击者服,未尝败北,遂霸有天下。 对他的骑兵说:“我带兵起义至今已经八年,亲自打了七十多仗,我所抵挡的敌人都被打垮,我所攻击的敌人无不降服,从来没有失败过,因而能够称霸,据有天下。 然今卒困於此,此天之亡我,非战之罪也。今日固决死,愿为诸君快战,必三胜之,为诸君溃围,斩将,刈旗,令诸君知天亡我,非战之罪也。” 可是如今终于被困在这里,这是上天要灭亡我,决不是作战的过错。今天必死无疑,我愿意给诸位打个痛痛快快的仗,一定胜它三回,给诸位冲破重围,斩杀汉将,砍倒军旗,让诸位知道的确是上天要灭亡我,决不是作战的过错。

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.分析步骤是,先分清句子的主要成分,再决定有无连带成分,最后指出附加成分。 标记: 一般用║来分隔主语部分和谓语部分,用══标注主语,用——标注谓语,用~~~~~~标注宾语,用()标注定语,用[ ]标注状语,用< >标注补语。 作用: 因其清晰明了得显示了句子的主干,可以一下子把握住一个句子的脉络,适合于中小学语文教学,对于推动汉语教学语法的发展作出了很大贡献。 还可以分化一些歧义句式。比如:我们五个人一组。 (1)我们║五个人一组。(2)我们五个人║一组。 总结:中心词分析法可以分化一些由于某些词或词组在句子中可以做不同的句子成分而造成的歧义关系。 局限性: 1.在一个层面上分析句子,

层次性不强; 2.对于一些否定句和带有修饰成分的句子,往往难以划分; 如:我们不走。≠我们走。 封建思想必须清除。≠思想清除。 3. 一些由于句子的层次关系 不同而造成的歧义句子无法分析; 如:照片放大了一点儿。咬死了猎人的狗。 二. 层次分析: 含义: 在分析一个句子或句法结构时,将句法构造的层次性考虑进来,并按其构造层次逐层进行分析,在分析时,指出每一层面的直接组成成分,这种分析就叫层次分析。 朱德熙先生认为,层次分析不能简单地将其看作是一种分析方法,而是应当看做一种分析原则,是必须遵守的。(可以说说为什么) 层次分析实际包含两部分内容:一是切分,一是定性。切分,是解决一个结构的直接组成成分到底是哪些;而定性,是解决切分所得的直接组成成分之间在句法上是什么关系。

程序流程控制语句

程序流程控制语句:选择语句 https://www.wendangku.net/doc/6915195774.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语句,执行 下一条语句。

流程控制结构

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

兼语句

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

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

__现代汉语语法研究层次分析法

第二讲层次分析法 2.1 句子成分分析及其局限 句子成分分析法又叫中心词分析发。要点大致如下: (一)以单句为分析对象。 (二)句子有六大成分——主语、述语(谓语)(主要成分);宾语、补足语(黎锦熙,如“他成了班长 ..”“他 们请我做报告 ...”)(连带成分);形容词性附加语(今天的定语)、副词性附加语(状语和补语)(附加成分)。 (三)句子成分原则上只能是词。 (四)分析手续:先找出全句主要成分主语和述语,再决定述语后有无连带成分宾语或补语,最后指出句中所有的附加成分。 句子成分分析发的优点:可以让人一下子把握住句子的脉络。在分析长句时,更能显示其优越性:(1)我国首升空的“神州-3号”模拟载人飞船经过264个小时在太空运行之后按照原先预定的时间安全、准确地返回原先计算好的我国西北某地区的地面。 句子成分分析法的局限性: 第一:离了枝叶,主干不成立或站不住,或不是原句子的意思。

(2)他贪图安逸。 (3)于福的老婆是小晴的娘.。 第二:离了枝叶,主干虽能成立,但意思发生了变化。 (4)我们都不懂。(我们懂) (5)祥林嫂死了当家人。(祥林嫂死了) (6)不合格的党员清除了。(党员清除了) 第三:不能有效分化歧义。 (7)照片放大了一点。(“放得不是很大”,“放得过于大了”) (8)我也去上海。 第四:不利于发现某些词语的用法特点。 (9)a.我们白白浪费了几个小时。*b.我们白浪费了几个小时。 2.2 句法构成的层次性 一个句子或句法结构总是按一定的句法规则一层一层地进行组合的。例如: (10)他刚到。 “刚”跟“他”不发生直接的关系,“刚”先跟“到”构成修饰关系,然后“刚到”一起再跟“他”构成主谓关系。这种构造特性一般称为“句法构造的层次性”。 2.3 关于层次分析法

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

《项羽之死》逐字逐句翻译

《项羽之死》翻译 本课虚词积累:其、以、而 【第一段】 项王军壁垓下,兵少食尽,汉军及诸侯兵围之数重。 项王的部队在垓下扎营驻守,兵少粮尽,汉军及诸侯兵把他重重包围。 夜闻汉军四面皆楚歌,项王乃大惊曰:“汉皆已得楚乎?是何楚人之多也!” 深夜,(项羽)听到汉军在四面唱着楚地的歌,项羽于是大为吃惊,说:“难道汉军把楚人都征服了吗?他们那边楚人为什么这么多呀!” 项王则夜起,饮帐中。有美人名虞,常幸从;骏马名骓,常骑之。 项王于是在夜里起来,在帐中饮酒。有美人名虞,一直受宠跟在项王身边;有骏马名骓(项羽)一直骑着。 於是项王乃悲歌慨,自为诗曰:“力拔山兮气盖世,时不利兮骓不逝。 这时候,项羽不禁慷慨悲歌,自己作诗(吟唱)道:“力量能拔山啊,英雄气概举世无双,时运不济时骓马不再奔跑! 骓不逝兮可柰何,虞兮虞兮柰若何!” 骓马不奔跑可将怎么办,虞姬呀虞姬,(我)将怎么安排你才妥善?” 歌数阕,美人和之。项王泣数行下,左右皆泣,莫能仰视。 项王唱了几遍,美人虞姬在一旁应和。项王眼泪一道道流下来,左右侍者也都跟着落泪,没有一个人忍心抬起头来看他。 【段解】写项羽在垓下被围的困境,刻画出项羽多愁善感的性格特征。 【第二段】 于是项王乃上马骑,麾下壮士骑从者八百余人,直夜溃围南出,驰走。 在这种情况下,项羽于是骑上马,部下壮士八百多人骑马跟在后面,当夜突破重围,向南冲出,(项羽)鞭策着马逃跑。 平明,汉军乃觉之,令骑将灌婴以(动词,率领)五千骑追之。项王渡淮,骑能属者百余人耳。 天刚亮的时候,汉军才发觉,命令骑将灌婴带领五千骑兵去追赶。项王渡过淮河,部下壮士能跟上的只剩下一百多人了。 项王至阴陵,迷失道,问一田父,田父绐曰:“左”。 项王到达阴陵,迷了路,去问一个农夫,农夫骗他说:“向左边走。” 左,乃陷大泽中。以(介词,因为)故汉追及之。项王乃复引兵而东,至东城,乃有二十八骑。 项王带人向左,陷进了大沼泽地中。因此,汉兵追上了他们。项王于是又带着骑兵向东跑,到达东城,这时就只剩下二十八人。 汉骑追者数千人。项王自度不得脱。 汉军骑兵追赶上来的有几千人。项王自己估计不能逃脱了。

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

现代汉语层次分析法

目录 一、层次分析法及与层次分析法相关的几点说明 (2) 二、层次分析法的分析步骤 (4) 三、层次分析法的原则 (4) 四、层次分析法的基本精神 (4) 五、层次分析法的优势及局限 (5)

现代汉语层次分析法 【内容摘要】层次分析法是美国描写语言学语法分析的一种方法。这种析句方法可适用于各种语言单位的切分作业,小可以切分语素,大可以切分复句乃至篇章。但也有不足之处。本文回顾了与层次分析法相关的概念、分析步骤、原则、基本精神,明确了层次分析法的优势与局限性。 【关键词】层次分析法、优势、局限 正文 一、层次分析法及与层次分析法相关的几点说明 1.成分与直接成分 这组概念在语法分析中,经常被混为一谈,事实上是有区别的。 成分就是构成一个词组或句子的所有结构单位(最小是一个词),这些单位无论处于何种层次,都是组成这个短语、句子的结构成分。直接成分则是直接构成某一个结构的两个成分(一般来说就是两个),或者说是在短语或句子某一结构层面上的两个成分。成分和直接成分是不同的概念。成分的范围要大于直接成分,直接成分也是成分,但成分不都是直接成分,只有同一个层次中切分出来的两个成分才是直接成分,所以直接成分是相对而言的。句子内部的结构成分之间并非全是直接关系,也有间接关系。直接成分就是直接发生了结构关系而构成句法结构的成分。两个直接成分总是优先组合,且按某种结构类型组合。 2.层次分析法 层次分析法即直接成分分析法(简称IC分析法),是美国描写语言学语法分析的一种方法。三十年代布龙菲尔德在《语言论》一书中提出了直接成分的概念后,结构主义学派在语法分析上就逐渐用层次分析法取代了传统的中心词分析法。四十年代和五十年代层次分析法被广泛采用,同时反复讨论了切分层次的标准,而且扩展应用到篇章结构的分析。这样,从语素组合成词,词组合成短语,短语组合成句,句组合成篇,都作层次分析。此外,也用于语音分析。这种分析

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;

流程控制语句练习题

流程控制语句练习题 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、修改详细信息

现代汉语之层次分析法

第四节层次分析法 教学目标:1、从理论上把握层次分析法是一种怎样的方法(理论起源、依据、目的、用途、优势与不足等) 2、从实践上掌握如何使用层次分析法分析现代汉语句法结构 3、培养学生语言分析能力,形成良好语感;激发学生对经典方法论进行反思性探讨,形成科研意识;培养学生形成严谨认真细致的科学态度 教学难点:1、把握层次分析法的两个关键因素:层次与关系 2、判断层次分析是否正确的一些规则和技巧 教学重点:如何正确使用层次分析法分析句法结构 教学延伸: 1、思考层次分析法能否应用于一些不适合二分处理的特殊结构,怎样 运用是否有价值有的话有何价值 2、回忆中小学学习过的“中心词分析法”这种传统的汉语句子分析方 法,与层次分析法对比,探讨现代汉语句法分析的出路和前景。 3、介绍当今中国语言学界新崛起的“字本位”理论以及目前世界语言 学界最流行的“认知语言论”(这一理论是对层次分析法所依据的基 本语言理论——形式主义语言论的彻底颠覆),引导学生进行创新性 学术思考与争论。 课型:结合多媒体演示的讲授课 课时:3课时 第一课时 教学内容: 一、语言的线性排列与层次结构

二、何谓层次分析法 三、使用层次分析法分析现代汉语句法结构的要点 教学过程: 一、通过实例介绍语言线性排列形式下隐藏的层次结构。明确术语“线性排 列”“结构层次”的含义。 线性排列:我们平时说话,只能一个词语接一个词语地说出来,发音也只能一个音一个音地发出来,书写时一个汉字一个汉字写出来,这种按照时间 先后顺序说出或者写出的形式,就是语言的“线性排列”形式。语言 是在一维的空间里,随时间的流逝展开的。线性排列是表现出来的语 言形式。但在语言线性排列的表象下,却隐藏着一个层次关系,例如: 蔚蓝的天空中飘着洁白的云 表面上看是线性,实际上“蔚蓝的”“天空”先组合成“蔚蓝的天空”;“飘着”“洁白的”“云”组合成“飘着洁白的云”,两者再组合成“蔚蓝的天空中飘着洁白的云”这一线性结构所以,可见这些词并不是一次性组合在一起的,也不是按照线性形式一个接一个依次组合在一起的。它实际上有多个组合层次。 所以,所谓结构层次,指的是隐藏在线性排列的表象下,语言中句法单位在组合成更大的结构体时所反映出的不同的先后、亲疏、松紧关系。句法成分并不是一个接一个组合的,而是不断套叠形成的。线性排列,我们凭直觉就可以完全看出来,而结构层次关系,则需要我们深入到语言内部,通过结构分析才能揭示出来。 例子:我们班的新同学 二、介绍层次分析法产生发展的历史渊源,明确理论的来龙去脉,以及在当下 的研究进展情况、地位。弄清楚到底何为层次分析法。并对这一分析方法做

编译原理报告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日

程序结构和流程控制语句

程序结构和流程控制语 句 集团标准化小组:[VVOPPT-JOPP28-JPPTL98-LOPPNN]

C ++的语句类型 C++程序的组成:一个C++程序可以由若干个源程序文件组成,一个源程序文件可以有若干个函数和编译预处理命令组成,一个函数由函数说明部分和函数执行部分组成,函数执行部分由数据定义和若干个执行语句组成。语句是组成程序的基本单元。C++语言的语句可以分成以下六大类: (1)说明语句:对变量、符号常量、数据类型的定义性说明 例如:int a,b,c; //定义整型变量a 、b 、c ① 仅向编译系统提供说明信息,在程序执行期间并不执行任何操作。 如,定义变量语句int a,b,c;是告诉编译系统为变量a 、b 、c 各分配4个字节的存储空间用于存放变量的值。程序执行时,该语句就不起任何作用了。 ② 说明语句可出现在函数内、外,允许出现语句的任何地方。 (2)控制语句:能改变程序执行顺序完成控制功能的语句。 C++中控制语句主要有: (3)函数和流对象调用语句:函数调用语句又一次函数调用加一个分号构成一个语句,如: 【例1】分析下面程序的功能: #include using namespace std; int max(int a,int b) //自定 义函数 { if(a>b) return a; else return b; } int main() { int a,b,m; cout<<"Input a,b:"; cin>>a>>b; m=max(a,b); //函数调用语 句 cout<<"max="<

相关文档
相关文档 最新文档