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

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

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

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

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

第二章文法和语言的概念和表示

第二章文法和语言的概念和表示

本章概述

本章中,我们将概述高级程序语言的结构和主要的共同特征,并介绍程序语言的语法描述方法。

主要学习内容:

程序设计语言的定义,高级语言的一般特性,高级语言的语法描述,上下文无关文法,语法分析树和二义性,乔姆斯基文法体系。

学习目标:

理解程序语言的词法、语法和语义等概念,进一步掌握高级程序设计语言的一般结构和主要共同特征,使学生具有必要的基础知识;理解文法和语言的一些基本概念,如文法的定义和构造、句型、句子、语言、推导、语法树等。

学习重点和难点:

语法,语义,文法的构造。

2.1概述

显然,用高级语言编程比用低级语言来得方便,但要解决两个问题:

•1.计算机怎样懂得高级语言程序,这就需要一个翻译程序实现从源程序到目•标程序的转换。

2.用什么方法来精确定义高级语言,即怎样精确描述高级语言。

要构造一个编译程序,应深刻理解被编译的源语言的结构(即词法和法)•及其含义(即语义),同时要弄清源语言的语法规则和语义规则是采用什么理•论或什么方法来描述的。

当我们表述一种语言时,无非是说明这种语言的句子,如果语言只含有穷多个句子,则只需列出句子的有穷集就行了,但对于含有无穷句子的语言来讲,存在着如何给出它的有穷表示的问题。

以自然语言为例,人们无法列出全部句子,但是人们可以给出一些规则,用这些规则来说明(或者定义)句子的组成结构,比如汉语句子可以是由主语后随谓语而成,构成谓语的是动词和直接宾语。

任何语言均可看作一个集合。

这个集合中的每个元素都是在一定符号集•(字母表)上的一个符号串。

对于自然语言来说,它们是定义在某个字母表上的句子的集合。

对于程序语言来说,它们也是定义在某个字母表上的句子的集合。

这里•的句子,就是一个源程序。

通常,源程序是由关键字、标识符、常数、运算符以及一些界限符组成。

•这些语法成分统称为单词或单词符号。

单词符号是语言中具有独立意义的最基本单位。

语言的单词符号是由词法•规则所确定的,即词法规则规定了单词符号的形成规则。

“我是大学生”是汉语的一个句子。

用语法来描述:

〈句子〉∷=〈主语〉〈谓语〉

〈主语〉∷=〈代词〉|〈名词〉

〈代词〉∷=我|你|他

〈名词〉∷=王明|大学生|工人|英语

〈谓语〉∷=〈动词〉〈直接宾语〉

〈动词〉∷=是|学习

〈直接宾语〉∷=〈代词〉|〈名词〉

有了这一组规则以后,按照如下方式用它们导出句子:

开始去找∷=左端的带有〈句子〉的规则并把它由∷=右端的符号串代替,这个动作表示成:

〈句子〉⇒〈主语〉〈谓语〉,

然后在得到的串〈主语〉〈谓语〉中,选取〈主语〉或〈谓语〉,再用相应规则的∷=右端代替之。

比如,选取了〈主语〉,并采用规则〈主语〉∷=〈代词〉,那么得到:

〈主语〉〈谓语〉⇒〈代词〉〈谓语〉,

重复做下去,这样句子“我是大学生”的导出的全部动作过程是:

〈句子〉⇒〈主语〉〈谓语〉

⇒〈代词〉〈谓语〉

⇒我〈谓语〉

⇒我〈动词〉〈直接宾语〉

⇒我是〈名词〉

⇒我是大学生

语言概述:

语言是由句子组成的集合,是由一组符号所构成的集合。

汉语——所有符合汉语语法的句子的全体

英语——所有符合英语语法的句子的全体

程序设计语言——所有该语言的源程序的全体

研究语言

每个句子构成的规律

每个句子的含义

每个句子和使用者的关系

研究程序设计语言

每个程序构成的规律

每个程序的含义

每个程序和使用者的关系

语言研究的三个方面

语法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>0

(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<谓语>

⇒thebigelephant<动词><宾语>

⇒thebigelephantate<宾语>

⇒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

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

例:

G[<无符号整数>]:

<无符号整数>→<数字串>;

<数字串>→<数字串><数字>|<数字>;

<数字>→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

y。

例:

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

y。

最右推导:

若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为左递归文法;

ifU

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

3.左递归文法的缺点:

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

4.递归文法的优点:

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

例:

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

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

2.5文法分类

形式语言:

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

语言定义:

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

x,x∈VT*}

文法定义:

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

G=(VN,VT,P,Z)

VN:

非终结符号集

VT:

终结符号集

P:

产生式或规则的集合

Z:

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

文法和语言分类:

0型、1型、2型、3型

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

定义:

0型文法:

P:

u:

:

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

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

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

0型语言:

L0。

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

1型文法:

P:

xUy:

:

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

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

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

1型语言:

L1。

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

2型文法:

P:

U:

:

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

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

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

注意:

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

2型语言:

L2。

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

3型文法:

(左线性)P:

U:

:

=T或U:

:

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

(右线性)P:

U:

:

=T或U:

:

=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的短语。

简单短语定义:

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

①Z

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