anbmcmdn 上下文无关文法_词法分析 | 上下文无关文法和推导
上下文无关文法是描述程序语言语法的强有力的数学工具。
乔姆斯基文法体系
3型文法:正则文法:词法结构
2型文法:上下文无关文法:语法结构
1型文法:上下文有关文法
0型文法:任意文法
每一个外部文法(大圈)都比内部文法(小圈)表达能力强。
举个自然语言处理的例子
- 自然语言中的句子的典型结构
- 主语 谓语 宾语
- 名词 动词 名词
- 例子:
- 名词:{羊, 老虎, 草, 水}
- 动词:{吃, 喝}
- 句子:
- 羊 吃 草
- 羊 喝 水
- 老虎 吃 老虎
- 草 吃 老虎
- ......
对这个例子,我们进行形式化分析:
(S 表示句子, -> 表示推出, N 表示名词, V 表示动词)
S -> N V N
N -> s(sheep)| t(tiger)| g(grass)| w(water)
V -> e(eat)| d(drink)
我们将其中的大写符号叫做非终结符:{S, N, V}
将小写的符号(名词+谓词)叫做终结符:{s, t, g, w, e, d}
开始符号是:S
上下文无关文法
上下文无关文法 G 是一个四元组:
G = (T, N, P, S)
- 其中 T 是终结符集合
- N 是非终结符集合
- P 是一组产生式规则
- 每条规则的形式: X -> β1 β2 ... βn, n >= 0
- 其中 X ∈ N, βi ∈(T ∪ N)
- 每条规则的形式: X -> β1 β2 ... βn, n >= 0
- S 是唯一的开始符号(非终结符)
- S ∈ N
对于之前给出的上下文无关文法的例子
S -> N V N
N -> s| t| g| w
V -> e| d
G = {N, T, P, S}
非终结符号:N = {S, N, V}
终结符号: T = {s, t, g, w, e, d}
开始符号:S
产生式规则集合:
{ S -> N V N,
N -> s,
N -> t,
N -> g,
N -> w,
V -> e,
V -> d}
在给一个上下文无关文法的例子
E -> num| id| E + E| E * E
G = {N, T, P, S}
非终结符: N = {E}
终结符: T = {num, id, +, *}
开始符号:E
产生式规则集合:
{ E -> num
E -> id
E -> E + E
E -> E * E }
也可以将上述集合中的四条语句相互连接起来,组合成如题所示的用或表示的一条语句。
推导
- 给定文法 G, 从 G 的开始符号 S 开始,用产生式的右部替换左侧的 非终结符
- 此过程不断重复,直到不出现非终结符为止
- 最终的串称为句子
举个例子,如下面的文法 G
S -> N V N
N -> s| t| g| w
V -> e| d
首先,从开始符号 S 开始进行替换。 S -> N V N
此中还有三个非终结符,对其进行循环,替换 V, 得到 N d N ;
接着,替换第三个 N 为 g , 得到 N d g ;
最后,替换仅剩下的最后一个非终结符 N 为 t, 得到 t d g。
对于上面的三个终结节点 N V N 的选取先后顺序可以自行调整,没有严格的规定。
最左推导和最右推导
- 最左推导:每次总是选择最左侧的符号进行替换。
- 即对于上例中的 N V N ,首先替换最左边的 N, 再替换之后最左侧的非终结符 V, 最后替换最有一个非终结符 N。
- 最右推导:每次总是选择最右侧的符号进行替换。
语法分析
给定文法 G 和句子 S, 语法分析要回答的问题:是否存在对句子 S 的推导?
若仍然选择上面的文法 G,当 S = t d g 时,我们能够实现 S 通过若干步的推导得到 t d g。所以回答 是。
若 S = t d d, 则不能实现该推导,回答 否。
语法分析器的任务
语法分析器从记号流中获取 句子 S ,再接受使用 上下文无关文法 G 描述的语言的语言规则,回答在 G 中是否存在对 S 的推导。是或者否。并给程序员反馈精确的出错信息。
原文链接:
- 编译原理 - 网易云课堂
anbmcmdn 上下文无关文法_词法分析 | 上下文无关文法和推导相关推荐
- python进入上下文管理器_浅谈Python中with(上下文管理器)的用法
例子一 首先来看一段代码: classFoo(object):def __init__(self):print('实例化一个对象')def __enter__(self):print('进入')def ...
- 怎么根据矩阵判断极大无关组_如何判断向量是否是矩阵的极大无关组?
首先你这个提问不是很严谨哦ε3ε 极大无关组是向量组里面的概念,而在矩阵里没有极大无关组这个概念,虽然向量组合并在一起可以看成一个矩阵,但不能说矩阵有极大无关组. 我们先从概念出发,极大线性无关组:在 ...
- 上下文无关文法和正则文法_什么是上下文无关文法?
上下文无关文法和正则文法 Have you ever noticed that, when you are writing code in a text editor like VS code, it ...
- xx是一个类型 这在给定的上下文_基于上下文的派发:挂起临时变量内存
最近做一些蒙卡相关的东西,然后遇到有一个可能很多人都会遇到的问题: 把所有的步骤都手写成原地(in-place)操作由于需要自己来保管各种中间变量会很麻烦(增加心智负担),但是用比较正常的方式去写又由 ...
- 如何避免循环查询数据库_与数据库无关的查询是不可避免的
如何避免循环查询数据库 As the amount of data managed by an organization grows, the difficulty of managing and q ...
- 利用classloader同一个项目中加载另一个同名的类_线程上下文类加载器ContextClassLoader内存泄漏隐患...
前提 今天(2020-01-18)在编写Netty相关代码的时候,从Netty源码中的ThreadDeathWatcher和GlobalEventExecutor追溯到两个和线程上下文类加载器Cont ...
- 【随想】_无关技术_你是合格的项目经理人吗?
---恢复内容开始--- " 一流的领导,自己不干,下属拼了命为你干 二流的领导,自己和下属一起拼了命干 三流的领导,自己不干,要求下属拼了命为自己干 四流的领导,自己拼了命干,下属不干 五 ...
- axure9 邮件点击效果_总是收到无关的工作邮件?这个有意思的工具可以帮你消灭它们...
尽管<微信><企业微信><钉钉>等即时沟通 app 的出现提高了沟通的效率,但邮件在我们的工作.生活中还是有不可或缺的作用. 比如工作出现争端的时候,你就可以直接甩 ...
- python上下文管理关键字_[宜配屋]听图阁
前言 如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有 "with" 关键字的语句,它通常用在什么场景呢?今天就来说说 with 和 上下文管理器. 对于系统资源如文件 ...
- python上下文管理关键字_详解 Python 中的 with 与 上下文管理器
with 这个关键字,对于每一学习Python的人,都不会陌生. 操作文本对象的时候,几乎所有的人都会让我们要用 with open ,这就是一个上下文管理的例子.你一定已经相当熟悉了,我就不再废话了 ...
最新文章
- [转]wxODBC(wxWidgets)中使用驱动程序方式打开数据库
- SPL--Serializable
- git 拉取分支代码 合分支
- scala for循环
- 腾讯云,物联网通信产品,动态注册步骤
- BOM之navigator对象和用户代理检测
- .NET中的异步编程(一)-为什么需要异步
- Oracle 日期加减运算
- 链路聚合_链路聚合实验
- 安裝MAVEN插件(轉)
- linux 命令缺失安装,Redhat7没有安装ifconfig命令的解决方法
- php 图片裁剪保存,PHP图片裁剪与缩放示例(无损裁剪图片)
- 2022年南京大学软件工程专硕考研初试第二411分上岸经验贴
- 书籍翻译 - Fundamentals of Computer Graphics, Fourth Edition 虎书第四版中文翻译
- 用了很多群控与云控,微信还是慢慢死掉了
- SCI收录期刊——遥感学科
- 前端的长度单位有哪些
- 总结 27 类深度学习主要神经网络:结构图及应用
- “特质波动率之谜”(Idiosyncratic Volatility),用Python计算特质波动率
- 关于Ajax跨域的解决方案
热门文章
- win10“无法完成操作,因为文件包含病毒或潜在的垃圾软件”解决办法
- 再次回归 IDEA 的部分修改记录...
- 轻松斩断信息安全黑手!就这?
- Excel练习线性回归
- 并查集(Union-Find)算法详解
- 【计算机考研408强化-操作系统】1. 操作系统的基本概念
- 【Android 逆向】Android 逆向通用工具开发 ( PC 端工具 hacktool 启动 main 函数分析 | hacktool 工程中的核心类 HackCommand 分析 )
- 海尔智慧电视如何进入工厂模式
- 全自动抠图换背景软件下载_抠图换背景app
- tkmybatis简单教程