上下文无关文法(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)这个算术表达式,也就是说这个表达式是符合语法,是对的。

上下文无关问法cfg相关推荐

  1. 短语结构文法(PSG)、上下文有关文法(CSG)、上下文无关文法(CFG)、右线性文法(RLG)的区别

    Part 1 短语结构文法(PSG).上下文有关文法(CSG).上下文无关文法(CFG).右线性文法(RLG)的区别 Part 2 概念 文法G=(V,T,P,S) G叫做0型文法(type 0 gr ...

  2. 形式语言与自动机——第三章 上下文无关文法与下推自动机

    文章目录 3.1 推导树与二义性 3.2 上下文无关文法的改写 3.2.1 CFG的最简化 3.2.2 CFG的变换 3.2.2.1 去除可零化的非终结符 3.2.2.2 去除单产生式 3.2.2.3 ...

  3. python语言平台无关_从零开始学Python自然语言处理(十二)——上下文无关文法...

    前文传送门: 在说上下文无关文法之前,我们来看看形式语言理论,什么是形式语言理论?形式语言理论形式语言理论是用数学方法研究自然语言或者程序设计语言的理论.研究语言组成规则,而不研究语言的具体含义.说到 ...

  4. 上下文无关文法和正则文法_什么是上下文无关文法?

    上下文无关文法和正则文法 Have you ever noticed that, when you are writing code in a text editor like VS code, it ...

  5. 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★

    文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 2 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...

  6. 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★

    文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 1 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...

  7. 【计算理论】计算理论总结 ( 下推自动机计算过程 | 上下文无关文法 CFG 转为下推自动机 PDA ) ★★

    文章目录 一.下推自动机计算过程 二.上下文无关文法 CFG 转为下推自动机 PDA 流程 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 ...

  8. 【计算理论】下推自动机 PDA ( 设计下推自动机 | 上下文无关语法 CFG 等价于 下推自动机 PDA )

    文章目录 I . 下推自动机 设计 II . 上下文无关语法 ( CFG ) 等价于 下推自动机 ( PDA ) I . 下推自动机 设计 设计下推自动机 , 可以识别 {wwR:w∈{0,1}∗}\ ...

  9. 上下文无关文法的分析树(Context-Free Grammar, CFG)的分析树--编译原理

    上下文无关文法的分析树(Context-Free Grammar, CFG)的分析树 分析树 根节点的符号为文法开始符号S 每个内部节点都是对某个产生式A→β的应用,该节点的标号就是产生式的左部,子节 ...

最新文章

  1. 图像的均值和方差python_python-绘制均值和标准差
  2. 深入了解iSCSI的2种多路径访问机制
  3. ORA-04030: 在尝试分配...字节(...)时进程内存不足的原因分析解决方法
  4. android 传感器 balance filter,Android 传感器 API.doc
  5. 每日一题(53)—— 评价代码片段
  6. 带你根据源码了解View的事件触发流程,主要讲解为什么子View返回true,ViewGroup就无法接收到事件的过程
  7. php fast cgi nginx,通过fast-cgi连接php-fpm和nginx之间的连接是持...
  8. AD 组策略应用与排错(2排错)
  9. java注解接收上传文件_SpringMVC 处理 multipart/data 请求实现文件上传
  10. asp.net mvc 伪静态添加
  11. VSS2005安装和配置过程中遇到的问题
  12. softmax函数_干货 | 浅谈Softmax函数
  13. 开发与测试如同左手和右手
  14. 5G·深·体验1:5G到底有多快?
  15. 微信小程序 canvas 笑脸
  16. wifi连接成功,但提示“无法连接到Internet”(已解决)
  17. 模板的超详细的案例讲解(上)
  18. tpg色卡查询_潘通TPX色卡|PANTONE TPG色卡-潘通服装和家居色彩指南-纸版Pantone for fashion home color guide-paper...
  19. Linux查看安装包
  20. 并发编程 定时线程池ScheduledThreadPoolExecutor学习总结

热门文章

  1. python代码-在哪里编写python代码
  2. python和c先学哪个-python和c先学哪个
  3. python100例详解-【学习笔记】python100例
  4. micropython和python区别-MicroPython简介
  5. 如何自学python知乎-学习Python价格多少?如何学习好?老男孩IT教育
  6. 教你win10系统无法识别语音识别的解决方法
  7. java停机保存数据_哦,这就是java的优雅停机?(实现及原理)
  8. dio设置自定义post请求_Flutter中的http网络请求
  9. 密码加密模块 bcrypt (详细,好理解,示例源码)
  10. linux系统外接硬盘_如何使用外部硬盘安装linux系统?