上下文无关问法cfg

        上下文无关文法(context free grammar,简称为CFG)是形式问法的一种,和其对应的语言是上下文无关语言。所谓上下文无关,如果用我们的语言举例,就是一个文法符号,不论在任何地方出现,他表示的意思都是不变的,不会随着上下文的语义为改变。

        首先我们看一下形式文法:形式文法描述形式语言的基本想法是,从一个特殊的初始符号出发,不断的应用一些产生式规则,从而生成出一个字串的集合。

        从上下文无关问法的定义上来说,若一个形式文法G = (Vn, Vt, S, P) 的产生式规则都取如下的形式:Vn->w,则谓之。其中 Vn∈N ,w∈(Vp∪Vp)* 。

        解释一下:G是 4-元组,其中Vn是非空有限的非终结符集合,Vt是非空有限的终结符集。S是文法的开始符号,P是产生式集合。通常用大写字母表示非终结符,小写字母表示终结符,α、β、γ等代表由 终结符和非终结符号的并集的闭包 中的元素 组成的符号串。

        产生式的形式往往是:A→α。箭头左边是一个非终结符(因为只有非终结符才能转换成终结符+非终结符的形式),称之为产生式的左部,箭头右边称之为右部。A是一个非终结符,而α是由 非终结符号和终结符号的并集 的闭包中的元素组成的符号串。

是不是感觉很晦涩难懂?那我们用一个例子来看看上下文无关问法对于一种语言的描述:

                                    

       我们很容易就看出来这个英语例句是对的。那么为什么这个就是对的?这说明这一句话符合英文语法规则。什么是语法规则?下面一堆是英文的语法规则,而这些规则在上下文无关问法中对应的就是产生式(带->这些产生式)。比如说第一个,<句子>就是在问法中相当于非终结符Vn,由产生式规则可知,<句子>-><主语><谓语><间接宾语><直接宾语>。这就把句子分解成各个模块。然后再对模块的右部逐一进行分解,直到每一个产生式的右部都是一个终结符,不能分解了。然后我们发现,这个句子中的终结符和单词是对应的,也就是成功的分解了,这说明这句话是对的。分解的过程如下:

                                   

      

        其实上面的过程就相当于说明了一个上下文无关问法是如何定义一门语言的:

        从S也就是问法开始符号出发,连续用一个产生式替代之前产生式的右部某个部分,直到右部不能继续被替代,也就是全是非终结符了,替换结束,形成了语言。

   例如,算术表达式的定义可以写为:

   E→(E)

           E→E+E

   E→E*E

   E→i

   E代表算术表达式,i代表终结符。

     对上面四个产生式整合,我们可以形成问法G:   E→ E + E | E*E|  (E) | i

   从上面我们对上下文无关问法的分析,要从开始符号E开始。从E出发 E=>(E)=>(E+E)=>(E*E+E)=>(i*E+E)=>(i*i+E)=>(i*i+i)。其中 "=>" 表示向右推导一步。上面的步骤表示上下文无关问法推导出了(i * i + i)这个算术表达式,也就是说这个表达式是符合语法,是对的。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值