编译原理——文法 语法分析树与文法二义性 四种文法类型 概念解释及有关习题解析 持续更新,求关注...

本文详细介绍了上下文无关文法的概念、组成部分、推导过程,包括最左和最右推导,以及四种文法类型的区别,如0型文法、1型文法、2型文法(上下文无关)和3型文法。还涉及语法分析树和文法二义性的概念,并通过实例解析加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

编译原理——文法       

一、什么是上下文无关文法?

1、什么是上下文?

2、什么是上下文无关?

3、什么是文法?

二、上下文无关文法简单描述。

三、上下文无关文法组成部分

1、终结符号

2、非终结符号

3、开始符号

4、产生式

5、上下文无关文法定义

四、上下文无关文法推导过程举例

举例:

最左推导:

最右推导:

五、语法分析树与文法二义性

六、四种文法类型

1、0型文法(短语文法)

2、1型文法(上下文有关文法)

3、2型文法(上下文无关文法)

4、3型文法(线性文法)

七、有关习题解析


编译原理——文法       

一、什么是上下文无关文法?

1、什么是上下文?

一个字或词所在的句子,它前面的字或词就是上文,后面的就是下文。

2、什么是上下文无关?

只讨论这个字或词的性质,不考虑它与其之前或之后的字词有什么联系。

3、什么是文法?

文法是描述语言的语法结构的形式规则(即语法规则)。

二、上下文无关文法简单描述。

假设有下列语法规则:

<句子> -> <主语> + <谓语> + <宾语>

<主语> -> <代词> | <名词>

<谓语> -> <动词>

<宾语> -> <代词> | <名词>

<代词> -> <他> | <她> | <它>

<动词> -> <吃> | <打> | <修>

<名词> -> <电脑> | <饭> | <游戏>

这个文法可以生成很多句子,举例几个{它吃饭,他打游戏,她吃游戏.......}

可以看到有一些搭配在语义上是不恰当的,如:她吃游戏。

上下文无关文法不关注语义是否正确,只关注语法是否符合规则。

三、上下文无关文法组成部分

1、终结符号

终结符号是组成语言的不可再分的基本符号。

可以理解为初始量

在上例中,<他> | <她> | <它> | <吃> | <打> | <修> | <电脑> | <饭> | <游戏> 都是终结符号。

2、非终结符号

非终结符号又称语法变量,是由许多终结符号或非终结符号组成的集合。

可以理解为中间量

在上例中,<代词> | <名词> |  <动词>  | <句子> 都是非终结符号。

3、开始符号

开始符号是一个特殊的非终结符号,我们最终感兴趣的部分(目的)。

可以理解为最终的输出

在上例中,<句子> 是开始符号。我们最终需要的就是一个完整的句子。

4、产生式

定义语法时的一种书写规则,遵从该规则得到非终结符号与开始符号。

可以理解为产生规则

在上例中

<名词> -> <电脑> | <饭> | <游戏>

<主语> -> <代词> | <名词>

<句子> -> <主语> + <谓语> + <宾语>

都是产生式

5、上下文无关文法定义

形式上说,一个上下文无关文法G是一个四元式(tr,Vn,S,P),其中
Vt是一个非空有限集,它的每个元素称为终结符号;
Vn是一个非空有限集,它的每个元素称为非终结符号,Vr∩Vn=∅;
S是一个非终结符号,称为开始符号;
P是一个产生式集合(有限),每个产生式的形式是P→a,其中,P∈Vn,a∈(Vr∪Vv)*。

开始符号S至少必须在某个产生式的左部出现一次。

四、上下文无关文法推导过程举例

推导:

定义一个上下文无关文法:

E -> i | EAE

A -> + | *

其中,E,A是非终结符,E是开始符号,而i,+和*是终结符

推导中心思想:从文法的开始符号出发,反复连续使用产生式,对非终结符进行替换和展开。

例如:                                                 E -> E+E | E*E | (E) | i

可得:                                                 E => (E) => (E+E) => (i+E) => (i+i)

如果a1=>a2=>...=>an,则我们称这个序列是从a1至an的一个推导。若存在一个从a1至an的推导,则称a1可推导出an.

               +                                                                                                  *  
我们用a1=>an表示:从a1出发,经一步或若干步,可推导出an。而用a1=>an表示:从a1出发,经0步或若干步, 可推导出an。

              *                                          +

换言之,a=>β意味着,或者a=>β,或者a=>β。

                                                                       *

假定G是一个文法,S是它的开始符号。如果S=>a,则称a是一个句型。仅含终结符号的句型是一个句子。 文法G所产生的句子的全体是一个语言,将它记为L(G)。

                                                                       +

L(G)={a|S=>a&a∈Vt*}

举例:

定义文法G:

S -> bA

A -> aA | a

推导过程:

S => bA =>ba

S => baA => baa

...

S => bA => baA => ... =>ba...a

归纳可得

L(G)={b*a^n|n>=1}

最左推导:

每一步推导都是最左非终结符进行替换

如:E + E => e + E => e + e

最右推导:

每一步推导都是最右非终结符进行替换

如:E + E => E + e => e + e

五、语法分析树与文法二义性

1、语法分析树

2、文法二义性

一个文法中存在某个句子(上面有定义),其最左(最右)推导是两个不同的式子,则称其为二义文法。

定义文法G:

E -> i | EAE

A -> + | *

可以有以下推导(最左):

 E -> (E) -> (E*E) -> (i*E) -> (i*E+E) -> (i*i+E) -> (i*i+i)

也可以有推导(最右):

  E -> (E) -> (E*E) -> (E*i) -> (E+E*i) -> (E+i*i) -> (i+i*i)

六、四种文法类型

概念:空字,闭包,自动机(以后会写一个关于语法描述的文章)。

1、0型文法(短语文法)及举例

设G=(Vn, Vt,P,S),如果它的每个产生式α->β是这样一种结构:α∈(Vn∪Vt)* (*表示闭包,表示用集合中的任意一个元素组合形成的串),且至少含有一个非终结符,而β∈(Vn∪Vt)*,则G是一个0型文法。

0型文法也称为短语文法,Chomsky证明了,0型文法的能力相当于图灵机(Turing),或者说,任何0型文法语言都是递归可枚举的,反之,递归可枚举集必定是一个0型文法。0型文法是这几类文法中,限制最少的一个。

 Vn = {A,B},Vt = {a,b}。Ab -> ba, A -> aBa,Aa -> b,B -> A是0型文法,但ab->A不是0型文法,因为ab不含非终结符。

2、1型文法(上下文有关文法)

3、2型文法(上下文无关文法)

4、3型文法(线性文法)

七、有关习题解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

umbrella244

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值