第二章 文法和语言的概念和表示Word格式.docx

上传人:b****6 文档编号:17081988 上传时间:2022-11-28 格式:DOCX 页数:22 大小:45.85KB
下载 相关 举报
第二章 文法和语言的概念和表示Word格式.docx_第1页
第1页 / 共22页
第二章 文法和语言的概念和表示Word格式.docx_第2页
第2页 / 共22页
第二章 文法和语言的概念和表示Word格式.docx_第3页
第3页 / 共22页
第二章 文法和语言的概念和表示Word格式.docx_第4页
第4页 / 共22页
第二章 文法和语言的概念和表示Word格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

第二章 文法和语言的概念和表示Word格式.docx

《第二章 文法和语言的概念和表示Word格式.docx》由会员分享,可在线阅读,更多相关《第二章 文法和语言的概念和表示Word格式.docx(22页珍藏版)》请在冰豆网上搜索。

第二章 文法和语言的概念和表示Word格式.docx

研究语言

每个句子构成的规律

每个句子的含义

每个句子和使用者的关系

研究程序设计语言

每个程序构成的规律

每个程序的含义

每个程序和使用者的关系

语言研究的三个方面

语法Syntax

语义Semantics

语用Pragmatics

语法——表示构成语言句子的各个记号之间的组合规律。

程序语言的语法通常是指这样的一组规则,用它可以形成和产生一系列合式的程序。

这组规则称为语法规则。

语义——表示各个记号的特定含义。

(各个记号和记号所表示的对象之间的关系)。

程序语言的语义通常是指这样的一组规则,用它可以定义一个程序的意义。

这组规则称为语义规则。

语用——表示在各个记号所出现的行为中,它们的来源、使用和影响。

每种语言具有两个可识别的特性,即语言的形式和该形式相关联的意义。

语言的实例若在语法上是正确的,其相关联的意义可以从两个观点来看:

其一是该句子的创立者所想要表示的意义;

另一是接收者所检验到的意义。

这两个意义并非总是一样的,前者称为语言的语义,后者是其语用意义。

幽默、双关语和谜语就是利用这两方面意义间的差异。

如果不考虑语义和语用,即只从语法这一侧面来看语言,这种意义下的语言称作形式语言。

形式语言抽象地定义为一个数学系统。

“形式”是指这样的事实:

语言的所有规则只以什么符号串能出现的方式来陈述。

形式语言理论是对符号串集合的表示法、结构及其特性的研究。

是程序设计语言语法分析研究的基础。

2.2形式语言基础

2.2.1字母表和符号串

(1)字母表:

符号的非空有限集合。

例:

∑={a,b,c}

(2)符号:

字母表中的元素。

a,b,c

(3)符号串:

符号的有穷序列。

a,aa,ac,abc,…

空符号串:

无任何符号的符号串或长度为零的符号串,记为ε。

符号串的形式定义

有字母表∑,定义:

①ε是∑上的符号串;

②若x是∑上的符号串,且a∈∑,则ax或xa是∑上的符号串;

③y是∑上的符号串,iff(当且仅当)y可由

(1)和

(2)产生。

2.2.2符号串和符号串集合的运算

(1)符号串相等:

若x、y是集合上的两个符号串,则x=yiff(当且仅当)组成x的每一个符号和组成y的每一个符号依次相等。

(2)符号串的长度:

x为符号串,其长度|x|等于组成该符号串的符号个数。

x=STV,|x|=3

(3)符号串的联接:

若x、y是定义在Σ是上的符号串,且x=XY,y=YX,则x和y的联接xy=XYYX也是Σ上的符号串。

注意:

一般xy≠yx,而εx=xε

(4)符号串集合的乘积运算:

令A、B为符号串集合,定义

AB={xy|x∈A,y∈B}

(5)符号串集合的幂运算:

有符号串集合A,定义

A0={ε},A1=A,A2=AA,A3=AAA,……An=An-1A=AAn-1,n>

(6)符号串集合的闭包运算:

设A是符号串集合,定义

A+=A1∪A2∪A3∪……∪An∪……称为集合A的正闭包。

A*=A0∪A+称为集合A的闭包。

A={x,y}

A+={x,y,xx,xy,yx,yy,xxx,xxy,xyx,xyy,……}

A1A2A3

A*={ε,x,y,xx,xy,yx,yy,xxx,xxy,xyx,xyy,……}

A0A1A2A3

为什么对符号、符号串、符号串集合以及它们的运算感兴趣?

若A为某语言的基本字符集

A={a,b,……z,0,1,……,9,+,-,×

/,(,),=……}

B为单词集

B={begin,end,if,then,else,for,……,<

标识符>

<

常量>

……}

则B⊂A*。

语言的句子是定义在B上的符号串。

若令C为句子集合,则C⊂B*,程序⊂C

2.3文法的直观理解

(1)什么是文法:

文法是对语言结构的定义与描述。

即从形式上用于描述和规定语言结构的称为“文法”(或称为“语法”)。

例:

有一句子:

“我是大学生”。

这是一个在语法、语义上都正确定句子,该句子的结构(称为语法结构)是由它的语法决定的。

在本例中它为“主谓结构”。

如何定义句子的合法性?

如何定义有穷语言、无穷语言?

(2)语法规则:

我们通过建立一组规则(产生式),来描述句子的语法结构。

规定用“:

:

=”表示“由……组成”或“定义为…”。

如:

<

句子>

=<

主语>

<

谓语>

代词>

|<

名词>

=你|我|他

=王民|大学生|工人|英语

动词>

直接宾语>

=是|学习

(3)由产生式推导句子:

有了一组产生式之后,可以按照一定的方式用它们去推导或产生句子。

推导方法:

从一个要识别的符号开始推导,即用相应产生式的右部来替代产生式的左部,每次仅用一条产生式去进行推导。

⇒<

…………

这种推导一直进行下去,直到所有带<

>

的符号都由终结符号替代为止。

代词>

⇒我<

⇒我是<

⇒我是大学生

有一英语句子:

Thebigelephantatethepeanut.

冠词>

形容词>

=the

=big

=elephant

宾语>

=ate

=peanut

⇒the<

⇒thebig<

⇒thebigelephant<

⇒thebigelephantate<

⇒thebigelephantatethe<

⇒thebigelephantatethepeanut

上述推导可写成

thebigelephantatethepeanut

说明:

(1)有若干语法成分同时存在时,我们总是从最左的语法成分进行推导,这称之为最左推导,类似的有最右推导(一般推导)。

(2)从一组产生式可推出不同的句子,如以上产生式还可推出“大象吃象”、“大花生吃象”、“大花生吃花生”等句子,它们在语法上都正确,但在语义上都不正确。

所谓文法是在形式上对句子结构的定义与描述,而未涉及语义问题。

(4)语法树:

我们用一种树型结构来描述一个句子的语法结构。

称之为语法树。

2.4文法和语言的形式定义

2.4.1文法的定义

文法定义:

文法是产生式的有穷集合,通常定义为四元组:

G=(VN,VT,P,Z)

其中:

VN:

非终结符号集

VT:

终结符号集

P:

产生式或规则的集合

Z:

开始符号(识别符号),Z∈VN

注意:

A.产生式:

产生式是一个有序对(U,x),通常写为:

U:

=x或U→x;

|U|=1|x|≥0

B.非终结符号:

出现在产生式的左部,且能推出符号或符号串的那些符号。

其全体构成非终结符号集,记为VN。

C.终结符号:

不出现在产生式的左部,且不能推出符号或符号串的那些符号。

其全体构成终结符号集,记为VT。

且VN∩VT=Φ,VN∪VT=V(V是文法的字母表)。

无符号整数的文法:

G[<

无符号整数>

]=(VN,VT,P,E)

VN={<

数字串>

<

数字>

}

VT={0,1,2,3,……9}

P={<

→<

→0;

→1;

……

 

→9;

}

Z=<

几点说明:

①产生式左边符号构成集合VN,且Z∈VN。

②有些产生式具有相同的左部,可以合在一起。

<

→0|1|2|3|……|9

③给定一个文法,实际只需给出产生式集合,并指定识别符号。

]:

2.4.2推导与归约

直接推导定义:

有文法G且有v=xUy,w=xuy,其中x、y∈V*,U∈VN,u∈V*,

若U:

=u∈P,则说v直接推导出w,记为v⇒w。

若x=y=ε,有U:

=u,则说U直接推导出u,记为U⇒u。

换句话说,设x和y是x和y是符号串,若使用一次产生式可以从x变换出y,则称x直接推导出y(或者说y是x的直接推导),记为x⇒y。

例如:

G[N]:

N→ND|D

D→0|1|2|3|4|5|6|7|8|9

N⇒

(1)ND⇒

(2)NDD⇒(3)ND9⇒(4)N09⇒(5)N09⇒(6)109

当x和y是符号串已没有非终结符号时,推导就必须终止。

因为终结符不可能出现在产生式左部,所以将在产生式左部出现的符号称为非终结符号。

推导定义:

+推导:

x和y是x和y是符号串,若使用若干次产生式可以从x变换出y,则称x推导出y(或者说y是x的推导),记为x

y。

或者说:

若有直接推导序列:

x=U0⇒U1⇒U2⇒……⇒Un=y,则x

例:

N⇒

(1)ND⇒

(2)NDD⇒(3)ND9⇒(4)N09⇒(5)N09⇒(6)109

则有:

N

109。

*推导:

x和y是x和y是符号串,若使用零次或若干次产生式可以从x变换出y,则称x*推导出y(或者说y是x的*推导),记为x

最右推导:

若x和y是符号串α中有两个以上的非终结符号时,对推导的每一步坚持把α中的最右非终结符号进行替换,称为最右推导。

最左推导:

若x和y是符号串α中有两个以上的非终结符号时,对推导的每一步坚持把α中的最左非终结符号进行替换,称为最左推导。

直观意义:

规范推导=最右推导

归约定义:

推导的逆过程称之为归约。

x⇒y,可称为x直接推导出y,也可称为y直接归约出x。

x

y,可称为x推导出y,也可称为y归约出x。

句型定义:

给定文法G[Z],x是句型当且仅当Z

x,且x∈V*;

句子定义:

给定文法G[Z],x是句子当且仅当Z

x,且x∈VT*;

语言定义:

给定文法G[Z],语言L(G[Z])={x|z

x,x∈VT*};

对给定的语言{abna|n≥1},构造其文法为:

G1[Z]:

Z→aBa,

B→b|bB

G2[Z]:

Z→aBa,

B→b|Bb

文法等价定义:

G和G'

是两个不同的文法,若L(G)=L(G'

),则G和G’为等价文法。

编译感兴趣的问题是:

给定x,G,求x∈L(G)?

2.4.3递归文法

1.递归产生式:

产生式右部有与左部相同的符号

对于U:

=xUy,

若x=ε,即U:

=Uy,左递归;

若y=ε,即U:

=xU,右递归;

2.递归文法:

文法G,存在U∈Vn,

ifU

…U…,则G为递归文法;

ifU

U…,则G为左递归文法;

…U,则G为右递归文法;

3.左递归文法的缺点:

不能用自顶向下的方法进行语法分析。

4.递归文法的优点:

可用有穷条产生式,定义无穷语言。

对于前面给出的无符号整数的文法是有递归文法,我们用了13条产生式就可以定义出所有的无符号整数。

若不用递归文法,那将要用多少条产生式呢?

2.5文法分类

形式语言:

用文法和自动机所描述的没有语义的语言。

L(G[Z])={x|Z

x,x∈VT*}

文法定义:

乔姆斯基将所有文法都定义为一个四元组:

G=(VN,VT,P,Z)

VN:

VT:

开始符号(识别符号),Z∈VN

文法和语言分类:

0型、1型、2型、3型

这几类文法的差别在于对产生式施加不同的限制。

定义:

0型文法:

u:

=v,其中u∈V+,v∈V*

0型文法称为短语结构文法。

产生式的左部和右部都可以是符号串,一个短语可以产生另一个短语。

0型语言:

L0。

这种语言可以用图灵机(Turing)接受。

1型文法:

xUy:

=xuy,其中U∈VN,x、y、u∈V*

1型文法也称为上下文敏感或上下文有关。

也即只有在x、y这样的上下文中才能把U改写为u。

1型语言:

L1。

这种语言可以由一种线性界限自动机接受。

2型文法:

U:

=u,其中U∈VN,u∈V*

2型文法也称为上下文无关文法。

也即把U改写为u时,不必考虑上下文。

2型文法与BNF表示相等价。

2型语言:

L2。

这种语言可以由下推自动机接受。

3型文法:

(左线性)P:

=T或U:

=ωT,其中U、T∈VN,ω∈VT,,,

(右线性)P:

=Tω,其中U、T∈VN,ω∈VT

3型文法也称为正则文法。

它是对2型文法进行进一步限制。

3型语言:

L3。

又称正则语言、正则集合。

这种语言可以由有穷自动机接受。

根据上述讨论,L0⊂L1⊂L2⊂L3。

0型文法可以产生L0、L1、L2、L3,但2型文法只能产生L2,不能产生L1。

2.6语法树与二义性文法

2.6.1推导与语法树

(1)语法树:

句子结构的图示表示法,它是一种有向图,由结点和有向边组成。

如下图:

结点:

符号

根结点:

识别符号

中间结点:

非终结符

叶结点:

终结符或非终结符

有向边:

表示结点间的派生关系。

(2)句型的推导及语法树的生成(自顶向下)

给定G[Z],句型w:

可建立推导序列,Z

w

可建立语法树,以Z为树根结点,每步推导生成语法树的一枝,最终可生成句型的语法树。

注意一个重要事实:

文法所能产生的句子,可以用不同的推导原则(使用产生式顺序不同)将其推导出来。

语法树的生成规律不同,但最终生成的语法树形状完全相同。

某些文法有此性质,而某些文法不具此性质。

句子10的语法树:

(3)子树与简单子树

子树:

语法树中的某个结点(子树的根)连同它向下派生的部分所组成。

简单子树:

只有单层分枝的子树称为简单子树。

(4)树与推导

句型推导过程⇔句型语法树的生长过程

由推导构造语法树

从识别符号开始,自左向右建立推导序列。

由根结点开始,自上而下建立语法树。

有文法G[<

],并给定句型10,其推导过程及语法树的生长过程分别为:

⇒<

⇒1<

⇒10

由语法树构造归约:

自下而上地修剪子树的末端结点,直至把整棵树剪掉(留根),每剪一次对应一次归约。

从句型开始,自右向左地逐步进行归约,可以建立一个归约序列。

规范归约定义:

对句型中最左简单短语(句柄)进行的归约称为规范归约。

规范归约与规范推导互为逆过程。

规范句型

通过规范推导或规范归约所得到的句型称为规范句型。

在上例中,1<

就不是规范句型,因为:

=≯<

=≯<

=≯<

=≯1<

=≯10

注意:

其中符号=≯表示为归约。

2.6.2文法的二义性

二义性文法定义:

若对于一个文法的某一句子存在两棵不同的语法树,则该文法是二义性文法,否则是无二义性文法

或:

若一个文法的某句子存在两个不同的规范推导,则该文法是二义性的,否则是无二义性的。

若一个文法的某规范句型的句柄不唯一,则该文法是二义性的,否则是无二义性的。

换而言之,无二义性文法的句子只有一棵语法树,尽管推导过程可以不同。

下面举一个二义性文法的例子。

给定文法G[E]:

P:

E→E+E|E*E|(E)|i

VN={E}

VT={+,*,(,),i}

对于句子S=i+i*i∈L(G[E]),存在不同的规范推导:

(1)E⇒E+E⇒E+E*E⇒E+E*i⇒E+i*i⇒i+i*i

(2)E⇒E*E⇒E*i⇒E+E*i⇒E+i*i⇒i+i*i

这两种不同的推导对应了两种不同的语法树:

以上是自顶向下来看文法的二义性,我们还可以自底向上来看文法的二义性。

上例中,规范句型E+E*i是由i+i*i通过两步规范规约得到的,但对于同一个句型E+E*i,它有两个不同的句柄(对应上述两棵不同的语法树):

i和E+E。

因此语法的二义性意味着句型的句柄不唯一。

若文法是二义性的,则在编译时就会产生不确定性,遗憾的是在理论上已经证明:

文法的二义性是不可判定的,即不可能构造出一个算法,通过有限步骤来判定任一文法是否有二义性。

现在的解决办法是:

提出一些限制条件,称为无二义性的充分条件,当文法满足这些条件时,就可以判定文法是无二义性的。

由于无二义性文法比较简单,我们也可以采用另一种解决办法:

即不改变二义性文法,而是确定一种编译算法,使该算法满足无二义性充分条件。

算术表达式的文法

E→E+E|E*E|(E)|i

E→E+T|T

T→T*F|F

F→(E)|i

Pascal条件语句的文法

条件语句>

=If<

布尔表达式>

then<

语句>

|If<

then<

else<

:

=<

非条件语句>

|……。

2.7句型的分析

任务:

给定G[Z]:

S∈VT*,判定是否有S∈L(G[E])?

这是词法分析和语法分析所要做的工作,将在第三、四章中详细介绍。

2.7.1句型的短语、简单短语和句柄

短语定义:

设G[Z]是给定文法,w=xuy∈V+,为该文法的句型,如果满足下面两个条件:

①Z

xUy;

②U

u;

则称句型xuy中的子串u是句型xuy的短语。

简单短语定义:

②U⇒u;

则称句型xuy中的子串u是句型xuy的简单短语(或直接短语)。

直观理解:

短语是前面句型中的某个非终结符所能推出的符号串。

句柄定义:

任一句型的最左简单短语称为该句型的句柄。

2.7.2确定句柄的步骤

确定句柄的步骤为:

短语→简单短语→句柄

短语、简单短语是相对于句型而言,一个句型可能有多个短语、简单短语,句柄只能有一个。

给定文法G:

E→T|E+T|E-T

T→F|T*F|T/F

F→i|(E)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1