编译原理判断文法的二义性
下列文法是二义的吗?为什么?
文法G=({A,B,S},{a,b,c}P,S),其中P为S→Ac|aB,A→ab,B→bc
答:最右推导:S=>Ac =>abc
S=>aB =>abc,
即存在两个不同的最右推导,所以该文法是二义的。
或者:
对输入字符串abc,能够造出如下两颗不同的语法树,所以该文法是二义的。
⭐⭐⭐那么问题来啦,怎么判断文法是不是具有二义性捏?
其实很简单,就看这个文法的某个句子如果有两个不同的最右(最左)推导,那这个文法就有二义性。
⭐⭐⭐又或者说可以用如下方法判断非二义性,
1.求出文法所有非终结符号的First集,
2.求出文法所有非终结符号的Follow集,
3.进行两步判断:
(1)非终结符号A的任何两个候选式的first集合不相交
(2)f若A的某个候选式可以推导出ε,则其它候选式的First集与Follow(A)不相交。
满足以上两个条件的文法一定是非二义性的。
编译原理判断文法的二义性相关推荐
- 编译原理:文法及其二义性(判定及消除)
(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 学编译原理时,会学到文法,老师在介绍完文法的相关定义后又 ...
- 编译原理——证明文法的二义性(1)
目录 推导和语法树 推导 语法树 文法二义性 在证明文法的二义性之前,我们需要熟悉几个基本的概念. 推导和语法树 推导 这里的推导,简单的来说就是指根据给出的句型(句子),对文法进行推理变化最终得到句 ...
- 编译原理——证明文法具有二义性
证明一个文法具有二义性我们需要掌握两个知识点. 1.语法分析树 定义很简单,就是把一个句型的推导写成树的形式,这种表示法就叫语法分析树,或者简称为语法树.大概是这个样子的 2.二义性 一个文法存在某个 ...
- 编译原理 LL1文法的判断和句子识别
编译原理 LL1文法的判断和句子识别 LL1文法概述 点击查看百度百科 对文法G的句子进行确定的自顶向下语法分析的充分必要条件是,G的任意两个具有相同左部的 产生式A->α|β 满足下列条件: ...
- java实验文法报告_西安邮电大学编译原理LL文法分析器实验(java).doc
西安邮电大学编译原理LL文法分析器实验(java) <编译原理>实验报告 题目: 语法分析器的制作 学生姓名: 班 级: 软件1202 学 号: 指导教师: 成 绩: 西安邮电大学计算机学 ...
- 编译原理实验 -- 文法分析
编译原理实验 – 文法分析 终结符 和 非终结符 终结符 通常使用小写字母表示,例如 abcdef 非终结符 通常使用大写字母表示,例如 ABCDEF 产生式 通俗来说,就是由终结符和非终结符组合成的 ...
- 编译原理 语法分析树和二义性文法
语法分析树是用来描述语法中句子结构的一种树,它能够动态表示一个句子推导的过程. 我们来看一个例子:由左边的文法规则可知,这是一个实现加法减法和乘法的算术表达式.从开始符号E开始,逐步推导,E => ...
- 编译原理:文法和语言总结与梳理
1. 梳理第二章的内容,写一篇理解与总结. 一. 对程序设计语言的描述从语法.语义和语用三个因素考虑: 语法:对语言结构的定义: 语义:语言的含义: 语用:从使用的角度描述语言. 形式语言理论是编译的 ...
- 编译原理(文法、符号表)
文法 在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法(文法是用于描述语言的语法结构的形式规则). 1个文法 G 是一个四元组 G = (VN , VT , S, P) ...
最新文章
- nix与linux的区别,linux – Nix / OS架构概述?
- 重建包含快照的vmdk描述文件。
- 编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
- Ubuntu mysql连接错误10060/10061的方法
- python程序设计上机实践第三章答案_20192419 实验三《Python程序设计》实验报告
- cp 过程中目录突然挂了_怎么解决管材激光切割机切管过程中出现的过烧及挂渣...
- androidStudio使用卡顿
- MSP借助五招让中小企业签约云计算服务
- 七年级计算机工作计划,七年级下学期信息技术教学计划(最新整理)
- php 标点符号,php怎么去除标点符号
- html开源flash视频播放器代码下载
- Python爬虫实战之爬取链家广州房价_02把小爬虫变大
- 怎样更改itunes备份位置_iTunes备份路径怎么改?教你无脑修改iPhone备份文件路径...
- 软件缺陷(定义+表现形式+优先级+信息+产生原因),看完这篇文章就懂了
- 试图加载不正确的程序。(异常来自HRESULT:0x8007000B)的处理方式
- VC6连接Oracle10g
- java 网易的yeah邮箱_网易163邮箱、yeah邮箱横向对比
- android日历编程,Android日历控件PickTime代码实例
- matlab四叶玫瑰线,多种语言画玫瑰,总有一款适合你表白
- 倍福--NC轴无法使能分析
热门文章
- Vivado的软件使用--PL 的LED 点亮实验
- PHP 开发 APP 接口--静态缓存篇
- java布局器嵌套_java swing布局嵌套
- Cancer Cell ChIP-seq助力揭示BATF缺失可增加CAR-T细胞抗肿瘤活性的研究
- DSLR Video Tips: Gadgets Gear 数码单反相机视频提示:小工具和装备 Lynda课程中文字幕
- 2020年会计职称考试教材《初级会计实务》内容修订
- (私人收藏)船撞桥头自然沉~~
- Vue整合到Spring Boot
- 美国西北大学计算机学院教授,美国西北大学化学院院长Teri W. Odom教授访问玛丽女王工程学院...
- 用 Python 制作 NFT 区块链作品(上)